UserAf* UserContainer::addUser( const std::string & i_usernmae, const std::string & i_hostname, MonitorContainer * i_monitoring) { { UserContainerIt usersIt( this); for(UserAf *user = usersIt.user(); user != NULL; usersIt.next(), user = usersIt.user()) { if( i_usernmae == user->getName()) { if( user->getHostName() != i_hostname) { user->setHostName( i_hostname); if( i_monitoring) i_monitoring->addEvent( af::Monitor::EVT_users_change, user->getId()); } return user; } } } UserAf *user = new UserAf( i_usernmae, i_hostname); if( addUser(user) == 0) { AFERROR("UserContainer::addUser: Can't add user to container.\n"); delete user; return NULL; } if( i_monitoring) i_monitoring->addEvent( af::Monitor::EVT_users_add, user->getId()); AFCommon::QueueLog("New job user registered: " + user->v_generateInfoString( false)); return user; }
UserAf* UserContainer::addUser( const std::string & username, const std::string & hostname, MonitorContainer * monitoring) { { UserContainerIt usersIt( this); for(UserAf *user = usersIt.user(); user != NULL; usersIt.next(), user = usersIt.user()) { if( username == user->getName()) { if( user->getHostName() != hostname) { user->setHostName( hostname); if( monitoring) monitoring->addEvent( af::Msg::TMonitorUsersChanged, user->getId()); } return user; } } } UserAf *user = new UserAf( username, hostname); if( addUser(user) == 0) { AFERROR("UserContainer::addUser: Can't add user to container.\n"); delete user; return NULL; } if( monitoring) monitoring->addEvent( af::Msg::TMonitorUsersAdd, user->getId()); AFCommon::QueueLog("User registered: " + user->v_generateInfoString( false)); return user; }
UserAf * UserContainer::getUser( const std::string & i_name ) { UserContainerIt usersIt( ms_users); for(UserAf * user = usersIt.user(); user != NULL; usersIt.next(), user = usersIt.user()) { if( user->getName() == i_name ) return user; } return NULL; }
af::Msg * UserContainer::addUser( UserAf * i_user, MonitorContainer * i_monitoring) { UserContainerIt usersIt( this); for(UserAf *user = usersIt.user(); user != NULL; usersIt.next(), user = usersIt.user()) { if( user->getName() == i_user->getName()) { AFERRAR("UserContainer::addUser: User \"%s\" already exists.", i_user->getName().c_str()); delete i_user; std::ostringstream str; str << "{\"error\":\"exists\""; str << ",\n\"user\":\n"; user->v_jsonWrite( str, /*type no matter*/ 0); str << "\n}"; return af::jsonMsg( str); } } if( addUser( i_user) == 0) { AFERRAR("UserContainer::addUser: Can't add user \"%s\" node to container.", i_user->getName().c_str()); delete i_user; return af::jsonMsgError("Unable to add node to container."); } //AFCommon::QueueDBAddItem( i_user); i_user->store(); if( i_monitoring) i_monitoring->addEvent( af::Monitor::EVT_users_add, i_user->getId()); AFCommon::QueueLog("User registered: " + i_user->v_generateInfoString( false)); std::ostringstream str; str << "{\"user\":\n"; i_user->v_jsonWrite( str, /*type no matter*/ 0); str << "\n}"; return af::jsonMsg( str); }
void UserContainer::setPermanent( const af::MCGeneral & usr, bool permanent, MonitorContainer * monitoring) { std::string username( usr.getName()); std::string hostname( usr.getHostName()); // // Try to find user with provided name in container to edit permanent property // UserContainerIt usersIt( this); for(UserAf *user = usersIt.user(); user != NULL; usersIt.next(), user = usersIt.user()) { if( username == user->getName()) { bool changed = false; if( user->getHostName() != hostname ) { user->setHostName( hostname); changed = true; } // set permanent property if it differ if( user->isPermanent() != permanent) { changed = true; user->setPermanent( permanent); if( permanent) AFCommon::QueueDBAddItem( user); else AFCommon::QueueDBDelItem( user); } if( changed && monitoring) { monitoring->addEvent( af::Msg::TMonitorUsersChanged, user->getId()); } // return if user exists in container return; } } // // User with provided name does not exist container // if( permanent == false) { // Error: user to unset permanent does not exist AFERRAR("UserContainer::setPermanent: No user \"%s\" founded.\n", username.c_str()); return; } // // Create a new permanent user and put him to database // UserAf *user = new UserAf( username, hostname); if( addUser( user) == 0) { delete user; AFERRAR("UserContainer::setPermanent: Can't add user \"%s\" node to container.", username.c_str()); return; } user->setPermanent( true); AFCommon::QueueDBAddItem( user); if( monitoring) monitoring->addEvent( af::Msg::TMonitorUsersAdd, user->getId()); return; }