diff --git a/src/python/dm/ds_web_service/api/userRestApi.py b/src/python/dm/ds_web_service/api/userRestApi.py index 95dccf5a56a90da0f2be0ad7f1330cff7f4a458c..3ed808311217d839506ebfc539e2826c6baa5a8e 100755 --- a/src/python/dm/ds_web_service/api/userRestApi.py +++ b/src/python/dm/ds_web_service/api/userRestApi.py @@ -37,6 +37,71 @@ class UserRestApi(DsRestApi): responseData = self.sendSessionRequest(url=url, method='GET') 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 def addUserExperimentRole(self, username, experimentName, roleName): if not username: diff --git a/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py b/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py index 1cc0aec63bd1eb96a6e29cecca39cb911b6fe542..6a973d35c4f2dbf8713daee9f04f300e3ca6b63c 100755 --- a/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py +++ b/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py @@ -25,6 +25,14 @@ class UserInfoSessionControllerImpl(DmObjectManager): def getUserByUsername(self, 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): userInfo = self.userDbApi.addUserExperimentRole(username, experimentName, roleName) ExperimentManager.getInstance().addUserToGroup(username, experimentName) diff --git a/src/python/dm/ds_web_service/service/userInfoSessionController.py b/src/python/dm/ds_web_service/service/userInfoSessionController.py index 533c20801bfe186833f9a5387fba4a143b402168..52756f8733775be86bc85049b54a49f6b7970c73 100755 --- a/src/python/dm/ds_web_service/service/userInfoSessionController.py +++ b/src/python/dm/ds_web_service/service/userInfoSessionController.py @@ -36,6 +36,57 @@ class UserInfoSessionController(DmSessionController): self.logger.debug('Returning user info for %s: %s' % (username,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 @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute diff --git a/src/python/dm/ds_web_service/service/userRouteDescriptor.py b/src/python/dm/ds_web_service/service/userRouteDescriptor.py index 004b4739d4fbc7c8453f0ff665a0c11a10845867..ddffb965d72daa1e0b26a81d85d269a0caa94b79 100755 --- a/src/python/dm/ds_web_service/service/userRouteDescriptor.py +++ b/src/python/dm/ds_web_service/service/userRouteDescriptor.py @@ -46,6 +46,24 @@ class UserRouteDescriptor: '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 { 'name' : 'addUserExperimentRole',