#!/usr/bin/env python import os 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): 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 Description: 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()