/** * \brief Function to reconnect the session * \param user The object which manipulates user information * \param host The object which manipulates client machine information * \param sessionId The session identifier * \return raises an exception on error */ int SessionServer::reconnect(UserServer user, MachineClientServer clientMachineServer, std::string sessionId) { msession.setSessionId(sessionId); if (! user.isAuthenticate()) { throw UMSVishnuException (ERRCODE_UNKNOWN_USER); } int state = getState(true); if (state < 0) { throw UMSVishnuException (ERRCODE_UNKNOWN_SESSION_ID); } if (state != vishnu::SESSION_ACTIVE) { throw UMSVishnuException (ERRCODE_UNKNOWN_SESSION_ID); } int existSessionKey = getSessionkey(clientMachineServer.getId(), user.getNumUserFromLoginInfo(user.getData().getUserId(),user.getData().getPassword()), user.isAdmin()); if (existSessionKey == -1) { throw UMSVishnuException (ERRCODE_SESSIONKEY_NOT_FOUND); } return 0; }
/** * \brief Function to connect the session * \param user The object which manipulates user information * \param host The object which manipulates client machine information * \param connectOpt The options data structure for connection * \return raises an exception on error */ int SessionServer::connectSession(UserServer user, MachineClientServer host, UMS_Data::ConnectOptions* connectOpt) { std::string numSubstituteUserId; std::string numUserIdToconnect; //To record the connection identifier msession.setAuthenId(user.getData().getUserId()); //if the user exist if (user.isAuthenticate()) { //if a user to substitute is defined if (connectOpt->getSubstituteUserId().size() != 0) { // if the user is admin if (user.isAdmin()) { numSubstituteUserId = user.getAttribut("where " "userid='"+mdatabaseVishnu->escapeData(connectOpt->getSubstituteUserId())+"'"); //If the user to substitute exist if (! user.getNumUserId(connectOpt->getSubstituteUserId()).empty()) { numUserIdToconnect = numSubstituteUserId; msession.setUserId(connectOpt->getSubstituteUserId()); } //End If the user to substitute exist else { UMSVishnuException e(ERRCODE_UNKNOWN_USERID); throw e; } } // END if the user is admin else { UMSVishnuException e(ERRCODE_NO_ADMIN); throw e; } } //End if a user to substitute is defined //if there is not a numSubstituteUserId if (numUserIdToconnect.size() == 0) { numUserIdToconnect = user.getAttribut("where userid='"+mdatabaseVishnu->escapeData(user.getData().getUserId())+"'" " and pwd='"+mdatabaseVishnu->escapeData(user.getData().getPassword())+"'"); msession.setUserId(user.getData().getUserId()); } //END if There is not a numSubstituteUserId generateSessionKey(user.getData().getUserId()); generateSessionId(user.getData().getUserId()); //To solve the connection mode solveConnectionMode(connectOpt, numUserIdToconnect); host.recordMachineClient(); recordSessionServer(host.getId(), numUserIdToconnect); } // END if the user exist else { UMSVishnuException e(ERRCODE_UNKNOWN_USER); throw e; } return 0; }//END: connectSession(UserServer, MachineClientServer, ConnectOptions*)
/** * \brief Function to connect the session * \param user The object which manipulates user information * \param host The object which manipulates client machine information * \param connectOpt The options data structure for connection * \return raises an exception on error */ int SessionServer::connectSession(UserServer user, MachineClientServer host, UMS_Data::ConnectOptions* connectOpt) { std::string numUserToconnect; msession.setAuthenId( user.getData().getUserId() ); if (! user.isAuthenticate()) { throw UMSVishnuException(ERRCODE_UNKNOWN_USER); } if (! connectOpt->getSubstituteUserId().empty()) { user.checkUserId( connectOpt->getSubstituteUserId()); if (! user.isAdmin()) { throw UMSVishnuException (ERRCODE_NO_ADMIN); } numUserToconnect = user.getNumUserFromId( connectOpt->getSubstituteUserId() ); if (numUserToconnect.empty()) { throw UMSVishnuException(ERRCODE_UNKNOWN_USER, connectOpt->getSubstituteUserId()); } msession.setUserId(connectOpt->getSubstituteUserId()); } //if there is not a numSubstituteUserId if (numUserToconnect.empty()) { numUserToconnect = user.getNumUserFromLoginInfo(user.getData().getUserId(), user.getData().getPassword()); msession.setUserId(user.getData().getUserId()); } generateSessionKey(user.getData().getUserId()); generateSessionId(user.getData().getUserId()); //To solve the connection mode solveConnectionMode(connectOpt); host.recordMachineClient(); recordSessionServer(host.getId(), numUserToconnect); return 0; }
/** * \brief Function to reconnect the session * \param user The object which manipulates user information * \param host The object which manipulates client machine information * \param sessionId The session identifier * \return raises an exception on error */ int SessionServer::reconnect(UserServer user, MachineClientServer host, std::string sessionId) { msession.setSessionId(sessionId); //If the user exists if (user.isAuthenticate()) { int state = getState(true); // -1 is an error code of getState when nohting has found if (state != -1) { //if the session is active if (state == 1) { int existSessionKey = 0; //if user is an admin if (user.isAdmin()) { existSessionKey = getSessionkey("", "", true); } //END if user is an admin else { existSessionKey = getSessionkey(host.getId(), user.getAttribut("where userid='"+mdatabaseVishnu->escapeData(user.getData().getUserId())+"'" " and pwd='"+mdatabaseVishnu->escapeData(user.getData().getPassword())+"'")); } //if there is no session key with the previous parameters if (existSessionKey == -1) { UMSVishnuException e(ERRCODE_SESSIONKEY_NOT_FOUND); throw e; } }//if the session is active else { UMSVishnuException e(ERRCODE_SESSIONKEY_EXPIRED); throw e; } }//END if state != -1 else { UMSVishnuException e(ERRCODE_UNKNOWN_SESSION_ID); throw e; } } //END IF user.exist else { UMSVishnuException e(ERRCODE_UNKNOWN_USER); throw e; } return 0; }//END: reconnect(UserServer, MachineClientServer, string sessionId)