diff --git a/kallithea/controllers/api/api.py b/kallithea/controllers/api/api.py --- a/kallithea/controllers/api/api.py +++ b/kallithea/controllers/api/api.py @@ -1097,7 +1097,7 @@ class ApiController(JSONRPCController): error: null """ if not HasPermissionAny('hg.admin')(): - repos = RepoModel().get_all_user_repos(user=request.authuser.user_id) + repos = request.authuser.get_all_user_repos() else: repos = db.Repository.query() diff --git a/kallithea/lib/auth.py b/kallithea/lib/auth.py --- a/kallithea/lib/auth.py +++ b/kallithea/lib/auth.py @@ -467,6 +467,16 @@ class AuthUser(object): pass return _set or set(['0.0.0.0/0', '::/0']) + def get_all_user_repos(self): + """ + Gets all repositories that user have at least read access + """ + repos = [repo_name + for repo_name, perm in self.repository_permissions.items() + if perm in ['repository.read', 'repository.write', 'repository.admin'] + ] + return db.Repository.query().filter(db.Repository.repo_name.in_(repos)) + #============================================================================== # CHECK DECORATORS diff --git a/kallithea/lib/auth_modules/__init__.py b/kallithea/lib/auth_modules/__init__.py --- a/kallithea/lib/auth_modules/__init__.py +++ b/kallithea/lib/auth_modules/__init__.py @@ -22,7 +22,7 @@ from inspect import isfunction from kallithea.lib.auth import AuthUser from kallithea.lib.compat import hybrid_property -from kallithea.lib.utils2 import asbool, PasswordGenerator +from kallithea.lib.utils2 import PasswordGenerator, asbool from kallithea.model import db, meta, validators from kallithea.model.user import UserModel from kallithea.model.user_group import UserGroupModel diff --git a/kallithea/model/repo.py b/kallithea/model/repo.py --- a/kallithea/model/repo.py +++ b/kallithea/model/repo.py @@ -89,20 +89,6 @@ class RepoModel(object): .filter(db.Repository.repo_name == repo_name) return repo.scalar() - def get_all_user_repos(self, user): - """ - Gets all repositories that user have at least read access - - :param user: - """ - from kallithea.lib.auth import AuthUser - auth_user = AuthUser(dbuser=db.User.guess_instance(user)) - repos = [repo_name - for repo_name, perm in auth_user.repository_permissions.items() - if perm in ['repository.read', 'repository.write', 'repository.admin'] - ] - return db.Repository.query().filter(db.Repository.repo_name.in_(repos)) - @classmethod def _render_datatable(cls, tmpl, *args, **kwargs): from tg import app_globals, request diff --git a/kallithea/tests/api/api_base.py b/kallithea/tests/api/api_base.py --- a/kallithea/tests/api/api_base.py +++ b/kallithea/tests/api/api_base.py @@ -688,7 +688,7 @@ class _BaseTestApi(object): expected = jsonify([ repo.get_api_data() - for repo in RepoModel().get_all_user_repos(self.TEST_USER_LOGIN) + for repo in AuthUser(dbuser=db.User.get_by_username(self.TEST_USER_LOGIN)).get_all_user_repos() ]) self._compare_ok(id_, expected, given=response.body)