Skip to content
Snippets Groups Projects
updateUserFromApsDbCli.py 3.45 KiB
Newer Older
from dm.common.exceptions.invalidRequest import InvalidRequest
from dm.common.exceptions.objectNotFound import ObjectNotFound
from dm.common.exceptions.invalidArgument import InvalidArgument
from dm.common.cli.dmCli import DmCli
from dm.common.utility.ldapUserManager import LdapUserManager
from dm.common.utility.configurationManager import ConfigurationManager
from dm.common.utility.loggingManager import LoggingManager
from dm.aps_user_db.api.apsUserDbApi import ApsUserDbApi

class UpdateUserFromApsDbCli(DmCli):
    def __init__(self):
        DmCli.__init__(self)
        self.addOption('', '--badge', dest='badge', help='User badge number.')
        self.addOption('', '--config-file', dest='configFile', help='Utility configuration file.')

    def checkArgs(self):
        if self.options.badge is None:
            raise InvalidRequest('Badge number must be provided.')
        configFile = self.options.configFile
        if configFile is None:
            raise InvalidRequest('Config file must be provided.')
        if not os.path.exists(configFile):
sveseli's avatar
sveseli committed
            raise InvalidArgument('Invalid config file: %s.' % configFile)

    def getBadge(self):
        return self.options.badge

    def runCommand(self):
        self.parseArgs(usage="""
    dm-update-user-from-aps-db --badge=BADGE --config-file=CONFIGFILE
    Updates single user in DM LDAP using information from APS DB. This command will not update DM DB.
        ConfigurationManager.getInstance().setConfigFile(self.options.configFile)
        LoggingManager.getInstance().configure()
        self.checkArgs()
        apsUserDbApi = ApsUserDbApi()
        badge = self.getBadge()
        username = 'd%s' % badge
        self.logger.debug('Retrieving APS user with badge %s' % badge)
        apsUser = apsUserDbApi.getApsUserByBadgeNumber(badge)
        #self.logger.info('APS User Info: %s' % apsUser)
        print('APS User Info: %s\n' % apsUser)
        ldapUserManager = LdapUserManager.createInstance()
        try:
            self.logger.debug('Modifying LDAP user with badge %s: %s' % (badge, apsUser['name']))
            ldapUser = ldapUserManager.getUserInfo(username)
            #self.logger.info('LDAP User Info (before update): %s' % ldapUser)
            #self.logger.info('LDAP User Password Hash (before update): %s\n' % ldapUserManager.decodePasswordHash(ldapUser.getUserPassword()))
            print('LDAP User Info (before update): %s' % ldapUser)
            print('LDAP User Password Hash (before update): %s\n' % ldapUserManager.decodePasswordHash(ldapUser.getUserPassword()))

            ldapUserManager.modifyUserInfo(username, apsUser)
            ldapUser = ldapUserManager.getUserInfo(username)
        except ObjectNotFound, ex:
            self.logger.debug('User with badge %s does not exist, creating it' % (badge))
            ldapUser = ldapUserManager.createUserInfo(username, apsUser)
        #self.logger.info('LDAP User Info (after update): %s' % ldapUser)
        #self.logger.info('LDAP User Password Hash (after update): %s\n' % ldapUserManager.decodePasswordHash(ldapUser.getUserPassword()))
        print('LDAP User Info (after update): %s' % ldapUser)
        print('LDAP User Password Hash (after update): %s\n' % ldapUserManager.decodePasswordHash(ldapUser.getUserPassword()))

#######################################################################
# Run command.
if __name__ == '__main__':
    cli = UpdateUserFromApsDbCli()
    cli.run()