/** * \brief Function to change VISHNU user password * \fn int resetPassword(UMS_Data::User user, std::string sendmailScriptPath) * \param user The user data structure * \param sendmailScriptPath The path to the script for sending emails * \return raises an exception on error */ int UserServer::resetPassword(UMS_Data::User& user, std::string sendmailScriptPath) { std::string sqlResetPwd; std::string sqlUpdatePwdState; std::string passwordCrypted; std::string pwd; //If the user exists if (exist()) { //if the user is an admin if (isAdmin()) { //if the user whose password will be reset exists if (getAttribut("where userid='"+user.getUserId()+"'").size() != 0) { //generation of a new password pwd = generatePassword(user.getUserId(), user.getUserId()); user.setPassword(pwd.substr(0,PASSWORD_MAX_SIZE)); //to get the password encryptes passwordCrypted = vishnu::cryptPassword(user.getUserId(), user.getPassword()); //The sql code to reset the password sqlResetPwd = "UPDATE users SET pwd='"+passwordCrypted+"' where " "userid='"+user.getUserId()+"';"; //sql code to update the passwordstate sqlUpdatePwdState = "UPDATE users SET passwordstate=0 " "where userid='"+user.getUserId()+"' and pwd='"+passwordCrypted+"';"; //To append the previous sql codes sqlResetPwd.append(sqlUpdatePwdState); //Execution of the sql code on the database mdatabaseVishnu->process( sqlResetPwd.c_str()); //to get the email adress of the user std::string email = getAttribut("where userid='"+user.getUserId()+"'", "email"); user.setEmail(email); //Send email std::string emailBody = getMailContent(user, false); sendMailToUser(user, emailBody, "Vishnu message: password reset", sendmailScriptPath); } // End if the user whose password will be reset exists else { UMSVishnuException e (ERRCODE_UNKNOWN_USERID, "You must use a global VISHNU identifier"); throw e; } } //END if the user is an admin else { UMSVishnuException e (ERRCODE_NO_ADMIN); throw e; } } //END if the user exists else { UMSVishnuException e (ERRCODE_UNKNOWN_USER); throw e; } return 0; }//END: resetPassword(UMS_Data::User user)