2021-09-08 22:01:10 +00:00
|
|
|
import os
|
|
|
|
import logging
|
2021-09-25 20:58:01 +00:00
|
|
|
import json
|
2022-04-14 12:33:53 +00:00
|
|
|
import typing as t
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2022-04-14 02:10:25 +00:00
|
|
|
from app.classes.controllers.roles_controller import RolesController
|
|
|
|
from app.classes.models.servers import HelperServers
|
2022-04-27 19:07:34 +00:00
|
|
|
from app.classes.models.server_stats import HelperServerStats
|
2022-04-14 02:10:25 +00:00
|
|
|
from app.classes.models.users import HelperUsers, ApiKeys
|
2022-03-23 02:50:12 +00:00
|
|
|
from app.classes.models.server_permissions import (
|
2022-04-14 02:10:25 +00:00
|
|
|
PermissionsServers,
|
|
|
|
EnumPermissionsServer,
|
2022-03-23 02:50:12 +00:00
|
|
|
)
|
2022-04-11 05:23:55 +00:00
|
|
|
from app.classes.shared.helpers import Helpers
|
2022-04-14 02:10:25 +00:00
|
|
|
from app.classes.shared.main_models import DatabaseShortcuts
|
2022-01-26 01:45:30 +00:00
|
|
|
|
2021-09-08 22:01:10 +00:00
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
2022-03-23 02:50:12 +00:00
|
|
|
|
2022-04-14 02:10:25 +00:00
|
|
|
class ServersController:
|
2022-04-11 05:23:55 +00:00
|
|
|
def __init__(self, servers_helper):
|
|
|
|
self.servers_helper = servers_helper
|
2021-09-29 18:57:04 +00:00
|
|
|
|
2022-03-23 06:06:13 +00:00
|
|
|
# **********************************************************************************
|
2021-09-08 22:01:10 +00:00
|
|
|
# Generic Servers Methods
|
2022-03-23 06:06:13 +00:00
|
|
|
# **********************************************************************************
|
2022-01-26 01:45:30 +00:00
|
|
|
def create_server(
|
2022-04-11 05:23:55 +00:00
|
|
|
self,
|
2022-01-26 01:45:30 +00:00
|
|
|
name: str,
|
|
|
|
server_uuid: str,
|
|
|
|
server_dir: str,
|
|
|
|
backup_path: str,
|
|
|
|
server_command: str,
|
|
|
|
server_file: str,
|
|
|
|
server_log_file: str,
|
|
|
|
server_stop: str,
|
2022-02-10 20:27:40 +00:00
|
|
|
server_type: str,
|
2022-05-05 00:32:09 +00:00
|
|
|
server_port: int = 25565,
|
2022-05-05 11:02:23 +00:00
|
|
|
server_host: str = "127.0.0.1",
|
2022-05-05 00:32:09 +00:00
|
|
|
) -> int:
|
|
|
|
"""Create a server in the database
|
|
|
|
|
|
|
|
Args:
|
|
|
|
name: The name of the server
|
|
|
|
server_uuid: This is the UUID of the server
|
|
|
|
server_dir: The directory where the server is located
|
|
|
|
backup_path: The path to the backup folder
|
|
|
|
server_command: The command to start the server
|
|
|
|
server_file: The name of the server file
|
|
|
|
server_log_file: The path to the server log file
|
|
|
|
server_stop: This is the command to stop the server
|
|
|
|
server_type: This is the type of server you're creating.
|
2022-05-05 11:02:23 +00:00
|
|
|
server_port: The port the server will be monitored on, defaults to 25565
|
|
|
|
server_host: The host the server will be monitored on, defaults to 127.0.0.1
|
2022-05-05 00:32:09 +00:00
|
|
|
|
|
|
|
Returns:
|
|
|
|
int: The new server's id
|
|
|
|
|
|
|
|
Raises:
|
|
|
|
PeeweeException: If the server already exists
|
|
|
|
"""
|
|
|
|
return HelperServers.create_server(
|
2022-01-26 01:45:30 +00:00
|
|
|
name,
|
|
|
|
server_uuid,
|
|
|
|
server_dir,
|
|
|
|
backup_path,
|
|
|
|
server_command,
|
|
|
|
server_file,
|
|
|
|
server_log_file,
|
|
|
|
server_stop,
|
2022-02-10 20:27:40 +00:00
|
|
|
server_type,
|
2022-03-23 02:50:12 +00:00
|
|
|
server_port,
|
2022-05-05 11:02:23 +00:00
|
|
|
server_host,
|
2022-03-23 02:50:12 +00:00
|
|
|
)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2021-11-21 10:52:29 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_server_obj(server_id):
|
2022-04-14 02:10:25 +00:00
|
|
|
return HelperServers.get_server_obj(server_id)
|
2021-11-21 10:52:29 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def update_server(server_obj):
|
2022-04-14 02:10:25 +00:00
|
|
|
return HelperServers.update_server(server_obj)
|
2021-11-21 10:52:29 +00:00
|
|
|
|
2022-03-04 00:36:36 +00:00
|
|
|
@staticmethod
|
|
|
|
def set_download(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.set_download(server_id)
|
2022-03-04 00:36:36 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def finish_download(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.finish_download(server_id)
|
2022-03-04 00:36:36 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def get_download_status(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.get_download_status(server_id)
|
2022-03-04 00:36:36 +00:00
|
|
|
|
2022-04-11 05:23:55 +00:00
|
|
|
def remove_server(self, server_id):
|
2022-04-14 02:10:25 +00:00
|
|
|
roles_list = PermissionsServers.get_roles_from_server(server_id)
|
2021-09-29 18:57:04 +00:00
|
|
|
for role in roles_list:
|
|
|
|
role_id = role.role_id
|
2022-04-14 02:10:25 +00:00
|
|
|
role_data = RolesController.get_role_with_servers(role_id)
|
2022-03-23 02:50:12 +00:00
|
|
|
role_data["servers"] = {server_id}
|
2022-04-14 02:10:25 +00:00
|
|
|
PermissionsServers.delete_roles_permissions(role_id, role_data["servers"])
|
|
|
|
PermissionsServers.remove_roles_of_server(server_id)
|
2022-04-11 05:23:55 +00:00
|
|
|
self.servers_helper.remove_server(server_id)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def get_server_data_by_id(server_id):
|
2022-04-14 02:10:25 +00:00
|
|
|
return HelperServers.get_server_data_by_id(server_id)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2022-03-23 06:06:13 +00:00
|
|
|
# **********************************************************************************
|
2021-09-08 22:01:10 +00:00
|
|
|
# Servers Methods
|
2022-03-23 06:06:13 +00:00
|
|
|
# **********************************************************************************
|
2021-09-08 22:01:10 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_all_defined_servers():
|
2022-04-14 02:10:25 +00:00
|
|
|
return HelperServers.get_all_defined_servers()
|
2021-09-08 22:01:10 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def get_authorized_servers(user_id):
|
2022-04-14 12:33:53 +00:00
|
|
|
server_data: t.List[t.Dict[str, t.Any]] = []
|
2022-04-14 02:10:25 +00:00
|
|
|
user_roles = HelperUsers.user_role_query(user_id)
|
|
|
|
for user in user_roles:
|
|
|
|
role_servers = PermissionsServers.get_role_servers_from_role_id(
|
|
|
|
user.role_id
|
|
|
|
)
|
2021-09-08 22:01:10 +00:00
|
|
|
for role in role_servers:
|
2022-04-14 02:10:25 +00:00
|
|
|
server_data.append(HelperServers.get_server_data_by_id(role.server_id))
|
2021-09-08 22:01:10 +00:00
|
|
|
|
|
|
|
return server_data
|
|
|
|
|
2022-04-14 12:33:53 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_authorized_users(server_id: str):
|
|
|
|
user_ids: t.Set[int] = set()
|
2022-05-05 00:32:09 +00:00
|
|
|
roles_list = PermissionsServers.get_roles_from_server(server_id)
|
2022-04-14 12:33:53 +00:00
|
|
|
for role in roles_list:
|
2022-05-05 00:32:09 +00:00
|
|
|
role_users = HelperUsers.get_users_from_role(role.role_id)
|
2022-04-14 12:33:53 +00:00
|
|
|
for user_role in role_users:
|
|
|
|
user_ids.add(user_role.user_id)
|
|
|
|
|
2022-05-05 00:32:09 +00:00
|
|
|
for user_id in HelperUsers.get_super_user_list():
|
2022-04-14 12:33:53 +00:00
|
|
|
user_ids.add(user_id)
|
|
|
|
|
|
|
|
return user_ids
|
|
|
|
|
2021-09-08 22:01:10 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_all_servers_stats():
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.get_all_servers_stats()
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2022-01-15 00:23:50 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_authorized_servers_stats_api_key(api_key: ApiKeys):
|
|
|
|
server_data = []
|
2022-04-14 02:10:25 +00:00
|
|
|
authorized_servers = ServersController.get_authorized_servers(
|
2022-05-20 15:07:12 +00:00
|
|
|
api_key.user_id # TODO: API key authorized servers?
|
2022-03-23 02:50:12 +00:00
|
|
|
)
|
2022-01-15 00:23:50 +00:00
|
|
|
|
2022-04-14 02:10:25 +00:00
|
|
|
for server in authorized_servers:
|
2022-04-27 19:07:34 +00:00
|
|
|
latest = HelperServerStats.get_latest_server_stats(server.get("server_id"))
|
2022-04-14 02:10:25 +00:00
|
|
|
key_permissions = PermissionsServers.get_api_key_permissions_list(
|
|
|
|
api_key, server.get("server_id")
|
2022-03-23 02:50:12 +00:00
|
|
|
)
|
2022-04-14 02:10:25 +00:00
|
|
|
if EnumPermissionsServer.COMMANDS in key_permissions:
|
2022-01-15 00:23:50 +00:00
|
|
|
user_command_permission = True
|
|
|
|
else:
|
|
|
|
user_command_permission = False
|
2022-03-23 02:50:12 +00:00
|
|
|
server_data.append(
|
|
|
|
{
|
2022-04-14 02:10:25 +00:00
|
|
|
"server_data": server,
|
|
|
|
"stats": DatabaseShortcuts.return_rows(latest)[0],
|
2022-03-23 02:50:12 +00:00
|
|
|
"user_command_permission": user_command_permission,
|
|
|
|
}
|
|
|
|
)
|
2022-01-15 00:23:50 +00:00
|
|
|
return server_data
|
|
|
|
|
2021-09-08 22:01:10 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_authorized_servers_stats(user_id):
|
|
|
|
server_data = []
|
2022-04-14 02:10:25 +00:00
|
|
|
authorized_servers = ServersController.get_authorized_servers(user_id)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2022-04-14 02:10:25 +00:00
|
|
|
for server in authorized_servers:
|
2022-04-27 19:07:34 +00:00
|
|
|
latest = HelperServerStats.get_latest_server_stats(server.get("server_id"))
|
2022-01-15 00:23:50 +00:00
|
|
|
# TODO
|
2022-04-14 02:10:25 +00:00
|
|
|
user_permissions = PermissionsServers.get_user_id_permissions_list(
|
|
|
|
user_id, server.get("server_id")
|
2022-03-23 02:50:12 +00:00
|
|
|
)
|
2022-04-14 02:10:25 +00:00
|
|
|
if EnumPermissionsServer.COMMANDS in user_permissions:
|
2021-09-08 22:01:10 +00:00
|
|
|
user_command_permission = True
|
|
|
|
else:
|
|
|
|
user_command_permission = False
|
2022-03-23 02:50:12 +00:00
|
|
|
server_data.append(
|
|
|
|
{
|
2022-04-14 02:10:25 +00:00
|
|
|
"server_data": server,
|
|
|
|
"stats": DatabaseShortcuts.return_rows(latest)[0],
|
2022-03-23 02:50:12 +00:00
|
|
|
"user_command_permission": user_command_permission,
|
|
|
|
}
|
|
|
|
)
|
2022-01-15 00:23:50 +00:00
|
|
|
|
2021-09-08 22:01:10 +00:00
|
|
|
return server_data
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def get_server_friendly_name(server_id):
|
2022-04-14 02:10:25 +00:00
|
|
|
return HelperServers.get_server_friendly_name(server_id)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2022-03-23 06:06:13 +00:00
|
|
|
# **********************************************************************************
|
2021-09-08 22:01:10 +00:00
|
|
|
# Servers_Stats Methods
|
2022-03-23 06:06:13 +00:00
|
|
|
# **********************************************************************************
|
2021-09-08 22:01:10 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_server_stats_by_id(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.get_server_stats_by_id(server_id)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def server_id_exists(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.server_id_exists(server_id)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2022-02-26 17:29:07 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_server_type_by_id(server_id):
|
2022-04-14 02:10:25 +00:00
|
|
|
return HelperServers.get_server_type_by_id(server_id)
|
2022-02-26 17:29:07 +00:00
|
|
|
|
2021-09-08 22:01:10 +00:00
|
|
|
@staticmethod
|
2022-01-15 00:23:50 +00:00
|
|
|
def server_id_authorized(server_id_a, user_id):
|
2022-04-14 02:10:25 +00:00
|
|
|
user_roles = HelperUsers.user_role_query(user_id)
|
2021-09-08 22:01:10 +00:00
|
|
|
for role in user_roles:
|
2022-04-14 02:10:25 +00:00
|
|
|
for server_id_b in PermissionsServers.get_role_servers_from_role_id(
|
2022-03-23 02:50:12 +00:00
|
|
|
role.role_id
|
|
|
|
):
|
2022-01-19 21:22:22 +00:00
|
|
|
if str(server_id_a) == str(server_id_b.server_id):
|
2022-01-15 00:23:50 +00:00
|
|
|
return True
|
|
|
|
return False
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2022-01-28 01:43:23 +00:00
|
|
|
@staticmethod
|
|
|
|
def is_crashed(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.is_crashed(server_id)
|
2022-01-28 01:43:23 +00:00
|
|
|
|
2022-01-15 00:23:50 +00:00
|
|
|
@staticmethod
|
|
|
|
def server_id_authorized_api_key(server_id: str, api_key: ApiKeys) -> bool:
|
|
|
|
# TODO
|
2022-04-14 02:10:25 +00:00
|
|
|
return ServersController.server_id_authorized(server_id, api_key.user.user_id)
|
2022-01-15 00:23:50 +00:00
|
|
|
# There is no view server permission
|
|
|
|
# permission_helper.both_have_perm(api_key)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2022-04-27 19:07:34 +00:00
|
|
|
@staticmethod
|
|
|
|
def set_update(server_id, value):
|
|
|
|
return HelperServerStats.set_update(server_id, value)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
|
|
|
@staticmethod
|
2022-04-14 02:10:25 +00:00
|
|
|
def get_ttl_without_player(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.get_ttl_without_player(server_id)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def can_stop_no_players(server_id, time_limit):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.can_stop_no_players(server_id, time_limit)
|
2021-09-08 22:01:10 +00:00
|
|
|
|
2022-04-27 19:07:34 +00:00
|
|
|
@staticmethod
|
|
|
|
def set_waiting_start(server_id, value):
|
|
|
|
HelperServerStats.set_waiting_start(server_id, value)
|
2021-09-21 19:13:17 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def get_waiting_start(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.get_waiting_start(server_id)
|
2021-09-29 18:57:04 +00:00
|
|
|
|
2022-01-10 19:58:38 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_update_status(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
return HelperServerStats.get_update_status(server_id)
|
2022-01-10 19:58:38 +00:00
|
|
|
|
2022-03-23 06:06:13 +00:00
|
|
|
# **********************************************************************************
|
2021-09-08 22:01:10 +00:00
|
|
|
# Servers Helpers Methods
|
2022-03-23 06:06:13 +00:00
|
|
|
# **********************************************************************************
|
2021-09-08 22:01:10 +00:00
|
|
|
@staticmethod
|
|
|
|
def get_banned_players(server_id):
|
2022-04-27 19:07:34 +00:00
|
|
|
stats = HelperServerStats.get_server_stats_by_id(server_id)
|
2022-03-23 02:50:12 +00:00
|
|
|
server_path = stats["server_id"]["path"]
|
|
|
|
path = os.path.join(server_path, "banned-players.json")
|
2021-09-08 22:01:10 +00:00
|
|
|
|
|
|
|
try:
|
2022-03-23 02:50:12 +00:00
|
|
|
with open(
|
2022-04-11 05:23:55 +00:00
|
|
|
Helpers.get_os_understandable_path(path), encoding="utf-8"
|
2022-03-23 02:50:12 +00:00
|
|
|
) as file:
|
2021-09-08 22:01:10 +00:00
|
|
|
content = file.read()
|
|
|
|
file.close()
|
|
|
|
except Exception as ex:
|
2022-03-23 02:50:12 +00:00
|
|
|
print(ex)
|
2021-09-08 22:01:10 +00:00
|
|
|
return None
|
2021-09-29 18:57:04 +00:00
|
|
|
|
2021-09-08 22:01:10 +00:00
|
|
|
return json.loads(content)
|
2021-09-29 18:57:04 +00:00
|
|
|
|
2021-09-08 22:01:10 +00:00
|
|
|
def check_for_old_logs(self):
|
2022-04-14 02:10:25 +00:00
|
|
|
servers = HelperServers.get_all_defined_servers()
|
2021-09-08 22:01:10 +00:00
|
|
|
for server in servers:
|
2022-03-23 02:50:12 +00:00
|
|
|
logs_path = os.path.split(server["log_path"])[0]
|
|
|
|
latest_log_file = os.path.split(server["log_path"])[1]
|
|
|
|
logs_delete_after = int(server["logs_delete_after"])
|
2021-09-08 22:01:10 +00:00
|
|
|
if logs_delete_after == 0:
|
|
|
|
continue
|
|
|
|
|
2022-03-23 02:50:12 +00:00
|
|
|
log_files = list(
|
|
|
|
filter(lambda val: val != latest_log_file, os.listdir(logs_path))
|
|
|
|
)
|
2021-09-08 22:01:10 +00:00
|
|
|
for log_file in log_files:
|
|
|
|
log_file_path = os.path.join(logs_path, log_file)
|
2022-04-11 05:23:55 +00:00
|
|
|
if Helpers.check_file_exists(
|
2022-03-23 02:50:12 +00:00
|
|
|
log_file_path
|
2022-04-11 05:23:55 +00:00
|
|
|
) and Helpers.is_file_older_than_x_days(
|
2022-03-23 02:50:12 +00:00
|
|
|
log_file_path, logs_delete_after
|
|
|
|
):
|
2021-09-08 22:01:10 +00:00
|
|
|
os.remove(log_file_path)
|