Added logic to check if user is allowed to see requested data #89
This commit is contained in:
parent
84937dde0a
commit
dd64435c65
@ -52,17 +52,13 @@ class AuthServiceABC(ABC):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
async def add_auth_user_async(self, user_dto: AuthUserDTO):
|
def add_auth_user(self, user_dto: AuthUserDTO):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
async def add_auth_user_by_oauth_async(self, dto: OAuthDTO):
|
async def add_auth_user_by_oauth_async(self, dto: OAuthDTO):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
async def add_auth_user_by_discord_async(self, user_dto: AuthUserDTO, dc_id: int) -> OAuthDTO:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
async def update_user_async(self, update_user_dto: UpdateAuthUserDTO):
|
async def update_user_async(self, update_user_dto: UpdateAuthUserDTO):
|
||||||
pass
|
pass
|
||||||
@ -84,7 +80,7 @@ class AuthServiceABC(ABC):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
async def verify_api_key(self, api_key: str) -> bool:
|
def verify_api_key(self, api_key: str) -> bool:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
@ -92,7 +88,7 @@ class AuthServiceABC(ABC):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
async def login_discord_async(self, oauth_dto: AuthUserDTO) -> TokenDTO:
|
async def login_discord_async(self, oauth_dto: AuthUserDTO, dc_id: int) -> TokenDTO:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
@ -6,8 +6,6 @@ from flask import request, jsonify, Response
|
|||||||
|
|
||||||
from bot_api.abc.auth_service_abc import AuthServiceABC
|
from bot_api.abc.auth_service_abc import AuthServiceABC
|
||||||
from bot_api.api import Api
|
from bot_api.api import Api
|
||||||
from bot_api.exception.service_error_code_enum import ServiceErrorCode
|
|
||||||
from bot_api.exception.service_exception import ServiceException
|
|
||||||
from bot_api.filter.auth_user_select_criteria import AuthUserSelectCriteria
|
from bot_api.filter.auth_user_select_criteria import AuthUserSelectCriteria
|
||||||
from bot_api.json_processor import JSONProcessor
|
from bot_api.json_processor import JSONProcessor
|
||||||
from bot_api.logging.api_logger import ApiLogger
|
from bot_api.logging.api_logger import ApiLogger
|
||||||
@ -73,7 +71,7 @@ class AuthController:
|
|||||||
@Route.post(f"{BasePath}/register")
|
@Route.post(f"{BasePath}/register")
|
||||||
async def register(self):
|
async def register(self):
|
||||||
dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True))
|
dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True))
|
||||||
await self._auth_service.add_auth_user_async(dto)
|
await self._auth_service.add_auth_user(dto)
|
||||||
return "", 200
|
return "", 200
|
||||||
|
|
||||||
@Route.post(f"{BasePath}/register-by-id/<id>")
|
@Route.post(f"{BasePath}/register-by-id/<id>")
|
||||||
|
@ -77,23 +77,6 @@ class AuthDiscordController:
|
|||||||
login_url, state = oauth.authorization_url(self._auth_settings.auth_url)
|
login_url, state = oauth.authorization_url(self._auth_settings.auth_url)
|
||||||
return jsonify({"loginUrl": login_url})
|
return jsonify({"loginUrl": login_url})
|
||||||
|
|
||||||
@Route.get(f"{BasePath}/create-user")
|
|
||||||
async def discord_create_user(self) -> Response:
|
|
||||||
response = self._get_user_from_discord_response()
|
|
||||||
result = await self._auth_service.add_auth_user_by_discord_async(
|
|
||||||
AuthUserDTO(
|
|
||||||
0,
|
|
||||||
response["username"],
|
|
||||||
response["discriminator"],
|
|
||||||
response["email"],
|
|
||||||
str(uuid.uuid4()),
|
|
||||||
None,
|
|
||||||
AuthRoleEnum.normal,
|
|
||||||
),
|
|
||||||
response["id"],
|
|
||||||
)
|
|
||||||
return jsonify(result.to_dict())
|
|
||||||
|
|
||||||
@Route.get(f"{BasePath}/login")
|
@Route.get(f"{BasePath}/login")
|
||||||
async def discord_login(self) -> Response:
|
async def discord_login(self) -> Response:
|
||||||
response = self._get_user_from_discord_response()
|
response = self._get_user_from_discord_response()
|
||||||
@ -107,5 +90,5 @@ class AuthDiscordController:
|
|||||||
AuthRoleEnum.normal,
|
AuthRoleEnum.normal,
|
||||||
)
|
)
|
||||||
|
|
||||||
result = await self._auth_service.login_discord_async(dto)
|
result = await self._auth_service.login_discord_async(dto, response["id"])
|
||||||
return jsonify(result.to_dict())
|
return jsonify(result.to_dict())
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import functools
|
import functools
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import Optional, Callable
|
from typing import Optional, Callable, Union
|
||||||
|
|
||||||
from cpl_core.dependency_injection import ServiceProviderABC
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
from cpl_core.environment import ApplicationEnvironmentABC
|
from cpl_core.environment import ApplicationEnvironmentABC
|
||||||
@ -13,6 +13,7 @@ from bot_api.exception.service_exception import ServiceException
|
|||||||
from bot_api.model.error_dto import ErrorDTO
|
from bot_api.model.error_dto import ErrorDTO
|
||||||
from bot_data.abc.auth_user_repository_abc import AuthUserRepositoryABC
|
from bot_data.abc.auth_user_repository_abc import AuthUserRepositoryABC
|
||||||
from bot_data.model.auth_role_enum import AuthRoleEnum
|
from bot_data.model.auth_role_enum import AuthRoleEnum
|
||||||
|
from bot_data.model.auth_user import AuthUser
|
||||||
|
|
||||||
|
|
||||||
class Route:
|
class Route:
|
||||||
@ -29,6 +30,27 @@ class Route:
|
|||||||
cls._auth = auth
|
cls._auth = auth
|
||||||
cls._env = env.environment_name
|
cls._env = env.environment_name
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_user(cls) -> Optional[Union[str, AuthUser]]:
|
||||||
|
token = None
|
||||||
|
api_key = None
|
||||||
|
authorization = request.headers.get("Authorization").split()
|
||||||
|
match authorization[0]:
|
||||||
|
case "Bearer":
|
||||||
|
token = authorization[1]
|
||||||
|
case "API-Key":
|
||||||
|
api_key = authorization[1]
|
||||||
|
|
||||||
|
if api_key is not None:
|
||||||
|
return "system"
|
||||||
|
|
||||||
|
if token is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
jwt = cls._auth.decode_token(token)
|
||||||
|
user = cls._auth_users.get_auth_user_by_email(jwt["email"])
|
||||||
|
return user
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def authorize(cls, f: Callable = None, role: AuthRoleEnum = None, skip_in_dev=False, by_api_key=False):
|
def authorize(cls, f: Callable = None, role: AuthRoleEnum = None, skip_in_dev=False, by_api_key=False):
|
||||||
if f is None:
|
if f is None:
|
||||||
@ -39,10 +61,25 @@ class Route:
|
|||||||
if skip_in_dev and cls._env == "development":
|
if skip_in_dev and cls._env == "development":
|
||||||
return await f(*args, **kwargs)
|
return await f(*args, **kwargs)
|
||||||
|
|
||||||
if "Authorization" not in request.headers and by_api_key and "API-Key" in request.headers:
|
token = None
|
||||||
|
api_key = None
|
||||||
|
if "Authorization" in request.headers:
|
||||||
|
if " " not in request.headers.get("Authorization"):
|
||||||
|
ex = ServiceException(ServiceErrorCode.Unauthorized, f"Token not set")
|
||||||
|
error = ErrorDTO(ex.error_code, ex.message)
|
||||||
|
return jsonify(error.to_dict()), 401
|
||||||
|
|
||||||
|
authorization = request.headers.get("Authorization").split()
|
||||||
|
match authorization[0]:
|
||||||
|
case "Bearer":
|
||||||
|
token = authorization[1]
|
||||||
|
case "API-Key":
|
||||||
|
api_key = authorization[1]
|
||||||
|
|
||||||
|
if api_key is not None:
|
||||||
valid = False
|
valid = False
|
||||||
try:
|
try:
|
||||||
valid = cls._auth.verify_api_key(request.headers["API-Key"])
|
valid = cls._auth.verify_api_key(api_key)
|
||||||
except ServiceException as e:
|
except ServiceException as e:
|
||||||
error = ErrorDTO(e.error_code, e.message)
|
error = ErrorDTO(e.error_code, e.message)
|
||||||
return jsonify(error.to_dict()), 403
|
return jsonify(error.to_dict()), 403
|
||||||
@ -56,11 +93,6 @@ class Route:
|
|||||||
|
|
||||||
return await f(*args, **kwargs)
|
return await f(*args, **kwargs)
|
||||||
|
|
||||||
token = None
|
|
||||||
if "Authorization" in request.headers:
|
|
||||||
bearer = request.headers.get("Authorization")
|
|
||||||
token = bearer.split()[1]
|
|
||||||
|
|
||||||
if token is None:
|
if token is None:
|
||||||
ex = ServiceException(ServiceErrorCode.Unauthorized, f"Token not set")
|
ex = ServiceException(ServiceErrorCode.Unauthorized, f"Token not set")
|
||||||
error = ErrorDTO(ex.error_code, ex.message)
|
error = ErrorDTO(ex.error_code, ex.message)
|
||||||
|
@ -223,18 +223,13 @@ class AuthService(AuthServiceABC):
|
|||||||
user = self._auth_users.find_auth_user_by_email(email)
|
user = self._auth_users.find_auth_user_by_email(email)
|
||||||
return AUT.to_dto(user) if user is not None else None
|
return AUT.to_dto(user) if user is not None else None
|
||||||
|
|
||||||
async def add_auth_user_async(self, user_dto: AuthUserDTO):
|
def add_auth_user(self, user_dto: AuthUserDTO):
|
||||||
db_user = self._auth_users.find_auth_user_by_email(user_dto.email)
|
db_user = self._auth_users.find_auth_user_by_email(user_dto.email)
|
||||||
if db_user is not None:
|
if db_user is not None:
|
||||||
raise ServiceException(ServiceErrorCode.InvalidUser, "User already exists")
|
raise ServiceException(ServiceErrorCode.InvalidUser, "User already exists")
|
||||||
|
|
||||||
user = AUT.to_db(user_dto)
|
user = AUT.to_db(user_dto)
|
||||||
if (
|
if self._auth_users.get_all_auth_users().count() == 0:
|
||||||
self._auth_users.get_all_auth_users()
|
|
||||||
.where(lambda x: x.name != "internal" and x.email != "internal@localhost")
|
|
||||||
.count()
|
|
||||||
== 0
|
|
||||||
):
|
|
||||||
user.auth_role = AuthRoleEnum.admin
|
user.auth_role = AuthRoleEnum.admin
|
||||||
|
|
||||||
user.password_salt = uuid.uuid4()
|
user.password_salt = uuid.uuid4()
|
||||||
@ -277,51 +272,6 @@ class AuthService(AuthServiceABC):
|
|||||||
|
|
||||||
self._db.save_changes()
|
self._db.save_changes()
|
||||||
|
|
||||||
async def add_auth_user_by_discord_async(self, user_dto: AuthUserDTO, dc_id: int) -> OAuthDTO:
|
|
||||||
db_auth_user = self._auth_users.find_auth_user_by_email(user_dto.email)
|
|
||||||
|
|
||||||
# user exists
|
|
||||||
if db_auth_user is not None and db_auth_user.users.count() > 0:
|
|
||||||
# raise ServiceException(ServiceErrorCode.InvalidUser, 'User already exists')
|
|
||||||
self._logger.debug(__name__, f"Discord user already exists")
|
|
||||||
return OAuthDTO(AUT.to_dto(db_auth_user), None)
|
|
||||||
|
|
||||||
# user exists but discord user id not set
|
|
||||||
elif db_auth_user is not None and db_auth_user.users.count() == 0:
|
|
||||||
self._logger.debug(__name__, f"Auth user exists but not linked with discord")
|
|
||||||
# users = self._users.get_users_by_discord_id(user_dto.user_id)
|
|
||||||
# add auth_user to user refs
|
|
||||||
db_auth_user.oauth_id = None
|
|
||||||
|
|
||||||
else:
|
|
||||||
# user does not exists
|
|
||||||
self._logger.debug(__name__, f"Auth user does not exist")
|
|
||||||
try:
|
|
||||||
user_dto.user_id = self._users.get_users_by_discord_id(user_dto.user_id).single().user_id
|
|
||||||
except Exception as e:
|
|
||||||
self._logger.error(__name__, f"User not found")
|
|
||||||
user_dto.user_id = None
|
|
||||||
|
|
||||||
await self.add_auth_user_async(user_dto)
|
|
||||||
db_auth_user = self._auth_users.get_auth_user_by_email(user_dto.email)
|
|
||||||
db_auth_user.oauth_id = uuid.uuid4()
|
|
||||||
|
|
||||||
for g in self._bot.guilds:
|
|
||||||
member = g.get_member(int(dc_id))
|
|
||||||
if member is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
server = self._servers.get_server_by_discord_id(g.id)
|
|
||||||
users = self._users.get_users_by_discord_id(dc_id)
|
|
||||||
for user in users:
|
|
||||||
if user.server.server_id != server.server_id:
|
|
||||||
continue
|
|
||||||
self._auth_users.add_auth_user_user_rel(AuthUserUsersRelation(db_auth_user, user))
|
|
||||||
|
|
||||||
self._auth_users.update_auth_user(db_auth_user)
|
|
||||||
self._db.save_changes()
|
|
||||||
return OAuthDTO(AUT.to_dto(db_auth_user), db_auth_user.oauth_id)
|
|
||||||
|
|
||||||
async def update_user_async(self, update_user_dto: UpdateAuthUserDTO):
|
async def update_user_async(self, update_user_dto: UpdateAuthUserDTO):
|
||||||
if update_user_dto is None:
|
if update_user_dto is None:
|
||||||
raise ServiceException(ServiceErrorCode.InvalidData, f"User is empty")
|
raise ServiceException(ServiceErrorCode.InvalidData, f"User is empty")
|
||||||
@ -498,7 +448,7 @@ class AuthService(AuthServiceABC):
|
|||||||
if not keys.contains(api_key):
|
if not keys.contains(api_key):
|
||||||
raise ServiceException(ServiceErrorCode.InvalidData, "API-Key invalid")
|
raise ServiceException(ServiceErrorCode.InvalidData, "API-Key invalid")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._logger.error(__name__, f"Token invalid", e)
|
self._logger.error(__name__, f"API-Key invalid", e)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
@ -523,16 +473,21 @@ class AuthService(AuthServiceABC):
|
|||||||
self._db.save_changes()
|
self._db.save_changes()
|
||||||
return TokenDTO(token, refresh_token)
|
return TokenDTO(token, refresh_token)
|
||||||
|
|
||||||
async def login_discord_async(self, user_dto: AuthUserDTO) -> TokenDTO:
|
async def login_discord_async(self, user_dto: AuthUserDTO, dc_id: int) -> TokenDTO:
|
||||||
if user_dto is None:
|
if user_dto is None:
|
||||||
raise ServiceException(ServiceErrorCode.InvalidData, "User not set")
|
raise ServiceException(ServiceErrorCode.InvalidData, "User not set")
|
||||||
|
|
||||||
db_user = self._auth_users.find_auth_user_by_email(user_dto.email)
|
db_user = self._auth_users.find_auth_user_by_email(user_dto.email)
|
||||||
if db_user is None:
|
if db_user is None:
|
||||||
await self.add_auth_user_async(user_dto)
|
self.add_auth_user(user_dto)
|
||||||
# raise ServiceException(ServiceErrorCode.InvalidUser, f'User not found')
|
# raise ServiceException(ServiceErrorCode.InvalidUser, f'User not found')
|
||||||
|
|
||||||
db_user = self._auth_users.get_auth_user_by_email(user_dto.email)
|
db_user = self._auth_users.get_auth_user_by_email(user_dto.email)
|
||||||
|
if db_user.users.count() == 0:
|
||||||
|
self._users.get_users_by_discord_id(dc_id).for_each(
|
||||||
|
lambda x: self._auth_users.add_auth_user_user_rel(AuthUserUsersRelation(db_user, x))
|
||||||
|
)
|
||||||
|
|
||||||
token = self.generate_token(db_user)
|
token = self.generate_token(db_user)
|
||||||
refresh_token = self._create_and_save_refresh_token(db_user)
|
refresh_token = self._create_and_save_refresh_token(db_user)
|
||||||
if db_user.forgot_password_id is not None:
|
if db_user.forgot_password_id is not None:
|
||||||
|
@ -11,7 +11,6 @@ from bot_data.filtered_result import FilteredResult
|
|||||||
from bot_data.model.auth_role_enum import AuthRoleEnum
|
from bot_data.model.auth_role_enum import AuthRoleEnum
|
||||||
from bot_data.model.auth_user import AuthUser
|
from bot_data.model.auth_user import AuthUser
|
||||||
from bot_data.model.auth_user_users_relation import AuthUserUsersRelation
|
from bot_data.model.auth_user_users_relation import AuthUserUsersRelation
|
||||||
from bot_data.model.user import User
|
|
||||||
|
|
||||||
|
|
||||||
class AuthUserRepositoryService(AuthUserRepositoryABC):
|
class AuthUserRepositoryService(AuthUserRepositoryABC):
|
||||||
|
@ -1,11 +1,26 @@
|
|||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
from ariadne import ObjectType
|
from ariadne import ObjectType
|
||||||
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
from cpl_query.extension import List
|
from cpl_query.extension import List
|
||||||
|
|
||||||
|
from bot_api.route.route import Route
|
||||||
|
from bot_data.model.auth_role_enum import AuthRoleEnum
|
||||||
|
from bot_data.model.auth_user import AuthUser
|
||||||
|
from bot_data.model.auto_role import AutoRole
|
||||||
|
from bot_data.model.auto_role_rule import AutoRoleRule
|
||||||
|
from bot_data.model.client import Client
|
||||||
|
from bot_data.model.known_user import KnownUser
|
||||||
|
from bot_data.model.level import Level
|
||||||
|
from bot_data.model.server import Server
|
||||||
|
from bot_data.model.user import User
|
||||||
|
from bot_data.model.user_joined_server import UserJoinedServer
|
||||||
|
from bot_data.model.user_joined_voice_channel import UserJoinedVoiceChannel
|
||||||
from bot_graphql.abc.filter_abc import FilterABC
|
from bot_graphql.abc.filter_abc import FilterABC
|
||||||
from bot_graphql.filter.page import Page
|
from bot_graphql.filter.page import Page
|
||||||
from bot_graphql.filter.sort import Sort
|
from bot_graphql.filter.sort import Sort
|
||||||
|
from modules.permission.service.permission_service import PermissionService
|
||||||
|
|
||||||
|
|
||||||
class QueryABC(ObjectType):
|
class QueryABC(ObjectType):
|
||||||
@ -31,11 +46,100 @@ class QueryABC(ObjectType):
|
|||||||
sort.from_dict(kwargs["sort"])
|
sort.from_dict(kwargs["sort"])
|
||||||
kwargs["sort"] = sort
|
kwargs["sort"] = sort
|
||||||
|
|
||||||
return self._resolve_collection(get_collection(*args), *args, **kwargs)
|
collection = get_collection(*args)
|
||||||
|
user = Route.get_user()
|
||||||
|
|
||||||
|
if user == "system" or user.auth_role == AuthRoleEnum.admin:
|
||||||
|
return self._resolve_collection(collection, *args, **kwargs)
|
||||||
|
|
||||||
|
for x in collection:
|
||||||
|
if not self._can_user_see_element(user, x):
|
||||||
|
return List()
|
||||||
|
|
||||||
|
return self._resolve_collection(collection, *args, **kwargs)
|
||||||
|
|
||||||
self.set_field(f"{name}s", wrapper)
|
self.set_field(f"{name}s", wrapper)
|
||||||
self.set_field(f"{name}Count", lambda *args: get_collection(*args).count())
|
self.set_field(f"{name}Count", lambda *args: get_collection(*args).count())
|
||||||
|
|
||||||
|
@ServiceProviderABC.inject
|
||||||
|
def _can_user_see_element(self, user: AuthUser, element, services: ServiceProviderABC) -> bool:
|
||||||
|
permissions: PermissionService = services.get_service(PermissionService)
|
||||||
|
bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC)
|
||||||
|
|
||||||
|
access = False
|
||||||
|
if type(element) == AutoRole:
|
||||||
|
element: AutoRole = element
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
guild = bot.get_guild(u.server.discord_server_id)
|
||||||
|
member = guild.get_member(u.discord_id)
|
||||||
|
if permissions.is_member_moderator(member) and u.server.server_id == element.server.server_id:
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
|
elif type(element) == AutoRoleRule:
|
||||||
|
element: AutoRole = element.auto_role
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
guild = bot.get_guild(u.server.discord_server_id)
|
||||||
|
member = guild.get_member(u.discord_id)
|
||||||
|
if permissions.is_member_moderator(member) and u.server.server_id == element.server.server_id:
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
|
elif type(element) == Client:
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
if u.server.server_id == element.server.server_id:
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
|
elif type(element) == KnownUser:
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
guild = bot.get_guild(u.server.discord_server_id)
|
||||||
|
member = guild.get_member(u.discord_id)
|
||||||
|
if permissions.is_member_moderator(member):
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
|
elif type(element) == Level:
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
if u.server.server_id == element.server.server_id:
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
|
elif type(element) == Server:
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
if u.server.server_id == element.server_id:
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
|
elif type(element) == User:
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
if u.user_id == element.user_id:
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
|
elif type(element) == UserJoinedServer:
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
if u.user_id == element.user.user_id:
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
|
elif type(element) == UserJoinedVoiceChannel:
|
||||||
|
for u in user.users:
|
||||||
|
u: User = u
|
||||||
|
if u.user_id == element.user.user_id:
|
||||||
|
access = True
|
||||||
|
break
|
||||||
|
|
||||||
|
return access
|
||||||
|
|
||||||
# @FilterABC.resolve_filter_annotation
|
# @FilterABC.resolve_filter_annotation
|
||||||
def _resolve_collection(self, collection: List, *_, filter: FilterABC = None, page: Page = None, sort: Sort = None):
|
def _resolve_collection(self, collection: List, *_, filter: FilterABC = None, page: Page = None, sort: Sort = None):
|
||||||
if filter is not None:
|
if filter is not None:
|
||||||
|
@ -4,6 +4,7 @@ from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
|||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
from bot_data.model.auto_role import AutoRole
|
from bot_data.model.auto_role import AutoRole
|
||||||
from bot_graphql.abc.data_query_abc import DataQueryABC
|
from bot_graphql.abc.data_query_abc import DataQueryABC
|
||||||
|
from bot_graphql.filter.auto_role_filter import AutoRoleFilter
|
||||||
from bot_graphql.filter.server_filter import ServerFilter
|
from bot_graphql.filter.server_filter import ServerFilter
|
||||||
|
|
||||||
|
|
||||||
@ -26,7 +27,9 @@ class AutoRoleQuery(DataQueryABC):
|
|||||||
self.set_field("messageId", self.resolve_message_id)
|
self.set_field("messageId", self.resolve_message_id)
|
||||||
self.set_field("server", self.resolve_server)
|
self.set_field("server", self.resolve_server)
|
||||||
self.add_collection(
|
self.add_collection(
|
||||||
"autoRoleRule", lambda x, *_: self._auto_role_rules.get_auto_role_rules_by_auto_role_id(x.auto_role_id)
|
"autoRoleRule",
|
||||||
|
lambda x, *_: self._auto_role_rules.get_auto_role_rules_by_auto_role_id(x.auto_role_id),
|
||||||
|
AutoRoleFilter,
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -8,6 +8,9 @@ from bot_data.abc.user_joined_voice_channel_repository_abc import UserJoinedVoic
|
|||||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
||||||
from bot_data.model.server import Server
|
from bot_data.model.server import Server
|
||||||
from bot_graphql.abc.data_query_abc import DataQueryABC
|
from bot_graphql.abc.data_query_abc import DataQueryABC
|
||||||
|
from bot_graphql.filter.auto_role_filter import AutoRoleFilter
|
||||||
|
from bot_graphql.filter.client_filter import ClientFilter
|
||||||
|
from bot_graphql.filter.level_filter import LevelFilter
|
||||||
from bot_graphql.filter.user_filter import UserFilter
|
from bot_graphql.filter.user_filter import UserFilter
|
||||||
|
|
||||||
|
|
||||||
@ -38,10 +41,16 @@ class ServerQuery(DataQueryABC):
|
|||||||
self.set_field("iconURL", self.resolve_icon_url)
|
self.set_field("iconURL", self.resolve_icon_url)
|
||||||
|
|
||||||
self.add_collection(
|
self.add_collection(
|
||||||
"autoRole", lambda server, *_: self._auto_roles.get_auto_roles_by_server_id(server.server_id)
|
"autoRole",
|
||||||
|
lambda server, *_: self._auto_roles.get_auto_roles_by_server_id(server.server_id),
|
||||||
|
AutoRoleFilter,
|
||||||
|
)
|
||||||
|
self.add_collection(
|
||||||
|
"client", lambda server, *_: self._clients.get_clients_by_server_id(server.server_id), ClientFilter
|
||||||
|
)
|
||||||
|
self.add_collection(
|
||||||
|
"level", lambda server, *_: self._levels.get_levels_by_server_id(server.server_id), LevelFilter
|
||||||
)
|
)
|
||||||
self.add_collection("client", lambda server, *_: self._clients.get_clients_by_server_id(server.server_id))
|
|
||||||
self.add_collection("level", lambda server, *_: self._levels.get_levels_by_server_id(server.server_id))
|
|
||||||
self.add_collection("user", lambda server, *_: self._users.get_users_by_server_id(server.server_id), UserFilter)
|
self.add_collection("user", lambda server, *_: self._users.get_users_by_server_id(server.server_id), UserFilter)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -5,6 +5,8 @@ from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepos
|
|||||||
from bot_data.abc.user_joined_voice_channel_repository_abc import UserJoinedVoiceChannelRepositoryABC
|
from bot_data.abc.user_joined_voice_channel_repository_abc import UserJoinedVoiceChannelRepositoryABC
|
||||||
from bot_data.model.user import User
|
from bot_data.model.user import User
|
||||||
from bot_graphql.abc.data_query_abc import DataQueryABC
|
from bot_graphql.abc.data_query_abc import DataQueryABC
|
||||||
|
from bot_graphql.filter.user_joined_server_filter import UserJoinedServerFilter
|
||||||
|
from bot_graphql.filter.user_joined_voice_channel_filter import UserJoinedVoiceChannelFilter
|
||||||
from modules.level.service.level_service import LevelService
|
from modules.level.service.level_service import LevelService
|
||||||
|
|
||||||
|
|
||||||
@ -31,9 +33,15 @@ class UserQuery(DataQueryABC):
|
|||||||
self.set_field("xp", self.resolve_xp)
|
self.set_field("xp", self.resolve_xp)
|
||||||
self.set_field("ontime", self.resolve_ontime)
|
self.set_field("ontime", self.resolve_ontime)
|
||||||
self.set_field("level", self.resolve_level)
|
self.set_field("level", self.resolve_level)
|
||||||
self.add_collection("joinedServer", lambda user, *_: self._ujs.get_user_joined_servers_by_user_id(user.user_id))
|
|
||||||
self.add_collection(
|
self.add_collection(
|
||||||
"joinedVoiceChannel", lambda user, *_: self._ujvs.get_user_joined_voice_channels_by_user_id(user.user_id)
|
"joinedServer",
|
||||||
|
lambda user, *_: self._ujs.get_user_joined_servers_by_user_id(user.user_id),
|
||||||
|
UserJoinedServerFilter,
|
||||||
|
)
|
||||||
|
self.add_collection(
|
||||||
|
"joinedVoiceChannel",
|
||||||
|
lambda user, *_: self._ujvs.get_user_joined_voice_channels_by_user_id(user.user_id),
|
||||||
|
UserJoinedVoiceChannelFilter,
|
||||||
)
|
)
|
||||||
self.set_field("server", self.resolve_server)
|
self.set_field("server", self.resolve_server)
|
||||||
|
|
||||||
|
@ -9,9 +9,12 @@ from bot_data.abc.user_repository_abc import UserRepositoryABC
|
|||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
from bot_graphql.filter.auto_role_filter import AutoRoleFilter
|
from bot_graphql.filter.auto_role_filter import AutoRoleFilter
|
||||||
from bot_graphql.filter.auto_role_rule_filter import AutoRoleRuleFilter
|
from bot_graphql.filter.auto_role_rule_filter import AutoRoleRuleFilter
|
||||||
|
from bot_graphql.filter.client_filter import ClientFilter
|
||||||
from bot_graphql.filter.level_filter import LevelFilter
|
from bot_graphql.filter.level_filter import LevelFilter
|
||||||
from bot_graphql.filter.server_filter import ServerFilter
|
from bot_graphql.filter.server_filter import ServerFilter
|
||||||
from bot_graphql.filter.user_filter import UserFilter
|
from bot_graphql.filter.user_filter import UserFilter
|
||||||
|
from bot_graphql.filter.user_joined_server_filter import UserJoinedServerFilter
|
||||||
|
from bot_graphql.filter.user_joined_voice_channel_filter import UserJoinedVoiceChannelFilter
|
||||||
|
|
||||||
|
|
||||||
class Query(QueryABC):
|
class Query(QueryABC):
|
||||||
@ -38,12 +41,16 @@ class Query(QueryABC):
|
|||||||
|
|
||||||
self.add_collection("autoRole", lambda *_: self._auto_roles.get_auto_roles(), AutoRoleFilter)
|
self.add_collection("autoRole", lambda *_: self._auto_roles.get_auto_roles(), AutoRoleFilter)
|
||||||
self.add_collection("autoRoleRule", lambda *_: self._auto_roles.get_auto_role_rules(), AutoRoleRuleFilter)
|
self.add_collection("autoRoleRule", lambda *_: self._auto_roles.get_auto_role_rules(), AutoRoleRuleFilter)
|
||||||
self.add_collection("client", lambda *_: self._clients.get_clients())
|
self.add_collection("client", lambda *_: self._clients.get_clients(), ClientFilter)
|
||||||
self.add_collection("knownUser", lambda *_: self._known_users.get_users())
|
self.add_collection("knownUser", lambda *_: self._known_users.get_users())
|
||||||
self.add_collection("level", lambda *_: self._levels.get_levels(), LevelFilter)
|
self.add_collection("level", lambda *_: self._levels.get_levels(), LevelFilter)
|
||||||
self.add_collection("server", lambda *_: self._servers.get_servers(), ServerFilter)
|
self.add_collection("server", lambda *_: self._servers.get_servers(), ServerFilter)
|
||||||
self.add_collection("userJoinedServer", lambda *_: self._user_joined_servers.get_user_joined_servers())
|
|
||||||
self.add_collection(
|
self.add_collection(
|
||||||
"userJoinedVoiceChannel", lambda *_: self._user_joined_voice_channels.get_user_joined_voice_channels()
|
"userJoinedServer", lambda *_: self._user_joined_servers.get_user_joined_servers(), UserJoinedServerFilter
|
||||||
|
)
|
||||||
|
self.add_collection(
|
||||||
|
"userJoinedVoiceChannel",
|
||||||
|
lambda *_: self._user_joined_voice_channels.get_user_joined_voice_channels(),
|
||||||
|
UserJoinedVoiceChannelFilter,
|
||||||
)
|
)
|
||||||
self.add_collection("user", lambda *_: self._users.get_users(), UserFilter)
|
self.add_collection("user", lambda *_: self._users.get_users(), UserFilter)
|
||||||
|
@ -57,7 +57,7 @@ class BaseOnMemberRemoveEvent(OnMemberRemoveABC):
|
|||||||
self._user_joins.update_user_joined_server(join)
|
self._user_joins.update_user_joined_server(join)
|
||||||
self._db.save_changes()
|
self._db.save_changes()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._logger.error(__name__, f"Cannot get user {member.id}", e)
|
self._logger.error(__name__, f"Cannot remove user {member.id}", e)
|
||||||
|
|
||||||
@EventChecks.check_is_ready()
|
@EventChecks.check_is_ready()
|
||||||
async def on_member_remove(self, member: discord.Member):
|
async def on_member_remove(self, member: discord.Member):
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "kdb-web",
|
"name": "kdb-web",
|
||||||
"version": "0.3.dev162-3",
|
"version": "0.3.dev89",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
"update-version": "ts-node-esm update-version.ts",
|
"update-version": "ts-node-esm update-version.ts",
|
||||||
|
@ -168,14 +168,6 @@ export class AuthService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
discordCreateUser(code: string, state: string) {
|
|
||||||
return this.http.get<OAuthDTO>(`${this.appsettings.getApiURL()}/api/auth/discord/create-user?code=${code}&state=${state}`, {
|
|
||||||
headers: new HttpHeaders({
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
discordLogin(code: string, state: string): Observable<TokenDTO> {
|
discordLogin(code: string, state: string): Observable<TokenDTO> {
|
||||||
return this.http.get<TokenDTO>(`${this.appsettings.getApiURL()}/api/auth/discord/login?code=${code}&state=${state}`, {
|
return this.http.get<TokenDTO>(`${this.appsettings.getApiURL()}/api/auth/discord/login?code=${code}&state=${state}`, {
|
||||||
headers: new HttpHeaders({
|
headers: new HttpHeaders({
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"WebVersion": {
|
"WebVersion": {
|
||||||
"Major": "0",
|
"Major": "0",
|
||||||
"Minor": "3",
|
"Minor": "3",
|
||||||
"Micro": "dev162-2"
|
"Micro": "dev89"
|
||||||
},
|
},
|
||||||
"Themes": [
|
"Themes": [
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user