Added GameServer & ApiKey logic #238
This commit is contained in:
parent
91b2cf7546
commit
15dfc3f47c
@ -24,6 +24,5 @@ type UserJoinedGameServerMutation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
input UserJoinedGameServerInput {
|
input UserJoinedGameServerInput {
|
||||||
gameServer: String!
|
|
||||||
userId: ID!
|
userId: ID!
|
||||||
}
|
}
|
@ -1,12 +1,19 @@
|
|||||||
|
import hashlib
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from cpl_core.database.context import DatabaseContextABC
|
from cpl_core.database.context import DatabaseContextABC
|
||||||
from cpl_core.logging import LoggerABC
|
from cpl_core.logging import LoggerABC
|
||||||
from cpl_discord.service import DiscordBotServiceABC
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
|
from flask import request
|
||||||
|
|
||||||
|
from bot_api.configuration.authentication_settings import AuthenticationSettings
|
||||||
|
from bot_data.abc.api_key_repository_abc import ApiKeyRepositoryABC
|
||||||
|
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
|
||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
from bot_data.abc.user_joined_game_server_repository_abc import UserJoinedGameServerRepositoryABC
|
from bot_data.abc.user_joined_game_server_repository_abc import UserJoinedGameServerRepositoryABC
|
||||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
||||||
|
from bot_data.model.api_key import ApiKey
|
||||||
from bot_data.model.user_joined_game_server import UserJoinedGameServer
|
from bot_data.model.user_joined_game_server import UserJoinedGameServer
|
||||||
from bot_data.model.user_role_enum import UserRoleEnum
|
from bot_data.model.user_role_enum import UserRoleEnum
|
||||||
from bot_graphql.abc.query_abc import QueryABC
|
from bot_graphql.abc.query_abc import QueryABC
|
||||||
@ -23,9 +30,12 @@ class UserJoinedGameServerMutation(QueryABC):
|
|||||||
servers: ServerRepositoryABC,
|
servers: ServerRepositoryABC,
|
||||||
users: UserRepositoryABC,
|
users: UserRepositoryABC,
|
||||||
user_joined_game_servers: UserJoinedGameServerRepositoryABC,
|
user_joined_game_servers: UserJoinedGameServerRepositoryABC,
|
||||||
|
api_keys: ApiKeyRepositoryABC,
|
||||||
|
game_servers: GameServerRepositoryABC,
|
||||||
bot: DiscordBotServiceABC,
|
bot: DiscordBotServiceABC,
|
||||||
db: DatabaseContextABC,
|
db: DatabaseContextABC,
|
||||||
permissions: PermissionService,
|
permissions: PermissionService,
|
||||||
|
auth_settings: AuthenticationSettings,
|
||||||
):
|
):
|
||||||
QueryABC.__init__(self, "UserJoinedGameServerMutation")
|
QueryABC.__init__(self, "UserJoinedGameServerMutation")
|
||||||
|
|
||||||
@ -34,13 +44,33 @@ class UserJoinedGameServerMutation(QueryABC):
|
|||||||
self._servers = servers
|
self._servers = servers
|
||||||
self._users = users
|
self._users = users
|
||||||
self._user_joined_game_servers = user_joined_game_servers
|
self._user_joined_game_servers = user_joined_game_servers
|
||||||
|
self._api_keys = api_keys
|
||||||
|
self._game_servers = game_servers
|
||||||
self._bot = bot
|
self._bot = bot
|
||||||
self._db = db
|
self._db = db
|
||||||
self._permissions = permissions
|
self._permissions = permissions
|
||||||
|
self._auth_settings = auth_settings
|
||||||
|
|
||||||
self.set_field("userJoined", self.resolve_user_joined)
|
self.set_field("userJoined", self.resolve_user_joined)
|
||||||
self.set_field("userLeaved", self.resolve_user_leaved)
|
self.set_field("userLeaved", self.resolve_user_leaved)
|
||||||
|
|
||||||
|
def _get_api_key_str(self, api_key: ApiKey) -> str:
|
||||||
|
return hashlib.sha256(
|
||||||
|
f"{api_key.identifier}:{api_key.key}+{self._auth_settings.secret_key}".encode("utf-8")
|
||||||
|
).hexdigest()
|
||||||
|
|
||||||
|
def _get_api_key(self) -> Optional[ApiKey]:
|
||||||
|
authorization = request.headers.get("Authorization").split()
|
||||||
|
if len(authorization) != 2:
|
||||||
|
return None
|
||||||
|
|
||||||
|
api_key_str = authorization[1]
|
||||||
|
return (
|
||||||
|
self._api_keys.get_api_keys()
|
||||||
|
.where(lambda key: self._get_api_key_str(key) == api_key_str)
|
||||||
|
.first_or_default()
|
||||||
|
)
|
||||||
|
|
||||||
def resolve_user_joined(self, *_, input: dict):
|
def resolve_user_joined(self, *_, input: dict):
|
||||||
user = self._users.get_user_by_id(input["userId"])
|
user = self._users.get_user_by_id(input["userId"])
|
||||||
self._can_user_mutate_data(user.server, UserRoleEnum.admin)
|
self._can_user_mutate_data(user.server, UserRoleEnum.admin)
|
||||||
@ -53,7 +83,9 @@ class UserJoinedGameServerMutation(QueryABC):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
new = UserJoinedGameServer(user, input["gameServer"], datetime.now())
|
api_key = self._get_api_key()
|
||||||
|
game_server = self._game_servers.get_game_server_by_api_key_id(api_key.id)
|
||||||
|
new = UserJoinedGameServer(user, game_server, datetime.now())
|
||||||
self._user_joined_game_servers.add_user_joined_game_server(new)
|
self._user_joined_game_servers.add_user_joined_game_server(new)
|
||||||
self._db.save_changes()
|
self._db.save_changes()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user