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

added ability to update/add users via rest web service

parent 4c706675
No related branches found
No related tags found
No related merge requests found
...@@ -37,6 +37,71 @@ class UserRestApi(DsRestApi): ...@@ -37,6 +37,71 @@ class UserRestApi(DsRestApi):
responseData = self.sendSessionRequest(url=url, method='GET') responseData = self.sendSessionRequest(url=url, method='GET')
return UserInfo(responseData) return UserInfo(responseData)
@DsRestApi.execute
def addUser(self, username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate):
if username is None:
raise InvalidRequest('Username must be provided.')
if firstName is None:
raise InvalidRequest('firstName must be provided.')
if lastName is None:
raise InvalidRequest('lastName must be provided.')
url = '%s/users' % (self.getContextRoot())
url += '?username=%s' % username
url += '&firstName=%s' % Encoder.encode(firstName)
url += '&lastName=%s' % Encoder.encode(lastName)
if middleName:
url += '&middleName=%s' % Encoder.encode(middleName)
if email:
url += '&email=%s' % Encoder.encode(email)
if badge:
url += '&badge=%s' % Encoder.encode(badge)
if globusUsername:
url += '&globusUsername=%s' % Encoder.encode(globusUsername)
if description:
url += '&description=%s' % Encoder.encode(description)
if password:
url += '&password=%s' % Encoder.encode(password)
if isLocalUser:
url += '&isLocaUser=%s' % isLocalUser
if lastUpdate:
url += '&lastUpdate=%s' % lastUpdate
responseData = self.sendSessionRequest(url=url, method='POST')
return UserInfo(responseData)
@DsRestApi.execute
def updateUser(self, id, username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate):
if id is None:
raise InvalidRequest('User id must be provided.')
url = ''
if username:
url += '&username=%s' % username
if firstName:
url += '&firstName=%s' % Encoder.encode(firstName)
if lastName:
url += '&lastName=%s' % Encoder.encode(lastName)
if middleName:
url += '&middleName=%s' % Encoder.encode(middleName)
if email:
url += '&email=%s' % Encoder.encode(email)
if badge:
url += '&badge=%s' % Encoder.encode(badge)
if globusUsername:
url += '&globusUsername=%s' % Encoder.encode(globusUsername)
if description:
url += '&description=%s' % Encoder.encode(description)
if password:
url += '&password=%s' % Encoder.encode(password)
if isLocalUser:
url += '&isLocaUser=%s' % isLocalUser
if lastUpdate:
url += '&lastUpdate=%s' % lastUpdate
if not url:
raise InvalidRequest('No user attributes have been modified.')
# Remove first '&' character
url = '%s/users/%s?%s' % (self.getContextRoot(), id, url[1:])
responseData = self.sendSessionRequest(url=url, method='POST')
return UserInfo(responseData)
@DsRestApi.execute @DsRestApi.execute
def addUserExperimentRole(self, username, experimentName, roleName): def addUserExperimentRole(self, username, experimentName, roleName):
if not username: if not username:
......
...@@ -25,6 +25,14 @@ class UserInfoSessionControllerImpl(DmObjectManager): ...@@ -25,6 +25,14 @@ class UserInfoSessionControllerImpl(DmObjectManager):
def getUserByUsername(self, username): def getUserByUsername(self, username):
return self.userDbApi.getUserByUsername(username) return self.userDbApi.getUserByUsername(username)
def addUser(self, username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate):
userInfo = self.userDbApi.addUser(username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate)
return userInfo
def updateUser(self, id, username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate):
userInfo = self.userDbApi.updateUser(id, username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate)
return userInfo
def addUserExperimentRole(self, username, experimentName, roleName): def addUserExperimentRole(self, username, experimentName, roleName):
userInfo = self.userDbApi.addUserExperimentRole(username, experimentName, roleName) userInfo = self.userDbApi.addUserExperimentRole(username, experimentName, roleName)
ExperimentManager.getInstance().addUserToGroup(username, experimentName) ExperimentManager.getInstance().addUserToGroup(username, experimentName)
......
...@@ -36,6 +36,57 @@ class UserInfoSessionController(DmSessionController): ...@@ -36,6 +36,57 @@ class UserInfoSessionController(DmSessionController):
self.logger.debug('Returning user info for %s: %s' % (username,response)) self.logger.debug('Returning user info for %s: %s' % (username,response))
return response return response
@cherrypy.expose
@DmSessionController.require(DmSessionController.isAdministrator())
@DmSessionController.execute
def addUser(self, **kwargs):
username = kwargs.get('username')
if not username:
raise InvalidRequest('Invalid username provided.')
firstName = kwargs.get('firstName')
if not firstName:
raise InvalidRequest('Invalid first name provided.')
firstName = Encoder.decode(firstName)
lastName = kwargs.get('lastName')
if not lastName:
raise InvalidRequest('Invalid last name provided.')
lastName = Encoder.decode(lastName)
middleName = Encoder.decode(kwargs.get('middleName'))
email = Encoder.decode(kwargs.get('email'))
badge = Encoder.decode(kwargs.get('badge'))
globusUsername = Encoder.decode(kwargs.get('globusUsername'))
description = Encoder.decode(kwargs.get('description'))
password = Encoder.decode(kwargs.get('password'))
isLocalUser = kwargs.get('isLocalUser')
lastUpdate = Encoder.decode(kwargs.get('lastUpdate'))
response = self.userInfoSessionControllerImpl.addUser(username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate).getFullJsonRep()
return response
@cherrypy.expose
@DmSessionController.require(DmSessionController.isAdministrator())
@DmSessionController.execute
def updateUser(self, id, **kwargs):
if not id:
raise InvalidRequest('Invalid user id provided.')
username = kwargs.get('username')
firstName = Encoder.decode(kwargs.get('firstName'))
lastName = Encoder.decode(kwargs.get('lastName'))
middleName = Encoder.decode(kwargs.get('middleName'))
email = Encoder.decode(kwargs.get('email'))
badge = Encoder.decode(kwargs.get('badge'))
globusUsername = Encoder.decode(kwargs.get('globusUsername'))
description = Encoder.decode(kwargs.get('description'))
password = Encoder.decode(kwargs.get('password'))
isLocalUser = kwargs.get('isLocalUser')
lastUpdate = Encoder.decode(kwargs.get('lastUpdate'))
response = self.userInfoSessionControllerImpl.updateUser(id, username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate).getFullJsonRep()
return response
@cherrypy.expose
@DmSessionController.require(DmSessionController.isAdministrator())
@DmSessionController.execute
@cherrypy.expose @cherrypy.expose
@DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.require(DmSessionController.isAdministrator())
@DmSessionController.execute @DmSessionController.execute
......
...@@ -46,6 +46,24 @@ class UserRouteDescriptor: ...@@ -46,6 +46,24 @@ class UserRouteDescriptor:
'method' : ['GET'] 'method' : ['GET']
}, },
# Add user
{
'name' : 'addUser',
'path' : '%s/users' % contextRoot,
'controller' : userInfoSessionController,
'action' : 'addUser',
'method' : ['POST']
},
# Update user
{
'name' : 'updateUser',
'path' : '%s/users/:(id)' % contextRoot,
'controller' : userInfoSessionController,
'action' : 'updateUser',
'method' : ['PUT']
},
# Add user experiment role # Add user experiment role
{ {
'name' : 'addUserExperimentRole', 'name' : 'addUserExperimentRole',
......
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