Changeset - 8898a79ac628
[Not reviewed]
beta
0 3 0
Nicolas VINOT - 14 years ago 2011-10-07 01:53:59
aeris@imirhil.fr
Implement all CRUD API operation for repo
3 files changed with 141 insertions and 21 deletions:
0 comments (0 inline, 0 general)
rhodecode/controllers/api/api.py
Show inline comments
 
@@ -5,11 +5,12 @@ from rhodecode.controllers.api import JS
 
from rhodecode.lib.auth import HasPermissionAllDecorator, HasPermissionAnyDecorator
 
from rhodecode.model.scm import ScmModel
 

	
 
from rhodecode.model.db import User, UsersGroup, UsersGroupMember, Group, Repository
 
from rhodecode.model.db import User, UsersGroup, Group, Repository
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.model.user import UserModel
 
from rhodecode.model.repo_permission import RepositoryPermissionModel
 
from rhodecode.model.users_group import UsersGroupModel
 
from rhodecode.model.repo_permission import RepositoryPermissionModel
 
from rhodecode.model import users_group
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -49,11 +50,32 @@ class ApiController(JSONRPCController):
 
        except Exception:
 
            raise JSONRPCError('Unable to pull changes from "%s"' % repo)
 

	
 
    @HasPermissionAllDecorator( 'hg.admin' )
 
    def get_user( self, apiuser, username ):
 
        """"
 
        Get a user by username
 

	
 
        :param apiuser
 
        :param username
 
        """
 

	
 
        user = User.by_username( username )
 
        if not user:
 
            return None
 

	
 
        return dict( id = user.user_id,
 
                        username = user.username,
 
                        firstname = user.name,
 
                        lastname = user.lastname,
 
                        email = user.email,
 
                        active = user.active,
 
                        admin = user.admin,
 
                        ldap = user.ldap_dn )
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def list_users(self, apiuser):
 
    def get_users( self, apiuser ):
 
        """"
 
        Lists all users
 
        Get all users
 

	
 
        :param apiuser
 
        """
 
@@ -66,14 +88,15 @@ class ApiController(JSONRPCController):
 
                                lastname = user.lastname,
 
                                email = user.email,
 
                                active = user.active,
 
                                admin = user.admin) )
 
                                admin = user.admin,
 
                                ldap = user.ldap_dn ) )
 
        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
 
        Create new user
 

	
 
        :param apiuser:
 
        :param username:
 
@@ -102,18 +125,61 @@ class ApiController(JSONRPCController):
 
            raise JSONRPCError('failed to create user %s' % username)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def list_users_groups(self, apiuser):
 
    def get_users_group( self, apiuser, group_name ):
 
        """"
 
        Lists all users groups
 
        Get users group by name
 

	
 
        :param apiuser
 
        :param group_name
 
        """
 

	
 
        users_group = UsersGroup.get_by_group_name( group_name )
 
        if not users_group:
 
            return None
 

	
 
        members = []
 
        for user in users_group.members:
 
            user = user.user
 
            members.append( dict( id = user.user_id,
 
                            username = user.username,
 
                            firstname = user.name,
 
                            lastname = user.lastname,
 
                            email = user.email,
 
                            active = user.active,
 
                            admin = user.admin,
 
                            ldap = user.ldap_dn ) )
 

	
 
        return dict( id = users_group.users_group_id,
 
                    name = users_group.users_group_name,
 
                    active = users_group.users_group_active,
 
                    members = members )
 

	
 
    @HasPermissionAllDecorator( 'hg.admin' )
 
    def get_users_groups( self, apiuser ):
 
        """"
 
        Get all users groups
 

	
 
        :param apiuser
 
        """
 

	
 
        result = []
 
        for users_group in UsersGroup.getAll():
 
            members = []
 
            for user in users_group.members:
 
                user = user.user
 
                members.append( dict( id = user.user_id,
 
                                username = user.username,
 
                                firstname = user.name,
 
                                lastname = user.lastname,
 
                                email = user.email,
 
                                active = user.active,
 
                                admin = user.admin,
 
                                ldap = user.ldap_dn ) )
 

	
 
            result.append( dict(id=users_group.users_group_id,
 
                                name=users_group.users_group_name,
 
                                active=users_group.users_group_active) )
 
                                active = users_group.users_group_active,
 
                                members = members ) )
 
        return result
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
@@ -128,7 +194,7 @@ class ApiController(JSONRPCController):
 
        try:
 
            form_data = dict(users_group_name=name,
 
                             users_group_active=active)
 
            ug = UsersGroupModel().create(form_data)
 
            ug = UsersGroup.create( form_data )
 
            return dict(id=ug.users_group_id,
 
                        msg='created new users group %s' % name)
 
        except Exception:
 
