def create(self): """POST /repository/users: Create a new item""" if not request.environ.get('REPOSITORY_USER_ADMIN'): abort(403, "403 Forbidden") params = validate_new_user(request.params) new_user = User(client_dn=params['client_dn'], name=params['name'], email=params['email']) new_uuid = h.user_uuid(params['client_dn']) new_user.uuid = new_uuid # Deal with user groups if not params.get('groups'): groups = ['users'] else: groups = groups.rstrip(',').split(',') # Check for default user group if 'users' not in groups: groups.append('users') # Do group membership #TODO: change from group name to group uuid for membership? group_q = meta.Session.query(Group) groups = [group_q.filter(Group.name==g).first() for g in groups] if None in groups: # abort if any specified group does not exist abort(400, '400 Bad Request - groups') else: [new_user.groups.append(g) for g in groups] # Update the database meta.Session.add(new_user) meta.Session.commit()
def _to_python(self, value, state): user_q = meta.Session.query(model.User) uuid = h.user_uuid(value) if user_q.filter(model.User.client_dn==value).first(): state = 'CONFLICT' raise formencode.Invalid('conflict', value, state) elif user_q.filter(model.User.uuid==uuid).first(): state = 'CONFLICT' raise formencode.Invalid('conflict', value, state) else: return value