#!/usr/bin/env python from dm.common.exceptions.invalidRequest import InvalidRequest from dm.common.cli.dmCli import DmCli from dm.common.utility.ldapUserManager import LdapUserManager 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.') def checkArgs(self): if self.options.badge is None: raise InvalidRequest('Badge number must be provided.') def getBadge(self): return self.options.badge def runCommand(self): self.parseArgs(usage=""" dm-update-user-from-aps-db --badge=BADGE Description: Updates user in DM LDAP and database using information from APS DB. """) self.checkArgs() apsUserDbApi = ApsUserDbApi() badgeNumber = self.getBadge() username = 'd%s' % badgeNumber apsUser = apsUserDbApi.getApsUserByBadgeNumber(badgeNumber) print 'APS User Info: ', apsUser.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat()) ldapUserManager = LdapUserManager('ldaps://dmid-vm.xray.aps.anl.gov:636', 'uid=dmadmin,ou=People,o=aps.anl.gov,dc=aps,dc=anl,dc=gov', '/tmp/ldapPassword', userDnFormat='uid=%s,ou=DM,ou=People,o=aps.anl.gov,dc=aps,dc=anl,dc=gov', groupDnFormat='cn=%s,ou=DM,ou=Group,o=aps.anl.gov,dc=aps,dc=anl,dc=gov', minGidNumber=66000) ldapUser = ldapUserManager.getUserInfo(username) print 'Old LDAP User Info: ', ldapUser attrDict = {} attrDict['gecos'] = apsUser['name'] attrDict['userPassword'] = apsUser['passwordHashValue'] ldapUserManager.modifyUserInfo(username, attrDict) ldapUser = ldapUserManager.getUserInfo(username) print 'New LDAP User Info: ', ldapUser ####################################################################### # Run command. if __name__ == '__main__': cli = UpdateUserFromApsDbCli() cli.run()