mirror of
https://github.com/quay/quay.git
synced 2026-01-26 06:21:37 +03:00
224 lines
4.6 KiB
Python
224 lines
4.6 KiB
Python
import sys
|
|
from abc import ABCMeta, abstractmethod
|
|
from collections import namedtuple
|
|
|
|
from six import add_metaclass
|
|
|
|
|
|
class SaveException(Exception):
|
|
def __init__(self, other):
|
|
self.traceback = sys.exc_info()
|
|
super(SaveException, self).__init__(str(other))
|
|
|
|
|
|
class DeleteException(Exception):
|
|
def __init__(self, other):
|
|
self.traceback = sys.exc_info()
|
|
super(DeleteException, self).__init__(str(other))
|
|
|
|
|
|
class Role(namedtuple("Role", ["role_name"])):
|
|
def to_dict(self):
|
|
return {
|
|
"role": self.role_name,
|
|
}
|
|
|
|
|
|
class UserPermission(
|
|
namedtuple(
|
|
"UserPermission",
|
|
[
|
|
"role_name",
|
|
"username",
|
|
"is_robot",
|
|
"avatar",
|
|
"is_org_member",
|
|
"has_org",
|
|
],
|
|
)
|
|
):
|
|
def to_dict(self):
|
|
perm_dict = {
|
|
"role": self.role_name,
|
|
"name": self.username,
|
|
"is_robot": self.is_robot,
|
|
"avatar": self.avatar,
|
|
}
|
|
if self.has_org:
|
|
perm_dict["is_org_member"] = self.is_org_member
|
|
return perm_dict
|
|
|
|
|
|
class RobotPermission(
|
|
namedtuple(
|
|
"RobotPermission",
|
|
[
|
|
"role_name",
|
|
"username",
|
|
"is_robot",
|
|
"is_org_member",
|
|
],
|
|
)
|
|
):
|
|
def to_dict(self, user=None, team=None, org_members=None):
|
|
return {
|
|
"role": self.role_name,
|
|
"name": self.username,
|
|
"is_robot": True,
|
|
"is_org_member": self.is_org_member,
|
|
}
|
|
|
|
|
|
class TeamPermission(
|
|
namedtuple(
|
|
"TeamPermission",
|
|
[
|
|
"role_name",
|
|
"team_name",
|
|
"avatar",
|
|
],
|
|
)
|
|
):
|
|
def to_dict(self):
|
|
return {
|
|
"role": self.role_name,
|
|
"name": self.team_name,
|
|
"avatar": self.avatar,
|
|
}
|
|
|
|
|
|
@add_metaclass(ABCMeta)
|
|
class PermissionDataInterface(object):
|
|
"""
|
|
Data interface used by permissions API.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def get_repo_permissions_by_user(self, namespace_name, repository_name):
|
|
"""
|
|
|
|
Args:
|
|
namespace_name: string
|
|
repository_name: string
|
|
|
|
Returns:
|
|
list(UserPermission)
|
|
"""
|
|
|
|
@abstractmethod
|
|
def get_repo_roles(self, username, namespace_name, repository_name):
|
|
"""
|
|
|
|
Args:
|
|
username: string
|
|
namespace_name: string
|
|
repository_name: string
|
|
|
|
Returns:
|
|
list(Role) or None
|
|
"""
|
|
|
|
@abstractmethod
|
|
def get_repo_permission_for_user(self, username, namespace_name, repository_name):
|
|
"""
|
|
|
|
Args:
|
|
username: string
|
|
namespace_name: string
|
|
repository_name: string
|
|
|
|
Returns:
|
|
UserPermission
|
|
"""
|
|
|
|
@abstractmethod
|
|
def set_repo_permission_for_user(self, username, namespace_name, repository_name, role_name):
|
|
"""
|
|
|
|
Args:
|
|
username: string
|
|
namespace_name: string
|
|
repository_name: string
|
|
role_name: string
|
|
|
|
Returns:
|
|
UserPermission
|
|
|
|
Raises:
|
|
SaveException
|
|
"""
|
|
|
|
@abstractmethod
|
|
def delete_repo_permission_for_user(self, username, namespace_name, repository_name):
|
|
"""
|
|
|
|
Args:
|
|
username: string
|
|
namespace_name: string
|
|
repository_name: string
|
|
|
|
Returns:
|
|
void
|
|
|
|
Raises:
|
|
DeleteException
|
|
"""
|
|
|
|
@abstractmethod
|
|
def get_repo_permissions_by_team(self, namespace_name, repository_name):
|
|
"""
|
|
|
|
Args:
|
|
namespace_name: string
|
|
repository_name: string
|
|
|
|
Returns:
|
|
list(TeamPermission)
|
|
"""
|
|
|
|
@abstractmethod
|
|
def get_repo_role_for_team(self, team_name, namespace_name, repository_name):
|
|
"""
|
|
|
|
Args:
|
|
team_name: string
|
|
namespace_name: string
|
|
repository_name: string
|
|
|
|
Returns:
|
|
Role
|
|
"""
|
|
|
|
@abstractmethod
|
|
def set_repo_permission_for_team(self, team_name, namespace_name, repository_name, permission):
|
|
"""
|
|
|
|
Args:
|
|
team_name: string
|
|
namespace_name: string
|
|
repository_name: string
|
|
permission: string
|
|
|
|
Returns:
|
|
TeamPermission
|
|
|
|
Raises:
|
|
SaveException
|
|
"""
|
|
|
|
@abstractmethod
|
|
def delete_repo_permission_for_team(self, team_name, namespace_name, repository_name):
|
|
"""
|
|
|
|
Args:
|
|
team_name: string
|
|
namespace_name: string
|
|
repository_name: string
|
|
|
|
Returns:
|
|
TeamPermission
|
|
|
|
Raises:
|
|
DeleteException
|
|
"""
|