@@ -136,13 +202,13 @@ class ApiController(JSONRPCController):
 
            raise JSONRPCError('failed to create group %s' % name)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def add_user_to_users_group(self, apiuser, user_name, group_name):
 
    def add_user_to_users_group( self, apiuser, group_name, user_name ):
 
        """"
 
        Add a user to a group
 

	
 
        :param apiuser
 
        :param group_name
 
        :param user_name
 
        :param group_name
 
        """
 

	
 
        try:
 
@@ -155,6 +221,7 @@ class ApiController(JSONRPCController):
 
                raise JSONRPCError('unknown user %s' % user_name)
 

	
 
            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:
 
@@ -162,12 +229,55 @@ class ApiController(JSONRPCController):
 
            raise JSONRPCError('failed to create users group member')
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def list_repos(self, apiuser):
 
    def get_repo( self, apiuser, repo_name ):
 
        """"
 
        Lists all repositories
 
        Get repository by name
 

	
 
        :param apiuser
 
        :param repo_name
 
        """
 

	
 
        repo = Repository.by_repo_name( repo_name )
 
        if not repo:
 
            return None
 

	
 
        members = []
 
        for user in repo.repo_to_perm:
 
            perm = user.permission.permission_name
 
            user = user.user
 
            members.append( dict( type_ = "user",
 
                                    id = user.user_id,
 
                                    username = user.username,
 
                                    firstname = user.name,
 
                                    lastname = user.lastname,
 
                                    email = user.email,
 
                                    active = user.active,
 
                                    admin = user.admin,
 
                                    ldap = user.ldap_dn,
 
                                    permission = perm ) )
 
        for users_group in repo.users_group_to_perm:
 
            perm = users_group.permission.permission_name
 
            users_group = users_group.users_group
 
            members.append( dict( type_ = "users_group",
 
                                    id = users_group.users_group_id,
 
                                    name = users_group.users_group_name,
 
                                    active = users_group.users_group_active,
 
                                    permission = perm ) )
 

	
 
        return dict( id = repo.repo_id,
 
                    name = repo.repo_name,
 
                    type = repo.repo_type,
 
                    description = repo.description,
 
                    members = members )
 

	
 
    @HasPermissionAnyDecorator( 'hg.admin' )
 
    def get_repos( self, apiuser ):
 
        """"
 
        Get all repositories
 

	
 
        :param apiuser
 
        """
 

	
 
        result = []
 
        for repository in Repository.getAll():
 
            result.append( dict(id=repository.repo_id,
 
@@ -216,7 +326,7 @@ class ApiController(JSONRPCController):
 
            raise JSONRPCError('failed to create repository %s' % name)
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def add_user_perm_to_repo(self, apiuser, repo_name, user_name, perm):
 
    def add_user_to_repo( self, apiuser, repo_name, user_name, perm ):
 
        """
 
        Add permission for a user to a repository
 

	
 
@@ -228,15 +338,14 @@ class ApiController(JSONRPCController):
 

	
 
        try:
 
            repo = Repository.by_repo_name(repo_name)
 
            if repo is None:
 
            if not repo:
 
                raise JSONRPCError('unknown repository %s' % repo)
 

	
 
            user = User.by_username(user_name)
 
            if user is None:
 
            if not user:
 
                raise JSONRPCError('unknown user %s' % user)
 

	
 
            RepositoryPermissionModel() \
 
                .updateOrDeleteUserPermission(repo, user, perm)
 
            RepositoryPermissionModel().updateOrDeleteUserPermission( repo, user, perm )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to edit permission %(repo)s for %(user)s'
rhodecode/model/db.py
Show inline comments
 
@@ -438,7 +438,6 @@ class UsersGroup(Base, BaseModel):
 
            Session.rollback()
 
            raise
 

	
 

	
 
class UsersGroupMember(Base, BaseModel):
 
    __tablename__ = 'users_groups_members'
 
    __table_args__ = {'extend_existing':True}
 
@@ -454,6 +453,15 @@ class UsersGroupMember(Base, BaseModel):
 
        self.users_group_id = gr_id
 
        self.user_id = u_id
 

	
 
    @staticmethod
 
    def add_user_to_group( group, user ):
 
        ugm = UsersGroupMember()
 
        ugm.users_group = group
 
        ugm.user = user
 
        Session.add( ugm )
 
        Session.commit()
 
        return ugm
 

	
 
class Repository(Base, BaseModel):
 
    __tablename__ = 'repositories'
 
    __table_args__ = (UniqueConstraint('repo_name'), {'extend_existing':True},)
rhodecode/model/users_group.py
Show inline comments
 
@@ -72,10 +72,13 @@ class UsersGroupModel(BaseModel):
 
            users_group_member.user = user
 
            users_group_member.users_group = users_group
 

	
 
            users_group.members.append( users_group_member )
 
            user.group_member.append( users_group_member )
 

	
 
            self.sa.add(users_group_member)
 
            self.sa.commit()
 
            return users_group_member
 
        except:
 
            log.error(traceback.format_exc())
 
            self.sa.rollback()
 
            raise
 
\ No newline at end of file
 
            raise
0 comments (0 inline, 0 general)