diff --git a/rhodecode/controllers/api/api.py b/rhodecode/controllers/api/api.py --- a/rhodecode/controllers/api/api.py +++ b/rhodecode/controllers/api/api.py @@ -7,6 +7,9 @@ from rhodecode.model.scm import ScmModel from rhodecode.model.db import User, UsersGroup, UsersGroupMember, Group, Repository from rhodecode.model.repo import RepoModel +from rhodecode.model.user import UserModel +from rhodecode.model.users_group import UsersGroupModel +from rhodecode.model.repo_permission import RepositoryPermissionModel log = logging.getLogger(__name__) @@ -48,7 +51,26 @@ class ApiController(JSONRPCController): @HasPermissionAllDecorator('hg.admin') - def create_user(self, apiuser, username, password, name, + def list_users(self, apiuser): + """" + Lists all users + + :param apiuser + """ + + result = [] + for user in User.getAll(): + result.append( dict(id = user.user_id, + username = user.username, + firstname = user.name, + lastname = user.lastname, + email = user.email, + active = user.active, + admin = user.admin) ) + return result + + @HasPermissionAllDecorator('hg.admin') + def create_user(self, apiuser, username, password, firstname, lastname, email, active=True, admin=False, ldap_dn=None): """ Creates new user @@ -64,38 +86,36 @@ class ApiController(JSONRPCController): :param ldap_dn: """ - form_data = dict(username=username, - password=password, - active=active, - admin=admin, - name=name, - lastname=lastname, - email=email, - ldap_dn=ldap_dn) try: - u = User.create(form_data) - return {'id':u.user_id, - 'msg':'created new user %s' % name} + form_data = dict(username=username, + password=password, + active=active, + admin=admin, + name=firstname, + lastname=lastname, + email=email, + ldap_dn=ldap_dn) + UserModel().create_ldap(username, password, ldap_dn, form_data) + return dict(msg='created new user %s' % username) except Exception: log.error(traceback.format_exc()) - raise JSONRPCError('failed to create user %s' % name) + raise JSONRPCError('failed to create user %s' % username) @HasPermissionAllDecorator('hg.admin') - def list_users(self, apiuser): + def list_users_groups(self, apiuser): """" - Lists all users + Lists all users groups :param apiuser """ + result = [] - for user in User.getAll(): - result.append({ 'username':user.username, - 'name': user.name, - 'lastname': user.lastname, - 'email': user.email }) + for users_group in UsersGroup.getAll(): + result.append( dict(id=users_group.users_group_id, + name=users_group.users_group_name, + active=users_group.users_group_active) ) return result - @HasPermissionAllDecorator('hg.admin') def create_users_group(self, apiuser, name, active=True): """ @@ -104,31 +124,19 @@ class ApiController(JSONRPCController): :param name: :param active: """ - form_data = {'users_group_name':name, - 'users_group_active':active} + try: - ug = UsersGroup.create(form_data) - return {'id':ug.users_group_id, - 'msg':'created new users group %s' % name} + form_data = dict(users_group_name=name, + users_group_active=active) + ug = UsersGroupModel().create(form_data) + return dict(id=ug.users_group_id, + msg='created new users group %s' % name) except Exception: log.error(traceback.format_exc()) raise JSONRPCError('failed to create group %s' % name) @HasPermissionAllDecorator('hg.admin') - def list_users_groups(self, apiuser): - """" - Lists all users groups - - :param apiuser - """ - result = [] - for users_group in UsersGroup.getAll(): - result.append({ 'name': users_group.name }) - return result - - - @HasPermissionAllDecorator('hg.admin') - def add_user_to_group(self, apiuser, user_name, group_name): + def add_user_to_users_group(self, apiuser, user_name, group_name): """" Add a user to a group @@ -137,20 +145,37 @@ class ApiController(JSONRPCController): :param group_name """ - users_group = UsersGroup.get_by_group_name(group_name) - if not users_group: - raise JSONRPCError('unknown users group %s' % group_name) + try: + users_group = UsersGroup.get_by_group_name(group_name) + if not users_group: + raise JSONRPCError('unknown users group %s' % group_name) - user = User.by_username(user_name) - if not user: - raise JSONRPCError('unknown user %s' % user_name) + user = User.by_username(user_name) + if not user: + raise JSONRPCError('unknown user %s' % user_name) - try: - UsersGroupMember.create(user, users_group) + ugm = UsersGroupModel().add_user_to_group(users_group, user) + return dict(id=ugm.users_group_member_id, + msg='created new users group member') except Exception: log.error(traceback.format_exc()) raise JSONRPCError('failed to create users group member') + @HasPermissionAnyDecorator('hg.admin') + def list_repos(self, apiuser): + """" + Lists all repositories + + :param apiuser + """ + result = [] + for repository in Repository.getAll(): + result.append( dict(id=repository.repo_id, + name=repository.repo_name, + type=repository.repo_type, + description=repository.description) ) + return result + @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') def create_repo(self, apiuser, name, owner_name, description=None, repo_type='hg', \ private=False, group_name=None): @@ -167,18 +192,18 @@ class ApiController(JSONRPCController): :param clone """ - if group_name: - group = Group.get_by_group_name(group_name) - if group is None: - raise JSONRPCError('unknown group %s' % group_name) - else: - group = None + try: + if group_name: + group = Group.get_by_group_name(group_name) + if group is None: + raise JSONRPCError('unknown group %s' % group_name) + else: + group = None - owner = User.by_username(owner_name) - if owner is None: - raise JSONRPCError('unknown user %s' % owner) + owner = User.by_username(owner_name) + if owner is None: + raise JSONRPCError('unknown user %s' % owner) - try: RepoModel().create({ "repo_name" : name, "repo_name_full" : name, "description" : description, @@ -190,4 +215,30 @@ class ApiController(JSONRPCController): log.error(traceback.format_exc()) raise JSONRPCError('failed to create repository %s' % name) + @HasPermissionAnyDecorator('hg.admin') + def add_user_perm_to_repo(self, apiuser, repo_name, user_name, perm): + """ + Add permission for a user to a repository + :param apiuser + :param repo_name + :param user_name + :param perm + """ + + try: + repo = Repository.by_repo_name(repo_name) + if repo is None: + raise JSONRPCError('unknown repository %s' % repo) + + user = User.by_username(user_name) + if user is None: + raise JSONRPCError('unknown user %s' % user) + + RepositoryPermissionModel() \ + .updateOrDeleteUserPermission(repo, user, perm) + except Exception: + log.error(traceback.format_exc()) + raise JSONRPCError('failed to edit permission %(repo)s for %(user)s' + % dict( user = user_name, repo = repo_name ) ) +