stderr = $stderr; $this->infoXml = new DomDocument("1.0","UTF-8"); $this->infoXml->preserveWhiteSpace = false; $this->infoXml->formatOutput = true; } function GetInfoXmlFilePath() { return getenv("DDINFO")."/".getenv("AMDA_USERS_INFO"); } function GetGroupsXmlFilePath() { return getenv("DDINFO")."/".getenv("AMDA_GROUPS_INFO"); } function LoadInfoXmlFile() { if (file_exists($this->GetInfoXmlFilePath())) { $this->infoXml->load($this->GetInfoXmlFilePath()); $this->rootElement = $this->infoXml->documentElement; } else { $this->rootElement = $this->infoXml->createElement("users"); $this->infoXml->appendChild($this->rootElement); } return 1; } function AddUser($login, $pwd_hash, $first_name, $last_name, $email, $news, $groups) { if (!$this->LoadInfoXmlFile()) return 0; $users = $this->infoXml->getElementsByTagName("user"); //test if login is already used for ($i = 0; $i < $users->length; $i++) { $crtLogin = $users->item($i)->getAttribute("login"); if ($crtLogin == $login) { fprintf($this->stderr,"Login already exist on users info file\n"); return 0; } } date_default_timezone_set('UTC'); $user = $this->infoXml->createElement("user"); $user->setAttribute("login",$login); $user->setAttribute("name",$last_name); $user->setAttribute("first_name",$first_name); $user->setAttribute("group",$groups); $user->setAttribute("email",$email); $user->setAttribute("date",date('j/m/y')); $user->setAttribute("news",$news); $this->rootElement->appendChild($user); exec('DDadmin -a '.$login.' '.$pwd_hash,$output,$return); if ($return != 0) { fprintf($this->stderr,"DDadmin error : ".$output[0]."\n"); return 0; } else $this->infoXml->save($this->GetInfoXmlFilePath()); return 1; } function ModifyUserPwd($login, $pwd_hash, $pwd_hash_new) { exec('DDadmin -m '.$login.' '.$pwd_hash.' '.$pwd_hash_new,$output,$return); if ($return != 0) { fprintf($this->stderr,"DDadmin error : ".$output[0]."\n"); return 0; } return 1; } function ModifyUserGroup($login,$groups) { if (!$this->LoadInfoXmlFile()) return 0; $users = $this->infoXml->getElementsByTagName("user"); for ($i = 0; $i < $users->length; $i++) { $crtLogin = $users->item($i)->getAttribute("login"); if ($crtLogin == $login) { $users->item($i)->setAttribute("group",$groups); $this->infoXml->save($this->GetInfoXmlFilePath()); return 1; } } fprintf($this->stderr,"Cannot found user\n"); return 0; } function ResetUserPwd($login) { exec('DDadmin -r '.$login,$output,$return); if ($return != 0) { fprintf($this->stderr,"DDadmin error : ".$output."\n"); return 0; } else fprintf($this->stderr,"New password is : ".$output[0]."\n"); return 1; } function DeleteUser($login) { if (!$this->LoadInfoXmlFile()) return 0; $users = $this->infoXml->getElementsByTagName("user"); for ($i = 0; $i < $users->length; $i++) { $crtLogin = $users->item($i)->getAttribute("login"); if ($crtLogin == $login) { $this->rootElement->removeChild($users->item($i)); break; } } exec('DDadmin -d '.$login,$output,$return); if ($return != 0) { fprintf($this->stderr,"DDadmin error : ".$output[0]."\n"); return 0; } $this->infoXml->save($this->GetInfoXmlFilePath()); return 1; } //This function will be deprecated for AMDA-NG function GenerateGroupsXmlFile() { if (!$this->LoadInfoXmlFile()) return 0; $users = $this->infoXml->getElementsByTagName("user"); $groupsXml = new DomDocument("1.0","UTF-8"); $groupsXml->preserveWhiteSpace = false; $groupsXml->formatOutput = true; $rootGroupsElement = $groupsXml->createElement("AMDA_USERS"); $groupsXml->appendChild($rootGroupsElement); for ($i = 0; $i < $users->length; $i++) { if (strcmp($users->item($i)->getAttribute("group"),"") == 0) continue; $u = $groupsXml->createElement("user",$users->item($i)->getAttribute("login")); $u->setAttribute("group",$users->item($i)->getAttribute("group")); $rootGroupsElement->appendChild($u); } $groupsXml->save($this->GetGroupsXmlFilePath()); return 1; } function SendRegistrationMail($login,$pwd,$first_name, $last_name, $email) { $subject = 'AMDA registration'; $msg = "Dear $first_name $last_name, \r\n\r\n"; $msg .= "Thanks for your interest in our interactive space physics data manipulation tool and database AMDA\r\n\r\n"; $msg .= "Your login: $login \r\n"; $msg .= " password: $pwd \r\n\r\n"; $msg .= "at http://amda.cdpp.eu \r\n\r\n"; $msg .= "Please contact us in case of any problems or questions.\r\n\r\n"; $msg .= "For acknowledgment and data use policy please follow the rules of the road available at http://amda.cdpp.eu/help/policy.html.\r\n\r\n"; $msg .= "We also invite you to connect to our data archive (https://cdpp-archive.cnes.fr) and use our other tools for 3D visualization of spacecraft and science data (3DView, http://3dview.cdpp.eu), for solar wind propagation (Propagation Tool, http://propagationtool.cdpp.eu and Heliopropa, http://heliopropa.cdpp.eu), or for coordinate and time transformations (TREPS, http://treps.cdpp.eu).\r\n\r\n"; $msg .= "Feedback on CDPP tools is always welcome and greatly appreciated (amda at irap.omp.eu)!\r\n\r\n"; $msg .= "Best regards,\r\n\r\n"; $msg .= "CDPP-AMDA Team"; $headers = "From: amda@irap.omp.eu " . "\r\n". "Reply-To: amda@irap.omp.eu " . "\r\n". "Cc: amda@irap.omp.eu" . "\r\n". "Content-type: text/plain; charset=utf-8\r\n"; mail($email, $subject, $msg, $headers); } function Check() { if (!$this->LoadInfoXmlFile()) return 0; $users = $this->infoXml->getElementsByTagName("user"); exec('DDadmin -l',$output,$return); if ($return != 0) { fprintf($this->stderr,"DDadmin error : ".$output[0]."\n"); return 0; } $ddAdminUsers = explode(',',$output[0]); for ($i = 0; $i < $users->length; $i++) { $found = false; for ($j = 0; $j < count($ddAdminUsers); $j++) if (strcmp($users->item($i)->getAttribute("login"),$ddAdminUsers[$j]) == 0) { $found = true; break; } if (!$found) fprintf($this->stderr,"User ".$users->item($i)->getAttribute("login")." not found on nc file\n"); } for ($i = 0; $i < count($ddAdminUsers); $i++) { $found = false; for ($j = 0; $j < $users->length; $j++) if (strcmp($users->item($j)->getAttribute("login"),$ddAdminUsers[$i]) == 0) { $found = true; break; } if (!$found) fprintf($this->stderr,"User ".$ddAdminUsers[$i]." not found on info file\n"); } return 1; } //crypt the password with the salt corresponding to the login function cryptPwd($login,$pwd) { exec('DDadmin -s '.$login,$output,$return); if ($return != 0) { fprintf($this->stderr,"DDadmin error : ".$output."\n"); return ''; } $salt = $output[0]; return crypt($pwd,$salt); } } ?>