mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2025-01-20 10:15:29 +01:00
57ef5e27dd
The route includes the permission mask, counters and limits
74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
import logging
|
|
import typing as t
|
|
|
|
from app.classes.models.crafty_permissions import (
|
|
EnumPermissionsCrafty,
|
|
PermissionsCrafty,
|
|
)
|
|
from app.classes.web.base_api_handler import BaseApiHandler
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
SERVER_CREATION: t.Final[str] = EnumPermissionsCrafty.SERVER_CREATION.name
|
|
USER_CONFIG: t.Final[str] = EnumPermissionsCrafty.USER_CONFIG.name
|
|
ROLES_CONFIG: t.Final[str] = EnumPermissionsCrafty.ROLES_CONFIG.name
|
|
|
|
|
|
class ApiUsersUserPermissionsHandler(BaseApiHandler):
|
|
def get(self, user_id: str):
|
|
auth_data = self.authenticate_user()
|
|
if not auth_data:
|
|
return
|
|
(
|
|
_,
|
|
exec_user_crafty_permissions,
|
|
_,
|
|
_,
|
|
user,
|
|
) = auth_data
|
|
|
|
if user_id in ["@me", user["user_id"]]:
|
|
user_id = user["user_id"]
|
|
res_data = PermissionsCrafty.get_user_crafty(user_id)
|
|
elif EnumPermissionsCrafty.USER_CONFIG not in exec_user_crafty_permissions:
|
|
return self.finish_json(
|
|
400,
|
|
{
|
|
"status": "error",
|
|
"error": "NOT_AUTHORIZED",
|
|
},
|
|
)
|
|
else:
|
|
# has User_Config permission and isn't viewing self
|
|
res_data = PermissionsCrafty.get_user_crafty_optional(user_id)
|
|
if res_data is None:
|
|
return self.finish_json(
|
|
404,
|
|
{
|
|
"status": "error",
|
|
"error": "USER_NOT_FOUND",
|
|
},
|
|
)
|
|
|
|
self.finish_json(
|
|
200,
|
|
{
|
|
"status": "ok",
|
|
"data": {
|
|
"permissions": res_data.permissions,
|
|
"counters": {
|
|
SERVER_CREATION: res_data.created_server,
|
|
USER_CONFIG: res_data.created_user,
|
|
ROLES_CONFIG: res_data.created_role,
|
|
},
|
|
"limits": {
|
|
SERVER_CREATION: res_data.limit_server_creation,
|
|
USER_CONFIG: res_data.limit_user_creation,
|
|
ROLES_CONFIG: res_data.limit_role_creation,
|
|
},
|
|
},
|
|
},
|
|
)
|