Skip to content
Snippets Groups Projects
Commit b11a5dd2 authored by sveseli's avatar sveseli
Browse files

added rest web service functionality for adding/modifying users

parent 805c9126
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python
from dm.common.exceptions.invalidRequest import InvalidRequest
from dm.common.cli.dmCli import DmCli
from dm.common.utility.configurationManager import ConfigurationManager
from dm.common.utility.ldapUserManager import LdapUserManager
from dm.aps_user_db.api.apsUserDbApi import ApsUserDbApi
from dm.ds_web_service.api.dsRestApiFactory import DsRestApiFactory
class UpdateUsersFromApsDbCli(DmCli):
def __init__(self):
DmCli.__init__(self)
def runCommand(self):
self.parseArgs(usage="""
dm-update-users-from-aps-db
Description:
Updates all users in DM LDAP and database using information from APS DB.
""")
ConfigurationManager.getInstance().setConfigFile('/home/oxygen/SVESELI/Work/DM/etc/dm.conf')
print ConfigurationManager.getInstance().getConfigOption('DsRestApiFactory', 'username')
apsUserDbApi = ApsUserDbApi()
userRestApi = DsRestApiFactory.getUserRestApi()
apsUsers = apsUserDbApi.getApsUsers()
self.logger.debug('Number of APS Users: %s' % len(apsUsers))
dmUsers = userRestApi.getUsers()
self.logger.debug('Number of DM Users: %s' % len(dmUsers))
dmUserBadgeMap = {}
for dmUser in dmUsers:
badge = dmUser.get('badge')
if badge:
dmUserBadgeMap[badge] = dmUser
self.logger.debug('Number of DM Users with badge: %s' % len(dmUserBadgeMap))
nCreatedUsers = 0
nUpdatedUsers = 0
for apsUser in apsUsers:
apsLastChangeDate = apsUser.get('lastChangeDate')
badge = apsUser['badgeNumber']
username = 'd%s' % badge
firstName = apsUser.get('firstName')
middleName = apsUser.get('middleName')
lastName = apsUser.get('lastName')
email = apsUser.get('email')
isLocalUser = 0
lastUpdate = str(apsLastChangeDate)
globusUsername = None
description = None
password = None
dmUser = dmUserBadgeMap.get(badge)
if not dmUser:
self.logger.debug('Creating user with badge %s: %s' % (badge, apsUser['name']))
userRestApi.addUser(username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate)
nCreatedUsers += 1
else:
dmLastUpdate = dmUser.get('lastUpdate')
if not dmLastUpdate or dmLastUpdate < apsLastChangeDate:
id = dmUser.get('id')
self.logger.debug('Modifying user with badge %s: %s (DM id: %s)' % (badge, apsUser['name'], id))
userRestApi.updateUser(id, username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate)
nUpdatedUsers += 1
else:
# User is up to date
pass
#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 = UpdateUsersFromApsDbCli()
cli.run()
...@@ -8,11 +8,15 @@ class Encoder: ...@@ -8,11 +8,15 @@ class Encoder:
def encode(cls, data): def encode(cls, data):
# Encode twice, in order to avoid issues like '+' being # Encode twice, in order to avoid issues like '+' being
# interpreted as space after decoding # interpreted as space after decoding
if not data:
return data
encodedData = base64.b64encode(base64.encodestring('%s' % data)) encodedData = base64.b64encode(base64.encodestring('%s' % data))
return encodedData return encodedData
@classmethod @classmethod
def decode(cls, encodedData): def decode(cls, encodedData):
if not encodedData:
return encodedData
data = base64.decodestring(base64.b64decode('%s' % encodedData)) data = base64.decodestring(base64.b64decode('%s' % encodedData))
return data return data
......
...@@ -64,7 +64,7 @@ class UserRestApi(DsRestApi): ...@@ -64,7 +64,7 @@ class UserRestApi(DsRestApi):
if isLocalUser: if isLocalUser:
url += '&isLocaUser=%s' % isLocalUser url += '&isLocaUser=%s' % isLocalUser
if lastUpdate: if lastUpdate:
url += '&lastUpdate=%s' % lastUpdate url += '&lastUpdate=%s' % Encoder.encode(str(lastUpdate))
responseData = self.sendSessionRequest(url=url, method='POST') responseData = self.sendSessionRequest(url=url, method='POST')
return UserInfo(responseData) return UserInfo(responseData)
......
#!/usr/bin/env python #!/usr/bin/env python
import cherrypy import cherrypy
from dm.common.utility.encoder import Encoder
from dm.common.service.dmSessionController import DmSessionController from dm.common.service.dmSessionController import DmSessionController
from dm.ds_web_service.service.impl.userInfoSessionControllerImpl import UserInfoSessionControllerImpl from dm.ds_web_service.service.impl.userInfoSessionControllerImpl import UserInfoSessionControllerImpl
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment