mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Merge branch 'dev' into bugfix/backup-restore-uuid
This commit is contained in:
commit
c1c5b5b989
@ -3,11 +3,12 @@
|
||||
### New features
|
||||
TBD
|
||||
### Bug fixes
|
||||
TBD
|
||||
- Fix migrator issues when jumping versions ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/734))
|
||||
### Tweaks
|
||||
TBD
|
||||
- Clean up remaining http handler references ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/733))
|
||||
- Remove version disclosure on login page ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/737))
|
||||
### Lang
|
||||
TBD
|
||||
- Update `it_IT, cs_CS` ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/739) | [Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/742))
|
||||
<br><br>
|
||||
|
||||
## --- [4.3.1] - 2024/03/18
|
||||
|
@ -372,11 +372,11 @@ class MigrationManager(object):
|
||||
Create migrator
|
||||
"""
|
||||
migrator = Migrator(self.database)
|
||||
# Removing the up_one to prevent running all
|
||||
# migrations each time we got a new one.
|
||||
# It's handled by migration.up() function.
|
||||
# for name in self.done:
|
||||
# self.up_one(name, migrator, True)
|
||||
# Running false migrations to retrives the schemes of
|
||||
# the precedents created tables in the table_dict element
|
||||
# It's useful to run the new migrations
|
||||
for name in self.done:
|
||||
self.up_one(name, migrator, True)
|
||||
return migrator
|
||||
|
||||
def compile(self, name, migrate="", rollback=""):
|
||||
|
@ -1403,7 +1403,7 @@ class PanelHandler(BaseHandler):
|
||||
self.controller.management.add_to_audit_log(
|
||||
exec_user["user_id"],
|
||||
f"Removed user {target_user['username']} (UID:{user_id})",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
self.redirect("/panel/panel_config")
|
||||
|
@ -228,7 +228,7 @@ class PublicHandler(BaseHandler):
|
||||
)
|
||||
# log this login
|
||||
self.controller.management.add_to_audit_log(
|
||||
user_data.user_id, "Logged in", 0, self.get_remote_ip()
|
||||
user_data.user_id, "Logged in", None, self.get_remote_ip()
|
||||
)
|
||||
|
||||
return self.finish_json(
|
||||
@ -254,7 +254,7 @@ class PublicHandler(BaseHandler):
|
||||
)
|
||||
# log this failed login attempt
|
||||
self.controller.management.add_to_audit_log(
|
||||
user_data.user_id, "Tried to log in", 0, self.get_remote_ip()
|
||||
user_data.user_id, "Tried to log in", None, self.get_remote_ip()
|
||||
)
|
||||
return self.finish_json(
|
||||
403,
|
||||
|
@ -101,7 +101,7 @@ class ApiAuthLoginHandler(BaseApiHandler):
|
||||
|
||||
# log this login
|
||||
self.controller.management.add_to_audit_log(
|
||||
user_data.user_id, "logged in via the API", 0, self.get_remote_ip()
|
||||
user_data.user_id, "logged in via the API", None, self.get_remote_ip()
|
||||
)
|
||||
|
||||
self.finish_json(
|
||||
@ -119,7 +119,7 @@ class ApiAuthLoginHandler(BaseApiHandler):
|
||||
else:
|
||||
# log this failed login attempt
|
||||
self.controller.management.add_to_audit_log(
|
||||
user_data.user_id, "Tried to log in", 0, self.get_remote_ip()
|
||||
user_data.user_id, "Tried to log in", None, self.get_remote_ip()
|
||||
)
|
||||
self.finish_json(
|
||||
401,
|
||||
|
@ -9,7 +9,6 @@ from app.classes.web.base_api_handler import BaseApiHandler
|
||||
config_json_schema = {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"http_port": {"type": "integer"},
|
||||
"https_port": {"type": "integer"},
|
||||
"language": {
|
||||
"type": "string",
|
||||
@ -129,7 +128,7 @@ class ApiCraftyConfigIndexHandler(BaseApiHandler):
|
||||
self.controller.management.add_to_audit_log(
|
||||
user["user_id"],
|
||||
"edited config.json",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
|
||||
@ -226,7 +225,7 @@ class ApiCraftyCustomizeIndexHandler(BaseApiHandler):
|
||||
self.controller.management.add_to_audit_log(
|
||||
user["user_id"],
|
||||
f"customized login photo: {data['photo']}/{data['opacity']}",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
self.controller.management.set_login_opacity(int(data["opacity"]))
|
||||
|
@ -109,7 +109,7 @@ class ApiCraftyConfigServerDirHandler(BaseApiHandler):
|
||||
self.controller.management.add_to_audit_log(
|
||||
auth_data[4]["user_id"],
|
||||
f"updated master servers dir to {new_dir}/servers",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
|
||||
|
@ -161,7 +161,7 @@ class ApiRolesIndexHandler(BaseApiHandler):
|
||||
self.controller.management.add_to_audit_log(
|
||||
user["user_id"],
|
||||
f"created role {role_name} (RID:{role_id})",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
|
||||
|
@ -112,7 +112,7 @@ class ApiRolesRoleIndexHandler(BaseApiHandler):
|
||||
self.controller.management.add_to_audit_log(
|
||||
user["user_id"],
|
||||
f"deleted role with ID {role_id}",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
|
||||
@ -172,7 +172,7 @@ class ApiRolesRoleIndexHandler(BaseApiHandler):
|
||||
self.controller.management.add_to_audit_log(
|
||||
user["user_id"],
|
||||
f"modified role with ID {role_id}",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
|
||||
|
@ -177,7 +177,7 @@ class ApiUsersIndexHandler(BaseApiHandler):
|
||||
self.controller.management.add_to_audit_log(
|
||||
user["user_id"],
|
||||
f"added user {username} (UID:{user_id}) with roles {roles}",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
|
||||
|
@ -43,7 +43,7 @@ class ApiUsersUserKeyHandler(BaseApiHandler):
|
||||
auth_data[4]["user_id"],
|
||||
f"Generated a new API token for the key {key.name} "
|
||||
f"from user with UID: {key.user_id}",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
data_key = self.controller.authentication.generate(
|
||||
@ -173,7 +173,7 @@ class ApiUsersUserKeyHandler(BaseApiHandler):
|
||||
f"Added API key {data['name']} with crafty permissions "
|
||||
f"{data['crafty_permissions_mask']}"
|
||||
f" and {data['server_permissions_mask']} for user with UID: {user_id}",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
self.finish_json(200, {"status": "ok", "data": {"id": key_id}})
|
||||
@ -233,7 +233,7 @@ class ApiUsersUserKeyHandler(BaseApiHandler):
|
||||
auth_data[4]["user_id"],
|
||||
f"Removed API key {target_key} "
|
||||
f"(ID: {key_id}) from user {auth_data[4]['user_id']}",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
|
||||
|
@ -94,7 +94,7 @@ class ApiUsersUserIndexHandler(BaseApiHandler):
|
||||
self.controller.management.add_to_audit_log(
|
||||
user["user_id"],
|
||||
f"deleted the user {user_id}",
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
|
||||
@ -283,7 +283,7 @@ class ApiUsersUserIndexHandler(BaseApiHandler):
|
||||
f"edited user {user_obj.username} (UID: {user_id})"
|
||||
f"with roles {user_obj.roles}"
|
||||
),
|
||||
server_id=0,
|
||||
server_id=None,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
|
||||
|
@ -98,7 +98,6 @@ class Webserver:
|
||||
# let's verify we have an SSL cert
|
||||
self.helper.create_self_signed_cert()
|
||||
|
||||
http_port = self.helper.get_setting("http_port")
|
||||
https_port = self.helper.get_setting("https_port")
|
||||
|
||||
debug_errors = self.helper.get_setting("show_errors")
|
||||
@ -110,9 +109,6 @@ class Webserver:
|
||||
cookie_secret = self.helper.random_string_generator(32)
|
||||
HelpersManagement.set_cookie_secret(cookie_secret)
|
||||
|
||||
if not http_port and http_port != 0:
|
||||
http_port = 8000
|
||||
|
||||
if not https_port:
|
||||
https_port = 8443
|
||||
|
||||
@ -125,7 +121,7 @@ class Webserver:
|
||||
),
|
||||
}
|
||||
|
||||
logger.info(f"Starting Web Server on ports http:{http_port} https:{https_port}")
|
||||
logger.info(f"Starting Web Server on ports https:{https_port}")
|
||||
|
||||
asyncio.set_event_loop(asyncio.new_event_loop())
|
||||
|
||||
|
@ -55,7 +55,7 @@ class WebSocketHandler(tornado.websocket.WebSocketHandler):
|
||||
self.controller.management.add_to_audit_log_raw(
|
||||
"unknown",
|
||||
0,
|
||||
0,
|
||||
None,
|
||||
"Someone tried to connect via WebSocket without proper authentication",
|
||||
self.get_remote_ip(),
|
||||
)
|
||||
|
@ -111,8 +111,7 @@
|
||||
</div>
|
||||
|
||||
<div class="text-block text-center my-3">
|
||||
<span class="text-small font-weight-semibold"><a href="https://craftycontrol.com/">Crafty Control
|
||||
{{data['version'] }}</a> </span>
|
||||
<span class="text-small font-weight-semibold"><a href="https://craftycontrol.com/">Crafty Control</a> </span>
|
||||
</div>
|
||||
|
||||
<div class="text-block text-center my-3">
|
||||
|
@ -54,9 +54,6 @@ def migrate(migrator: Migrator, database, **kwargs):
|
||||
database = db
|
||||
|
||||
try:
|
||||
logger.info("Migrating Data from Int to UUID (Type Change)")
|
||||
Console.info("Migrating Data from Int to UUID (Type Change)")
|
||||
|
||||
# Changes on Server Table
|
||||
migrator.alter_column_type(
|
||||
Servers,
|
||||
@ -87,11 +84,6 @@ def migrate(migrator: Migrator, database, **kwargs):
|
||||
),
|
||||
)
|
||||
|
||||
migrator.run()
|
||||
|
||||
logger.info("Migrating Data from Int to UUID (Type Change) : SUCCESS")
|
||||
Console.info("Migrating Data from Int to UUID (Type Change) : SUCCESS")
|
||||
|
||||
except Exception as ex:
|
||||
logger.error("Error while migrating Data from Int to UUID (Type Change)")
|
||||
logger.error(ex)
|
||||
@ -101,118 +93,6 @@ def migrate(migrator: Migrator, database, **kwargs):
|
||||
last_migration.delete()
|
||||
return
|
||||
|
||||
try:
|
||||
logger.info("Migrating Data from Int to UUID (Foreign Keys)")
|
||||
Console.info("Migrating Data from Int to UUID (Foreign Keys)")
|
||||
# Changes on Audit Log Table
|
||||
for audit_log in AuditLog.select():
|
||||
old_server_id = audit_log.server_id_id
|
||||
if old_server_id == "0" or old_server_id is None:
|
||||
server_uuid = None
|
||||
else:
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
AuditLog.update(server_id=server_uuid).where(
|
||||
AuditLog.audit_id == audit_log.audit_id
|
||||
).execute()
|
||||
|
||||
# Changes on Webhooks Log Table
|
||||
for webhook in Webhooks.select():
|
||||
old_server_id = webhook.server_id_id
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
Webhooks.update(server_id=server_uuid).where(
|
||||
Webhooks.id == webhook.id
|
||||
).execute()
|
||||
|
||||
# Changes on Schedules Log Table
|
||||
for schedule in Schedules.select():
|
||||
old_server_id = schedule.server_id_id
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
Schedules.update(server_id=server_uuid).where(
|
||||
Schedules.schedule_id == schedule.schedule_id
|
||||
).execute()
|
||||
|
||||
# Changes on Backups Log Table
|
||||
for backup in Backups.select():
|
||||
old_server_id = backup.server_id_id
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
Backups.update(server_id=server_uuid).where(
|
||||
Backups.server_id == old_server_id
|
||||
).execute()
|
||||
|
||||
# Changes on RoleServers Log Table
|
||||
for role_servers in RoleServers.select():
|
||||
old_server_id = role_servers.server_id_id
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
RoleServers.update(server_id=server_uuid).where(
|
||||
RoleServers.role_id == role_servers.id
|
||||
and RoleServers.server_id == old_server_id
|
||||
).execute()
|
||||
|
||||
logger.info("Migrating Data from Int to UUID (Foreign Keys) : SUCCESS")
|
||||
Console.info("Migrating Data from Int to UUID (Foreign Keys) : SUCCESS")
|
||||
|
||||
except Exception as ex:
|
||||
logger.error("Error while migrating Data from Int to UUID (Foreign Keys)")
|
||||
logger.error(ex)
|
||||
Console.error("Error while migrating Data from Int to UUID (Foreign Keys)")
|
||||
Console.error(ex)
|
||||
last_migration = MigrateHistory.get_by_id(MigrateHistory.select().count())
|
||||
last_migration.delete()
|
||||
return
|
||||
|
||||
try:
|
||||
logger.info("Migrating Data from Int to UUID (Primary Keys)")
|
||||
Console.info("Migrating Data from Int to UUID (Primary Keys)")
|
||||
# Migrating servers from the old id type to the new one
|
||||
for server in Servers.select():
|
||||
Servers.update(server_id=server.server_uuid).where(
|
||||
Servers.server_id == server.server_id
|
||||
).execute()
|
||||
|
||||
logger.info("Migrating Data from Int to UUID (Primary Keys) : SUCCESS")
|
||||
Console.info("Migrating Data from Int to UUID (Primary Keys) : SUCCESS")
|
||||
|
||||
except Exception as ex:
|
||||
logger.error("Error while migrating Data from Int to UUID (Primary Keys)")
|
||||
logger.error(ex)
|
||||
Console.error("Error while migrating Data from Int to UUID (Primary Keys)")
|
||||
Console.error(ex)
|
||||
last_migration = MigrateHistory.get_by_id(MigrateHistory.select().count())
|
||||
last_migration.delete()
|
||||
return
|
||||
|
||||
# Changes on Server Table
|
||||
logger.info("Migrating Data from Int to UUID (Removing UUID Field from Servers)")
|
||||
Console.info("Migrating Data from Int to UUID (Removing UUID Field from Servers)")
|
||||
migrator.drop_columns("servers", ["server_uuid"])
|
||||
migrator.run()
|
||||
logger.info(
|
||||
"Migrating Data from Int to UUID (Removing UUID Field from Servers) : SUCCESS"
|
||||
)
|
||||
Console.info(
|
||||
"Migrating Data from Int to UUID (Removing UUID Field from Servers) : SUCCESS"
|
||||
)
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
326
app/migrations/20240217_rework_servers_uuid_part2.py
Normal file
326
app/migrations/20240217_rework_servers_uuid_part2.py
Normal file
@ -0,0 +1,326 @@
|
||||
import datetime
|
||||
import uuid
|
||||
import peewee
|
||||
import logging
|
||||
|
||||
from app.classes.shared.console import Console
|
||||
from app.classes.shared.migration import Migrator, MigrateHistory
|
||||
from app.classes.models.management import (
|
||||
AuditLog,
|
||||
Webhooks,
|
||||
Schedules,
|
||||
Backups,
|
||||
)
|
||||
from app.classes.models.server_permissions import RoleServers
|
||||
from app.classes.models.base_model import BaseModel
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def migrate(migrator: Migrator, database, **kwargs):
|
||||
"""
|
||||
Write your migrations here.
|
||||
"""
|
||||
db = database
|
||||
|
||||
# **********************************************************************************
|
||||
# Servers New Model from Old (easier to migrate without dunmping Database)
|
||||
# **********************************************************************************
|
||||
class Servers(peewee.Model):
|
||||
server_id = peewee.CharField(primary_key=True, default=str(uuid.uuid4()))
|
||||
created = peewee.DateTimeField(default=datetime.datetime.now)
|
||||
server_uuid = peewee.CharField(default="", index=True)
|
||||
server_name = peewee.CharField(default="Server", index=True)
|
||||
path = peewee.CharField(default="")
|
||||
backup_path = peewee.CharField(default="")
|
||||
executable = peewee.CharField(default="")
|
||||
log_path = peewee.CharField(default="")
|
||||
execution_command = peewee.CharField(default="")
|
||||
auto_start = peewee.BooleanField(default=0)
|
||||
auto_start_delay = peewee.IntegerField(default=10)
|
||||
crash_detection = peewee.BooleanField(default=0)
|
||||
stop_command = peewee.CharField(default="stop")
|
||||
executable_update_url = peewee.CharField(default="")
|
||||
server_ip = peewee.CharField(default="127.0.0.1")
|
||||
server_port = peewee.IntegerField(default=25565)
|
||||
logs_delete_after = peewee.IntegerField(default=0)
|
||||
type = peewee.CharField(default="minecraft-java")
|
||||
show_status = peewee.BooleanField(default=1)
|
||||
created_by = peewee.IntegerField(default=-100)
|
||||
shutdown_timeout = peewee.IntegerField(default=60)
|
||||
ignored_exits = peewee.CharField(default="0")
|
||||
|
||||
class Meta:
|
||||
table_name = "servers"
|
||||
database = db
|
||||
|
||||
this_migration = MigrateHistory.get_or_none(
|
||||
MigrateHistory.name == "20240217_rework_servers_uuid_part2"
|
||||
)
|
||||
if this_migration is not None:
|
||||
Console.debug("Update database already done, skipping this part")
|
||||
return
|
||||
else:
|
||||
servers_columns = db.get_columns("servers")
|
||||
if not any(
|
||||
column_data.name == "server_uuid" for column_data in servers_columns
|
||||
):
|
||||
Console.debug(
|
||||
"Servers.server_uuid already deleted in Crafty version 4.3.0, skipping this part"
|
||||
)
|
||||
return
|
||||
|
||||
try:
|
||||
logger.info("Migrating Data from Int to UUID (Foreign Keys)")
|
||||
Console.info("Migrating Data from Int to UUID (Foreign Keys)")
|
||||
# Changes on Audit Log Table
|
||||
for audit_log in AuditLog.select():
|
||||
old_server_id = audit_log.server_id_id
|
||||
if old_server_id == "0" or old_server_id is None:
|
||||
server_uuid = None
|
||||
else:
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
AuditLog.update(server_id=server_uuid).where(
|
||||
AuditLog.audit_id == audit_log.audit_id
|
||||
).execute()
|
||||
|
||||
# Changes on Webhooks Log Table
|
||||
for webhook in Webhooks.select():
|
||||
old_server_id = webhook.server_id_id
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
Webhooks.update(server_id=server_uuid).where(
|
||||
Webhooks.id == webhook.id
|
||||
).execute()
|
||||
|
||||
# Changes on Schedules Log Table
|
||||
for schedule in Schedules.select():
|
||||
old_server_id = schedule.server_id_id
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
Schedules.update(server_id=server_uuid).where(
|
||||
Schedules.schedule_id == schedule.schedule_id
|
||||
).execute()
|
||||
|
||||
# Changes on Backups Log Table
|
||||
for backup in Backups.select():
|
||||
old_server_id = backup.server_id_id
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
Backups.update(server_id=server_uuid).where(
|
||||
Backups.server_id == old_server_id
|
||||
).execute()
|
||||
|
||||
# Changes on RoleServers Log Table
|
||||
for role_servers in RoleServers.select():
|
||||
old_server_id = role_servers.server_id_id
|
||||
try:
|
||||
server = Servers.get_by_id(old_server_id)
|
||||
server_uuid = server.server_uuid
|
||||
except:
|
||||
server_uuid = old_server_id
|
||||
RoleServers.update(server_id=server_uuid).where(
|
||||
RoleServers.role_id == role_servers.id
|
||||
and RoleServers.server_id == old_server_id
|
||||
).execute()
|
||||
|
||||
logger.info("Migrating Data from Int to UUID (Foreign Keys) : SUCCESS")
|
||||
Console.info("Migrating Data from Int to UUID (Foreign Keys) : SUCCESS")
|
||||
|
||||
except Exception as ex:
|
||||
logger.error("Error while migrating Data from Int to UUID (Foreign Keys)")
|
||||
logger.error(ex)
|
||||
Console.error("Error while migrating Data from Int to UUID (Foreign Keys)")
|
||||
Console.error(ex)
|
||||
last_migration = MigrateHistory.get_by_id(MigrateHistory.select().count())
|
||||
last_migration.delete()
|
||||
return
|
||||
|
||||
try:
|
||||
logger.info("Migrating Data from Int to UUID (Primary Keys)")
|
||||
Console.info("Migrating Data from Int to UUID (Primary Keys)")
|
||||
# Migrating servers from the old id type to the new one
|
||||
for server in Servers.select():
|
||||
Servers.update(server_id=server.server_uuid).where(
|
||||
Servers.server_id == server.server_id
|
||||
).execute()
|
||||
|
||||
logger.info("Migrating Data from Int to UUID (Primary Keys) : SUCCESS")
|
||||
Console.info("Migrating Data from Int to UUID (Primary Keys) : SUCCESS")
|
||||
|
||||
except Exception as ex:
|
||||
logger.error("Error while migrating Data from Int to UUID (Primary Keys)")
|
||||
logger.error(ex)
|
||||
Console.error("Error while migrating Data from Int to UUID (Primary Keys)")
|
||||
Console.error(ex)
|
||||
last_migration = MigrateHistory.get_by_id(MigrateHistory.select().count())
|
||||
last_migration.delete()
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
|
||||
def rollback(migrator: Migrator, database, **kwargs):
|
||||
"""
|
||||
Write your rollback migrations here.
|
||||
"""
|
||||
db = database
|
||||
|
||||
# Condition to prevent running rollback each time we've got a rollback to do
|
||||
this_migration = MigrateHistory.get_or_none(
|
||||
MigrateHistory.name == "20240217_rework_servers_uuid_part2"
|
||||
)
|
||||
if this_migration is None:
|
||||
Console.debug("Update database already done, skipping this part")
|
||||
return
|
||||
|
||||
# **********************************************************************************
|
||||
# Servers New Model from Old (easier to migrate without dunmping Database)
|
||||
# **********************************************************************************
|
||||
class Servers(peewee.Model):
|
||||
server_id = peewee.CharField(primary_key=True, default=str(uuid.uuid4()))
|
||||
created = peewee.DateTimeField(default=datetime.datetime.now)
|
||||
server_uuid = peewee.CharField(default="", index=True)
|
||||
server_name = peewee.CharField(default="Server", index=True)
|
||||
path = peewee.CharField(default="")
|
||||
backup_path = peewee.CharField(default="")
|
||||
executable = peewee.CharField(default="")
|
||||
log_path = peewee.CharField(default="")
|
||||
execution_command = peewee.CharField(default="")
|
||||
auto_start = peewee.BooleanField(default=0)
|
||||
auto_start_delay = peewee.IntegerField(default=10)
|
||||
crash_detection = peewee.BooleanField(default=0)
|
||||
stop_command = peewee.CharField(default="stop")
|
||||
executable_update_url = peewee.CharField(default="")
|
||||
server_ip = peewee.CharField(default="127.0.0.1")
|
||||
server_port = peewee.IntegerField(default=25565)
|
||||
logs_delete_after = peewee.IntegerField(default=0)
|
||||
type = peewee.CharField(default="minecraft-java")
|
||||
show_status = peewee.BooleanField(default=1)
|
||||
created_by = peewee.IntegerField(default=-100)
|
||||
shutdown_timeout = peewee.IntegerField(default=60)
|
||||
ignored_exits = peewee.CharField(default="0")
|
||||
|
||||
class Meta:
|
||||
table_name = "servers"
|
||||
database = db
|
||||
|
||||
try:
|
||||
logger.info("Migrating Data from UUID to Int (Primary Keys)")
|
||||
Console.info("Migrating Data from UUID to Int (Primary Keys)")
|
||||
# Migrating servers from the old id type to the new one
|
||||
new_id = 0
|
||||
for server in Servers.select():
|
||||
new_id += 1
|
||||
Servers.update(server_uuid=server.server_id).where(
|
||||
Servers.server_id == server.server_id
|
||||
).execute()
|
||||
Servers.update(server_id=new_id).where(
|
||||
Servers.server_id == server.server_id
|
||||
).execute()
|
||||
|
||||
logger.info("Migrating Data from UUID to Int (Primary Keys) : SUCCESS")
|
||||
Console.info("Migrating Data from UUID to Int (Primary Keys) : SUCCESS")
|
||||
|
||||
except Exception as ex:
|
||||
logger.error("Error while migrating Data from UUID to Int (Primary Keys)")
|
||||
logger.error(ex)
|
||||
Console.error("Error while migrating Data from UUID to Int (Primary Keys)")
|
||||
Console.error(ex)
|
||||
last_migration = MigrateHistory.get_by_id(MigrateHistory.select().count())
|
||||
last_migration.delete()
|
||||
return
|
||||
|
||||
try:
|
||||
logger.info("Migrating Data from UUID to Int (Foreign Keys)")
|
||||
Console.info("Migrating Data from UUID to Int (Foreign Keys)")
|
||||
# Changes on Audit Log Table
|
||||
for audit_log in AuditLog.select():
|
||||
old_server_id = audit_log.server_id_id
|
||||
if old_server_id is None:
|
||||
new_server_id = 0
|
||||
else:
|
||||
try:
|
||||
server = Servers.get_or_none(Servers.server_uuid == old_server_id)
|
||||
new_server_id = server.server_id
|
||||
except:
|
||||
new_server_id = old_server_id
|
||||
AuditLog.update(server_id=new_server_id).where(
|
||||
AuditLog.audit_id == audit_log.audit_id
|
||||
).execute()
|
||||
|
||||
# Changes on Webhooks Log Table
|
||||
for webhook in Webhooks.select():
|
||||
old_server_id = webhook.server_id_id
|
||||
try:
|
||||
server = Servers.get_or_none(Servers.server_uuid == old_server_id)
|
||||
new_server_id = server.server_id
|
||||
except:
|
||||
new_server_id = old_server_id
|
||||
Webhooks.update(server_id=new_server_id).where(
|
||||
Webhooks.id == webhook.id
|
||||
).execute()
|
||||
|
||||
# Changes on Schedules Log Table
|
||||
for schedule in Schedules.select():
|
||||
old_server_id = schedule.server_id_id
|
||||
try:
|
||||
server = Servers.get_or_none(Servers.server_uuid == old_server_id)
|
||||
new_server_id = server.server_id
|
||||
except:
|
||||
new_server_id = old_server_id
|
||||
Schedules.update(server_id=new_server_id).where(
|
||||
Schedules.schedule_id == schedule.schedule_id
|
||||
).execute()
|
||||
|
||||
# Changes on Backups Log Table
|
||||
for backup in Backups.select():
|
||||
old_server_id = backup.server_id_id
|
||||
try:
|
||||
server = Servers.get_or_none(Servers.server_uuid == old_server_id)
|
||||
new_server_id = server.server_id
|
||||
except:
|
||||
new_server_id = old_server_id
|
||||
Backups.update(server_id=new_server_id).where(
|
||||
Backups.server_id == old_server_id
|
||||
).execute()
|
||||
|
||||
# Changes on RoleServers Log Table
|
||||
for role_servers in RoleServers.select():
|
||||
old_server_id = role_servers.server_id_id
|
||||
try:
|
||||
server = Servers.get_or_none(Servers.server_uuid == old_server_id)
|
||||
new_server_id = server.server_id
|
||||
except:
|
||||
new_server_id = old_server_id
|
||||
RoleServers.update(server_id=new_server_id).where(
|
||||
RoleServers.role_id == role_servers.id
|
||||
and RoleServers.server_id == old_server_id
|
||||
).execute()
|
||||
|
||||
logger.info("Migrating Data from UUID to Int (Foreign Keys) : SUCCESS")
|
||||
Console.info("Migrating Data from UUID to Int (Foreign Keys) : SUCCESS")
|
||||
|
||||
except Exception as ex:
|
||||
logger.error("Error while migrating Data from UUID to Int (Foreign Keys)")
|
||||
logger.error(ex)
|
||||
Console.error("Error while migrating Data from UUID to Int (Foreign Keys)")
|
||||
Console.error(ex)
|
||||
last_migration = MigrateHistory.get_by_id(MigrateHistory.select().count())
|
||||
last_migration.delete()
|
||||
return
|
||||
|
||||
return
|
@ -7,6 +7,7 @@ from app.classes.shared.console import Console
|
||||
from app.classes.shared.migration import Migrator, MigrateHistory
|
||||
from app.classes.models.management import Schedules, Backups
|
||||
from app.classes.models.server_permissions import RoleServers
|
||||
from app.classes.models.servers import Servers
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -17,40 +18,7 @@ def migrate(migrator: Migrator, database, **kwargs):
|
||||
"""
|
||||
db = database
|
||||
|
||||
# **********************************************************************************
|
||||
# Servers New Model from Old (easier to migrate without dunmping Database)
|
||||
# **********************************************************************************
|
||||
class Servers(peewee.Model):
|
||||
server_id = peewee.CharField(primary_key=True, default=str(uuid.uuid4()))
|
||||
created = peewee.DateTimeField(default=datetime.datetime.now)
|
||||
server_name = peewee.CharField(default="Server", index=True)
|
||||
path = peewee.CharField(default="")
|
||||
backup_path = peewee.CharField(default="")
|
||||
executable = peewee.CharField(default="")
|
||||
log_path = peewee.CharField(default="")
|
||||
execution_command = peewee.CharField(default="")
|
||||
auto_start = peewee.BooleanField(default=0)
|
||||
auto_start_delay = peewee.IntegerField(default=10)
|
||||
crash_detection = peewee.BooleanField(default=0)
|
||||
stop_command = peewee.CharField(default="stop")
|
||||
executable_update_url = peewee.CharField(default="")
|
||||
server_ip = peewee.CharField(default="127.0.0.1")
|
||||
server_port = peewee.IntegerField(default=25565)
|
||||
logs_delete_after = peewee.IntegerField(default=0)
|
||||
type = peewee.CharField(default="minecraft-java")
|
||||
show_status = peewee.BooleanField(default=1)
|
||||
created_by = peewee.IntegerField(default=-100)
|
||||
shutdown_timeout = peewee.IntegerField(default=60)
|
||||
ignored_exits = peewee.CharField(default="0")
|
||||
|
||||
class Meta:
|
||||
table_name = "servers"
|
||||
database = db
|
||||
|
||||
try:
|
||||
logger.info("Migrating Data from Int to UUID (Fixing Issue)")
|
||||
Console.info("Migrating Data from Int to UUID (Fixing Issue)")
|
||||
|
||||
# Changes on Servers Roles Table
|
||||
migrator.alter_column_type(
|
||||
RoleServers,
|
||||
@ -87,10 +55,13 @@ def migrate(migrator: Migrator, database, **kwargs):
|
||||
),
|
||||
)
|
||||
|
||||
migrator.run()
|
||||
|
||||
logger.info("Migrating Data from Int to UUID (Fixing Issue) : SUCCESS")
|
||||
Console.info("Migrating Data from Int to UUID (Fixing Issue) : SUCCESS")
|
||||
# Drop Column after migration
|
||||
servers_columns = db.get_columns("servers")
|
||||
if any(column_data.name == "server_uuid" for column_data in servers_columns):
|
||||
Console.debug(
|
||||
"Servers.server_uuid not deleted before Crafty version 4.3.2, skipping this part"
|
||||
)
|
||||
migrator.drop_columns("servers", ["server_uuid"])
|
||||
|
||||
except Exception as ex:
|
||||
logger.error("Error while migrating Data from Int to UUID (Fixing Issue)")
|
||||
@ -130,3 +101,7 @@ def rollback(migrator: Migrator, database, **kwargs):
|
||||
"server_id",
|
||||
peewee.IntegerField(null=True),
|
||||
)
|
||||
|
||||
migrator.add_columns(
|
||||
"servers", server_uuid=peewee.CharField(default="", index=True)
|
||||
) # Recreating the column for roll back
|
||||
|
@ -53,6 +53,20 @@
|
||||
"translationTitle": "Překlad do jazyků",
|
||||
"translator": "Překladatelé"
|
||||
},
|
||||
"customLogin": {
|
||||
"apply": "použít",
|
||||
"backgroundUpload": "Nahrání pozadí",
|
||||
"customLoginPage": "Udělej si vlastní přihlašovací stránku",
|
||||
"delete": "Smazat",
|
||||
"labelLoginImage": "Vyber si svoji přihlašovací stránku",
|
||||
"loginBackground": "Pozadí pro přihlášeni",
|
||||
"loginImage": "Nahrání pozadí pro přihlašovací stránku.",
|
||||
"loginOpacity": "Nastavení transparentnosti přihlašovacího okna",
|
||||
"pageTitle": "Vlastní přihlašovací stránka",
|
||||
"preview": "Náhled",
|
||||
"select": "Vybrat",
|
||||
"selectImage": "Vybrat obrázek"
|
||||
},
|
||||
"dashboard": {
|
||||
"actions": "Akce",
|
||||
"allServers": "Všechny servery",
|
||||
@ -97,6 +111,7 @@
|
||||
"starting": "Zpožděný start",
|
||||
"status": "Stav",
|
||||
"stop": "Zastavit",
|
||||
"storage": "úložiště",
|
||||
"version": "Verze",
|
||||
"welcome": "Vítejte v Crafty Controlleru"
|
||||
},
|
||||
@ -181,8 +196,11 @@
|
||||
},
|
||||
"error": {
|
||||
"agree": "Souhlasím",
|
||||
"bedrockError": "Stažení Bedrocku není dostupné. Prosím zkontrolujte",
|
||||
"cancel": "Zrušit",
|
||||
"contact": "Kontaktujte podporu Crafty přes Discord",
|
||||
"craftyStatus": "Crafty stav systémů",
|
||||
"cronFormat": "Neplatný formát Cron",
|
||||
"embarassing": "Ach jo, no, to je trapné.",
|
||||
"error": "Chyba!",
|
||||
"eulaAgree": "Souhlasíte?",
|
||||
@ -191,12 +209,17 @@
|
||||
"fileError": "Typ souboru musí být obrázek.",
|
||||
"fileTooLarge": "Odeslání se nezdařilo. Příliš velký nahraný soubor. Obraťte se na správce systému.",
|
||||
"hereIsTheError": "Zde je chyba",
|
||||
"installerJava": "Selhala instalace {} : Forge servery potřebují k instalaci Javu. Zjistili jsme že java není nainstalovaná. Prosím nainstalujte java na server.",
|
||||
"internet": "Zjistili jsme, že počítač se spuštěným programem Crafty není připojen k internetu. Připojení klientů k serveru může být omezeno.",
|
||||
"migration": "Crafty's hlavní úložiště se přesouvá do jiné lokace. Všechny servry budou pozastaveny v tento čas. Prosím počkejte než se dokončí migrace",
|
||||
"no-file": "Zdá se, že nemůžeme najít požadovaný soubor. Překontrolujte cestu. Má Crafty správné oprávnění?",
|
||||
"noInternet": "Crafty se nemůže připojit k internetu. Vytváření serverů je pozastaveno. Prosím zkontrolujte připojení k internetu a potom obnovte tuto stránku.",
|
||||
"noJava": "Server {} se nepodařilo spustit s kódem chyby: Zjistili jsme, že Java není nainstalována. Nainstalujte prosím Javu a poté spusťte server.",
|
||||
"not-downloaded": "Zdá se, že nemůžeme najít váš spustitelný soubor. Bylo jeho stahování dokončeno? Jsou oprávnění nastavena na spustitelný soubor?",
|
||||
"portReminder": "Zjistili jsme, že server {} byl spuštěn poprvé. Ujistěte se, že jste přesměrovali port {} přes váš směrovač/firewall, aby byl tento port vzdáleně přístupný z internetu.",
|
||||
"privMsg": "a ",
|
||||
"serverJars1": "Server JAR api je nepřístupná. Prosím zkontrolujte",
|
||||
"serverJars2": "pro aktualní informace.",
|
||||
"start-error": "Server {} se nepodařilo spustit s kódem chyby: {}",
|
||||
"superError": "Pro dokončení této akce musíte být super uživatel.",
|
||||
"terribleFailure": "Jaké strašné selhání!"
|
||||
@ -207,10 +230,14 @@
|
||||
"version": "Verze"
|
||||
},
|
||||
"login": {
|
||||
"defaultPath": "Heslo které jste vložili je výchozí cesta k pověření. Prosím najděte výchozí heslo v této lokaci.",
|
||||
"disabled": "Uživatelský účet byl pozastaven. Prosím kontaktujte vašeho správce systému pro více informací.",
|
||||
"forgotPassword": "Zapomenuté heslo",
|
||||
"incorrect": "Nesprávné uživatelské jméno nebo heslo",
|
||||
"login": "Přihlásit se",
|
||||
"password": "Heslo",
|
||||
"username": "Uživatelské jméno"
|
||||
"username": "Uživatelské jméno",
|
||||
"viewStatus": "Podívejte se na statusy systému"
|
||||
},
|
||||
"notify": {
|
||||
"activityLog": "Záznamy o činnosti",
|
||||
@ -222,21 +249,32 @@
|
||||
"preparingLogs": " Počkejte prosím, než připravíme vaše protokoly... Až budou připraveny, pošleme vám oznámení. U rozsáhlých zavádění to může chvíli trvat.",
|
||||
"supportLogs": "Protokoly podpory"
|
||||
},
|
||||
"offline": {
|
||||
"offline": "Offline",
|
||||
"pleaseConnect": "Prosím připojte se k internetu ať můžete používat Crafty."
|
||||
},
|
||||
"panelConfig": {
|
||||
"adminControls": "Ovládání správce",
|
||||
"allowedServers": "Povolené servery",
|
||||
"apply": "Použít",
|
||||
"assignedRoles": "Přidělené role",
|
||||
"backgroundUpload": "Nahrání pozadí",
|
||||
"cancel": "Zrušit",
|
||||
"clearComms": "Vymazat nevykonané příkazy",
|
||||
"custom": "Upravit Crafty",
|
||||
"delete": "Smazat",
|
||||
"edit": "Upravit",
|
||||
"enableLang": "Povolit všechny jazyky",
|
||||
"enabled": "Zapnuto",
|
||||
"globalExplain": "Kde má Crafty ukládat všechny soubory serverů. (Cestu doplníme o /server/[uuid serveru])",
|
||||
"globalServer": "Globalní cesta k serverům",
|
||||
"json": "Config.json",
|
||||
"loginBackground": "Přihlašovací obrázek na pozadí",
|
||||
"loginImage": "Nahrajte obrázek na pozadí přihlašovací obrazovky.",
|
||||
"match": "Hesla musí být stejná",
|
||||
"newRole": "Přidat novou roli",
|
||||
"newUser": "Přidat nového uživatele",
|
||||
"noMounts": "Ukazatel zaplněnosti disků na hlavní stránce",
|
||||
"pageTitle": "Nastavení panelu",
|
||||
"preview": "Náhled",
|
||||
"role": "Role",
|
||||
@ -247,6 +285,7 @@
|
||||
"selectImage": "Vyberte obrázek",
|
||||
"superConfirm": "Postupujte pouze v případě, že chcete, aby měl tento uživatel přístup ke VŠEM (ke všem uživatelským účtům, serverům, nastavení panelu atd.). Může vám dokonce odebrat práva superuživatele.",
|
||||
"superConfirmTitle": "Povolit superuživatele? Jste si jisti?",
|
||||
"title": "Crafty Konfigurace",
|
||||
"user": "Uživatel",
|
||||
"users": "Uživatelé"
|
||||
},
|
||||
@ -276,9 +315,11 @@
|
||||
"serversDesc": "servery, ke kterým má tato role přístup"
|
||||
},
|
||||
"serverBackups": {
|
||||
"after": "Spustit příkaz po záloze",
|
||||
"backupAtMidnight": "Automatické zálohování o půlnoci?",
|
||||
"backupNow": "Zálohovat nyní!",
|
||||
"backupTask": "Bylo spuštěno zálohování.",
|
||||
"before": "Spustit příkaz před zálohou",
|
||||
"cancel": "Zrušit",
|
||||
"clickExclude": "Kliknutím vyberete výjimku",
|
||||
"compress": "Komprimovat zálohu",
|
||||
@ -309,6 +350,7 @@
|
||||
"bePatientDeleteFiles": "Buďte prosím trpěliví, než odstraníme váš server z panelu Crafty a všechny jeho soubory. Tato obrazovka se za chvíli zavře.",
|
||||
"bePatientUpdate": "Prosím, buďte trpěliví, dokud server neaktualizujeme. Doba stahování se může lišit v závislosti na rychlosti vašeho internetu.<br /> Tato obrazovka se za chvíli aktualizuje",
|
||||
"cancel": "Zrušit",
|
||||
"countPlayers": "Počítat server v globálních statistikách",
|
||||
"crashTime": "Časový limit havárie",
|
||||
"crashTimeDesc": "Jak dlouho bychom měli čekat, než budeme váš server považovat za havarovaný?",
|
||||
"deleteFilesQuestion": "Odstranit soubory serveru z přístroje?",
|
||||
@ -318,6 +360,8 @@
|
||||
"deleteServerQuestionMessage": "Opravdu chcete tento server odstranit? Po tomto kroku již není cesty zpět...",
|
||||
"exeUpdateURL": "Adresa URL pro aktualizaci spustitelných souborů serveru",
|
||||
"exeUpdateURLDesc": "Adresa URL pro přímé stahování aktualizací.",
|
||||
"ignoredExits": "Ignorovat kódy pádu serveru",
|
||||
"ignoredExitsExplain": "Ukončovací kódy kteŕe Crafty bude ignorovat a brát jako normálně ukončený server (odělte čárkou)",
|
||||
"javaNoChange": "Nepřepisujte",
|
||||
"javaVersion": "Přepsat aktuální verzi Javy",
|
||||
"javaVersionDesc": "Pokud se chystáte přepsat Javu, ujistěte se, že je aktuální cesta k Javě v příkazu 'execution command' zabalena do uvozovek (výchozí proměnná 'java' je vyloučena).",
|
||||
@ -350,6 +394,8 @@
|
||||
"serverStopCommandDesc": "Příkaz k odeslání programu pro jeho zastavení",
|
||||
"showStatus": "Zobrazit na veřejné stavové stránce",
|
||||
"shutdownTimeout": "Časový limit pro vypnutí",
|
||||
"statsHint1": "Zde by měl být uveden port, na kterém běží váš serv.er. Tímto způsobem Crafty otevře spojení s vaším serverem pro statistiky.",
|
||||
"statsHint2": "Toto nezmění tvůj port pro tvůj server. Musíš to také změnit v konfiguračním souboru tvého serveru.",
|
||||
"stopBeforeDeleting": "Před odstraněním serveru jej prosím zastavte",
|
||||
"timeoutExplain1": "Jak dlouho bude Crafty čekat na vypnutí serveru po provedení příkazu",
|
||||
"timeoutExplain2": "než proces ukončí.",
|
||||
@ -478,8 +524,10 @@
|
||||
"every": "Každý",
|
||||
"interval": "Interval",
|
||||
"name": "Název",
|
||||
"newSchedule": "Nový úkol",
|
||||
"nextRun": "Příští spuštění",
|
||||
"no": "Ne",
|
||||
"no-schedule": "Teď tu nejsou žádné úkoly pro tento server. Pro nový úkol klini",
|
||||
"scheduledTasks": "Naplánované úlohy",
|
||||
"yes": "Ano"
|
||||
},
|
||||
@ -487,6 +535,7 @@
|
||||
"cpuUsage": "Využití CPU",
|
||||
"description": "Popis",
|
||||
"errorCalculatingUptime": "Chyba při výpočtu doby provozu",
|
||||
"loadingMotd": "Načítaní MOTD",
|
||||
"memUsage": "Využití paměti",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
@ -529,6 +578,7 @@
|
||||
"importServerButton": "Importovat server!",
|
||||
"importZip": "Imporovat ze souboru Zip",
|
||||
"importing": "Importování serveru...",
|
||||
"labelZipFile": "Vybrat zip soubor",
|
||||
"maxMem": "Maximální paměť",
|
||||
"minMem": "Minimální paměť",
|
||||
"myNewServer": "Nový server",
|
||||
@ -549,8 +599,11 @@
|
||||
"serverPort": "Port serveru",
|
||||
"serverSelect": "Výběr serveru",
|
||||
"serverType": "Typ serveru",
|
||||
"serverUpload": "Nahrát zazipovány Server",
|
||||
"serverVersion": "Verze serveru",
|
||||
"sizeInGB": "Velikost v GB",
|
||||
"unsupported": "Verze Minecraftu nižší než 1.8 nejsou v Crafty podporovány. Přesto si ji můžete nainstalovat. Není zaručena funkčnost",
|
||||
"uploadButton": "Nahrát",
|
||||
"uploadZip": "Nahrání souboru Zip pro importování serveru",
|
||||
"zipPath": "Cesta k serveru"
|
||||
},
|
||||
@ -559,10 +612,20 @@
|
||||
"credits": "Zásluhy",
|
||||
"dashboard": "Ovládací panel",
|
||||
"documentation": "Dokumentace",
|
||||
"inApp": "V app dokumentaci",
|
||||
"navigation": "Navigace",
|
||||
"newServer": "Vytvořit nový server",
|
||||
"servers": "Servery"
|
||||
},
|
||||
"startup": {
|
||||
"almost": "Dokončuji. Držte se...",
|
||||
"internals": "Nastavuji a startuji Crafty interní komponenty",
|
||||
"internet": "Kontroluju připojení k internetu",
|
||||
"server": "Konfigurace ",
|
||||
"serverInit": "Konfigurace serveru",
|
||||
"starting": "Crafty se startuje...",
|
||||
"tasks": "Startuji plány"
|
||||
},
|
||||
"userConfig": {
|
||||
"apiKey": "Klíče API",
|
||||
"auth": "Autorizovaný? ",
|
||||
@ -602,5 +665,30 @@
|
||||
"userSettings": "Nastavení uživatele",
|
||||
"userTheme": "Motiv UI",
|
||||
"uses": "Počet povolených použití (-1==bez omezení)"
|
||||
},
|
||||
"webhooks": {
|
||||
"areYouSureDel": "Seš si jistý že chceš smazat tento webhook?",
|
||||
"areYouSureRun": "Seš si jistý že chceš otestovat tento webhook?",
|
||||
"backup_server": "Záloha serveru je hotova.",
|
||||
"bot_name": "Název bota",
|
||||
"color": "Vyberte barvu ",
|
||||
"crash_detected": "Server spadl",
|
||||
"edit": "Upravit",
|
||||
"enabled": "Aktivní",
|
||||
"jar_update": "Server byl aktualizován",
|
||||
"kill": "Server byl násilně ukončen",
|
||||
"name": "Název",
|
||||
"new": "Nový Webhook",
|
||||
"newWebhook": "Nový Webhook",
|
||||
"no-webhook": "Teď tu nejsou žádné webhooky pro tento server. Pro nový webhook klikni.",
|
||||
"run": "Spustit test webhooku",
|
||||
"send_command": "Server příkaz obdržel",
|
||||
"start_server": "Server zapnut",
|
||||
"stop_server": "Server vypnut",
|
||||
"trigger": "Spustit",
|
||||
"type": "Typ webhooku",
|
||||
"url": "Webhook URL",
|
||||
"webhook_body": "Webhook Body",
|
||||
"webhooks": "Webhooky"
|
||||
}
|
||||
}
|
@ -53,6 +53,20 @@
|
||||
"translationTitle": "Traduttore in lingua",
|
||||
"translator": "Traduttori"
|
||||
},
|
||||
"customLogin": {
|
||||
"apply": "Applica",
|
||||
"backgroundUpload": "Carica sfondo",
|
||||
"customLoginPage": "Personalizza la pagina di accesso",
|
||||
"delete": "Cancella",
|
||||
"labelLoginImage": "Scegli lo sfondo della finestra di accesso",
|
||||
"loginBackground": "Immagini di sfondo della finestra di accesso",
|
||||
"loginImage": "Carica un'immagine di sfondo per la schermata di accesso.",
|
||||
"loginOpacity": "Seleziona l'opacità della finestra di accesso",
|
||||
"pageTitle": "Pagina di accesso personalizzata",
|
||||
"preview": "Anteprima",
|
||||
"select": "Seleziona",
|
||||
"selectImage": "Seleziona un'immagine"
|
||||
},
|
||||
"dashboard": {
|
||||
"actions": "Azioni",
|
||||
"allServers": "Tutti i Server",
|
||||
@ -75,6 +89,7 @@
|
||||
"dashboard": "Pannello di Controllo",
|
||||
"delay-explained": "Il servizio/agente è stato avviato di recente e sta ritardando l'avvio del server di Minecraft",
|
||||
"host": "Host",
|
||||
"installing": "Installazione...",
|
||||
"kill": "Termina il Processo",
|
||||
"killing": "Terminando il processo...",
|
||||
"lastBackup": "Ultimo:",
|
||||
@ -96,6 +111,7 @@
|
||||
"starting": "Avvio ritardato",
|
||||
"status": "Stato",
|
||||
"stop": "Stop",
|
||||
"storage": "Archiviazione",
|
||||
"version": "Versione",
|
||||
"welcome": "Benvenuto su Crafty Controller"
|
||||
},
|
||||
@ -164,20 +180,33 @@
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"agree": "Conferma",
|
||||
"bedrockError": "I download di Bedrock non sono disponibili. Si prega di controllare",
|
||||
"cancel": "Annulla",
|
||||
"contact": "Contact Crafty Control Support via Discord",
|
||||
"craftyStatus": "Stato di Crafty",
|
||||
"cronFormat": "Rilevato formato Cron non valido",
|
||||
"embarassing": "Oh my, well, this is embarrassing.",
|
||||
"error": "Error!",
|
||||
"eulaAgree": "Do you agree?",
|
||||
"eulaMsg": "You must agree to the EULA. A copy of the Minecraft EULA is linked under this message.",
|
||||
"eulaTitle": "Agree To EULA",
|
||||
"fileError": "Il tipo di file deve essere un'immagine.",
|
||||
"fileTooLarge": "Caricamento fallito. File da caricare troppo grande. Contatta un amministratore di sistema per assistenza.",
|
||||
"hereIsTheError": "Here is the error",
|
||||
"installerJava": "Installazione fallita {} : L'installazione di server Forge richiede Java. Abbiamo rilevato che Java non è installato. Installa Java e riprova.",
|
||||
"internet": "We have detected the machine running Crafty has no connection to the internet. Client connections to the server may be limited.",
|
||||
"migration": "Lo spazio di archiviazione del server principale di Crafty verrà migrato in una nuova posizione. Durante questo periodo tutti gli avvii dei server sono stati sospesi. Aspetta mentre completiamo la migrazione",
|
||||
"no-file": "We can't seem to locate the requested file. Double check the path. Does Crafty have proper permissions?",
|
||||
"noInternet": "Crafty ha problemi ad accedere a internet. La creazione di server è stata disabilitata. Controlla la tua connessione a internet e aggiorna la pagina.",
|
||||
"noJava": "Server {} failed to start with error code: We have detected Java is not installed. Please install java then start the server.",
|
||||
"not-downloaded": "We can't seem to find your executable file. Has it finished downloading? Are the permissions set to executable?",
|
||||
"portReminder": "We have detected this is the first time {} has been run. Make sure to forward port {} through your router/firewall to make this remotely accessible from the internet.",
|
||||
"privMsg": "e il ",
|
||||
"serverJars1": "API JAR del server non raggiungibile. Si prega di controllare",
|
||||
"serverJars2": "per informazioni più aggiornate.",
|
||||
"start-error": "Server {} failed to start with error code: {}",
|
||||
"superError": "Devi essere un super utente per eseguire questa azione.",
|
||||
"terribleFailure": "What a Terrible Failure!"
|
||||
},
|
||||
"footer": {
|
||||
@ -186,10 +215,14 @@
|
||||
"version": "Versione"
|
||||
},
|
||||
"login": {
|
||||
"defaultPath": "La password immessa è il percorso delle credenziali predefinite, non la password. Trova la password predefinita in quella posizione.",
|
||||
"disabled": "Account utente disabilitato. Per ulteriori informazioni, contatta l'amministratore di sistema.",
|
||||
"forgotPassword": "Password dimenticata",
|
||||
"incorrect": "nome utente o password errati",
|
||||
"login": "Accedi",
|
||||
"password": "Password",
|
||||
"username": "Nome utente"
|
||||
"username": "Nome utente",
|
||||
"viewStatus": "Visualizza la pagina di stato pubblica"
|
||||
},
|
||||
"notify": {
|
||||
"activityLog": "Registri di Attività",
|
||||
@ -201,24 +234,38 @@
|
||||
"preparingLogs": "Per favore aspetta mentre prepariamo i tuoi registri... Ti invieremo una notifica quando saranno pronti. Potrebbe volerci un po' per installazioni grosse.",
|
||||
"supportLogs": "Registri di supporto"
|
||||
},
|
||||
"offline": {
|
||||
"offline": "Disconnesso",
|
||||
"pleaseConnect": "Connettiti a internet per usare Crafty."
|
||||
},
|
||||
"panelConfig": {
|
||||
"adminControls": "Controllo admin",
|
||||
"allowedServers": "Server permessi",
|
||||
"apply": "Applica",
|
||||
"assignedRoles": "Ruoli assegnati",
|
||||
"cancel": "Cancella",
|
||||
"clearComms": "Pulisci i comandi non eseguiti",
|
||||
"custom": "Personalizza Crafty",
|
||||
"delete": "Elimina",
|
||||
"edit": "Modifica",
|
||||
"enableLang": "Abilita tutte le lingue",
|
||||
"enabled": "Abilitato",
|
||||
"globalExplain": "Dove Crafty memorizza tutti i file del tuo server. (Aggiungeremo il percorso con /servers/[uuid of server])",
|
||||
"globalServer": "Directory dei server globali",
|
||||
"json": "Config.json",
|
||||
"match": "Le password devono corrispondere",
|
||||
"newRole": "Aggiungi nuovo ruolo",
|
||||
"newUser": "Aggiungi nuovo utente",
|
||||
"noMounts": "Non mostrare supporti su Dash",
|
||||
"pageTitle": "Configurazioni del pannello",
|
||||
"role": "Ruolo",
|
||||
"roleUsers": "Utenti del ruolo",
|
||||
"roles": "Ruoli",
|
||||
"save": "Salva",
|
||||
"select": "Seleziona",
|
||||
"superConfirm": "Procedi solo se vuoi che questo utente abbia accesso a TUTTO (tutti gli utenti, server, impostazioni del pannello, ecc...). Può anche revocare i tuoi poteri da superuser.",
|
||||
"superConfirmTitle": "Abilitare lo superuser? Sei sicuro?",
|
||||
"title": "Configurazione di Crafty",
|
||||
"user": "Utente",
|
||||
"users": "Utenti"
|
||||
},
|
||||
@ -242,14 +289,17 @@
|
||||
"roleTitle": "Impostazioni del ruolo",
|
||||
"roleUserName": "Nome Utente",
|
||||
"roleUsers": "Utenti con il ruolo: ",
|
||||
"selectManager": "Seleziona un gestore per questo ruolo",
|
||||
"serverAccess": "Abilitato?",
|
||||
"serverName": "Nome del Server",
|
||||
"serversDesc": "Server a cui questo ruolo è consentito l'accesso"
|
||||
},
|
||||
"serverBackups": {
|
||||
"after": "Esegui il comando prima del backup",
|
||||
"backupAtMidnight": "Auto-backup a mezzanotte?",
|
||||
"backupNow": "Effettua il Backup Ora!",
|
||||
"backupTask": "Un'azione di backup è cominciata.",
|
||||
"before": "Esegui il comando dopo il backup",
|
||||
"cancel": "Cancella",
|
||||
"clickExclude": "Clicca per selezionare le esclusioni",
|
||||
"compress": "Comprimi backup",
|
||||
@ -280,6 +330,7 @@
|
||||
"bePatientDeleteFiles": "Per favore sii paziente mentre rimuoviamo il tuo server dal pannello di Crafty e cancelliamo tutti i files. Questa schermata si chiuderà in pochi istanti.",
|
||||
"bePatientUpdate": "Per favore sii paziente mentre aggiorniamo il server. I tempi di download possono variare dalla tua velocità di internet.<br /> Questa schermata si aggiornerà a breve",
|
||||
"cancel": "Cancella",
|
||||
"countPlayers": "Includi il server nel conteggio totale dei giocatori",
|
||||
"crashTime": "Crash Timeout",
|
||||
"crashTimeDesc": "Quanto dobbiamo aspettare per considerare il tuo server crashato per colpa di un timeout?",
|
||||
"deleteFilesQuestion": "Eliminare i file del server dalla macchina?",
|
||||
@ -289,6 +340,8 @@
|
||||
"deleteServerQuestionMessage": "Sei sicuro di voler eliminare questo server? Dopo la conferma non puoi tornare indietro...",
|
||||
"exeUpdateURL": "URL di aggiornamento dell'eseguibile del server",
|
||||
"exeUpdateURLDesc": "URL di download diretto per gli aggiornamenti del server.",
|
||||
"ignoredExits": "Codici di arresto anomalo ignorati",
|
||||
"ignoredExitsExplain": "I codici di arresto anomalo per il rilevamento degli incidenti di Crafty dovrebbero essere ignorati come un normale 'stop' (separato da virgole)",
|
||||
"javaNoChange": "Non cambiare la versione di Java",
|
||||
"javaVersion": "Cambia la versione di Java attualmente in uso",
|
||||
"javaVersionDesc": "Se vuoi cambiare versione di Java, assicurati che la path dell'eseguibile di Java sia immessa tra 'apostrofi' ('java' di default è esclusa)",
|
||||
@ -319,7 +372,13 @@
|
||||
"serverPortDesc": "La Porta a cui Crafty si dovrà collegare per le statistiche",
|
||||
"serverStopCommand": "Comando d'arresto del server",
|
||||
"serverStopCommandDesc": "Comando inviato al server per l'arresto",
|
||||
"showStatus": "Mostra nella pagina di stato pubblica",
|
||||
"shutdownTimeout": "Tempo di attesa dello spegnimento",
|
||||
"statsHint1": "la porta che sta usando il server dovrebbe essere qui. Questo è il modo in cui Crafty apre una connessione al tuo server per le statistiche.",
|
||||
"statsHint2": "Ciò non modifica la porta del tuo server. È comunque necessario modificare la porta nel file di configurazione del server.",
|
||||
"stopBeforeDeleting": "Per favore arresta il server prima di eliminarlo",
|
||||
"timeoutExplain1": "Per quanto tempo Crafty attenderà lo spegnimento del tuo server dopo averlo eseguito",
|
||||
"timeoutExplain2": "comando prima di forzare l'arresto del processo.",
|
||||
"update": "Aggiorna l'eseguibile",
|
||||
"yesDelete": "Sì, elimina",
|
||||
"yesDeleteFiles": "Sì, elimina i files"
|
||||
@ -345,8 +404,12 @@
|
||||
"backup": "Backup",
|
||||
"config": "Configura",
|
||||
"files": "Files",
|
||||
"filter": "Filtra registri",
|
||||
"filterList": "Parole filtrate",
|
||||
"logs": "Registri",
|
||||
"metrics": "Metrica",
|
||||
"playerControls": "Gestisci i giocatori",
|
||||
"reset": "Ripristina scorrimento",
|
||||
"schedule": "Programma",
|
||||
"serverDetails": "Dettagli del Server",
|
||||
"terminal": "Terminale"
|
||||
@ -383,6 +446,11 @@
|
||||
"waitUpload": "Per favore aspetta mentre carichiamo i tuoi files... Potrebbe volerci un momento.",
|
||||
"yesDelete": "Sì, conosco le conseguenze"
|
||||
},
|
||||
"serverMetrics": {
|
||||
"resetZoom": "Ripristina ingrandimento",
|
||||
"zoomHint1": "Per ingrandire il grafico, tieni premuto il tasto Maiusc, quindi usa la rotella di scorrimento.",
|
||||
"zoomHint2": "In alternativa, tieni premuto il tasto Maiusc, quindi fai clic e trascina l'area su cui desideri ingrandire."
|
||||
},
|
||||
"serverPlayerManagement": {
|
||||
"bannedPlayers": "Giocatori Banditi",
|
||||
"loadingBannedPlayers": "Carico i giocatori banditi",
|
||||
@ -410,23 +478,44 @@
|
||||
"parent-explain": "Quale azione dovrebbe far eseguire questa?",
|
||||
"reaction": "Reazione",
|
||||
"restart": "Riavvia il Server",
|
||||
"select": "Seleziona Base / Cron / Reazione a catena",
|
||||
"start": "Avvia il server",
|
||||
"stop": "Arresta il Server",
|
||||
"time": "Orario",
|
||||
"time-explain": "A che ora vuoi eseguire la tua azione programmata?"
|
||||
},
|
||||
"serverSchedules": {
|
||||
"action": "Azione",
|
||||
"areYouSure": "Eliminare l'azione programmata?",
|
||||
"cancel": "Cancella",
|
||||
"cannotSee": "Non vedi tutto?",
|
||||
"cannotSeeOnMobile": "Prova a cliccare su un'azione programmata per tutti i dettagli.",
|
||||
"child": "Schedario secondario con ID ",
|
||||
"close": "Chiudi",
|
||||
"command": "Comando",
|
||||
"confirm": "Conferma",
|
||||
"confirmDelete": "Vuoi eliminare l'azione programmata? Non puoi tornare indietro."
|
||||
"confirmDelete": "Vuoi eliminare l'azione programmata? Non puoi tornare indietro.",
|
||||
"create": "Crea nuovo schedario",
|
||||
"cron": "Stringa Cron",
|
||||
"delete": "Cancella",
|
||||
"details": "Dettagli dello schedario",
|
||||
"edit": "Modifica",
|
||||
"enabled": "Abilitato",
|
||||
"every": "Tutto",
|
||||
"interval": "Intervallo",
|
||||
"name": "Nome",
|
||||
"newSchedule": "Nuovo schedario",
|
||||
"nextRun": "Prossima operazione",
|
||||
"no": "No",
|
||||
"no-schedule": "Non sono attualmente presenti schedari per questo server. Per iniziare, clicca",
|
||||
"scheduledTasks": "Attività schedate",
|
||||
"yes": "Sì"
|
||||
},
|
||||
"serverStats": {
|
||||
"cpuUsage": "Utilizzo del Processore",
|
||||
"description": "Descrizione",
|
||||
"errorCalculatingUptime": "Errore nel calcolo dei tempi di operazione",
|
||||
"loadingMotd": "Caricamento MOTD",
|
||||
"memUsage": "Utilizzo della memoria",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
@ -444,6 +533,8 @@
|
||||
"commandInput": "Inserisci il comando",
|
||||
"delay-explained": "Il servizio/agente è stato avviato di recente e sta ritardando l'avvio del server di Minecraft",
|
||||
"downloading": "Scaricando...",
|
||||
"importing": "Importazione...",
|
||||
"installing": "Installazione...",
|
||||
"restart": "Riavvia",
|
||||
"sendCommand": "Invia il comando",
|
||||
"start": "Avvia",
|
||||
@ -468,6 +559,7 @@
|
||||
"importServerButton": "Importa Server!",
|
||||
"importZip": "Importa da un File Zip",
|
||||
"importing": "Importando il Server...",
|
||||
"labelZipFile": "Scegli il tuo file zip",
|
||||
"maxMem": "Memoria Massima",
|
||||
"minMem": "Memoria minima",
|
||||
"myNewServer": "Il mio nuovo Server",
|
||||
@ -478,6 +570,7 @@
|
||||
"save": "Salva",
|
||||
"selectRole": "Seleziona i Ruoli",
|
||||
"selectRoot": "Seleziona la directory radice dell'archivio",
|
||||
"selectServer": "Seleziona un server",
|
||||
"selectType": "Seleziona un Tipo",
|
||||
"selectVersion": "Seleziona una versione",
|
||||
"selectZipDir": "Seleziona il percorso in memoria in cui scompatteremo i file",
|
||||
@ -485,9 +578,14 @@
|
||||
"serverName": "Nome Server",
|
||||
"serverPath": "Percorso del Server",
|
||||
"serverPort": "Porta del Server",
|
||||
"serverSelect": "Server selezionato",
|
||||
"serverType": "Tipo di Server",
|
||||
"serverUpload": "Carica server zippato",
|
||||
"serverVersion": "Versione del Server",
|
||||
"sizeInGB": "Dimensione in GB",
|
||||
"unsupported": "Le versioni di Minecraft inferiori alla 1.8 non sono supportate da Crafty. Puoi comunque installarlo. I risultati varieranno.",
|
||||
"uploadButton": "Carica",
|
||||
"uploadZip": "Carica file zip per l'importazione del server",
|
||||
"zipPath": "Percorso del Server"
|
||||
},
|
||||
"sidebar": {
|
||||
@ -495,10 +593,20 @@
|
||||
"credits": "Crediti",
|
||||
"dashboard": "Pannello di controllo",
|
||||
"documentation": "Documentazione",
|
||||
"inApp": "Documenti in app",
|
||||
"navigation": "Navigazione",
|
||||
"newServer": "Crea un Nuovo Server",
|
||||
"servers": "Servers"
|
||||
},
|
||||
"startup": {
|
||||
"almost": "Finalizzazione. Tieniti forte...",
|
||||
"internals": "Configurazione e avvio dei componenti interni di Crafty",
|
||||
"internet": "Controllo connessione a internet",
|
||||
"server": "Inizializzazione ",
|
||||
"serverInit": "Inizializzazione server",
|
||||
"starting": "Avvio di Crafty...",
|
||||
"tasks": "Avvio attività schedate"
|
||||
},
|
||||
"userConfig": {
|
||||
"apiKey": "Chiavi API",
|
||||
"auth": "Autorizzato? ",
|
||||
@ -519,6 +627,7 @@
|
||||
"lastLogin": "Ultimo accesso: ",
|
||||
"lastUpdate": "Ultimo aggiornamento: ",
|
||||
"leaveBlank": "Per modificare l'utente senza cambiare la passowrd, lascia il campo in bianco.",
|
||||
"manager": "Gestore",
|
||||
"member": "È membro?",
|
||||
"notExist": "Non puoi eliminare qualcosa che non esiste!",
|
||||
"pageTitle": "Modifica Utente",
|
||||
@ -527,6 +636,7 @@
|
||||
"permName": "Nome del Permesso",
|
||||
"repeat": "Ripeti la Password",
|
||||
"roleName": "Nome del ruolo",
|
||||
"selectManager": "Seleziona un gestore per l'utente",
|
||||
"super": "Super User",
|
||||
"userLang": "Linguaggio dell'utente",
|
||||
"userName": "Nome utente",
|
||||
@ -534,6 +644,32 @@
|
||||
"userRoles": "Ruoli dell'utente",
|
||||
"userRolesDesc": "Ruoli di cui l'utente fa parte.",
|
||||
"userSettings": "Impostazioni Utente",
|
||||
"userTheme": "Tema IU",
|
||||
"uses": "Numero di usi permessi (-1==Nessun limite)"
|
||||
},
|
||||
"webhooks": {
|
||||
"areYouSureDel": "Sei sicuro di voler eliminare questo webhook?",
|
||||
"areYouSureRun": "Sei sicuro di voler testare questo webhook?",
|
||||
"backup_server": "Backup del server completato",
|
||||
"bot_name": "Nome del bot",
|
||||
"color": "Seleziona l'accentuazione del colore",
|
||||
"crash_detected": "Il server si è arrestato in modo anomalo",
|
||||
"edit": "Modifica",
|
||||
"enabled": "Abilitato",
|
||||
"jar_update": "Eseguibile del server aggiornato",
|
||||
"kill": "Server arrestato",
|
||||
"name": "Nome",
|
||||
"new": "Nuovo webhook",
|
||||
"newWebhook": "Nuovo webhook",
|
||||
"no-webhook": "Attualmente non ci sono webhook in questo server. Per iniziare, clicca",
|
||||
"run": "Testa il webhook",
|
||||
"send_command": "Comando del server ricevuto",
|
||||
"start_server": "Server avviato",
|
||||
"stop_server": "Server spento",
|
||||
"trigger": "Attivazione a",
|
||||
"type": "Tipo di Webhook",
|
||||
"url": "URL del Webhook",
|
||||
"webhook_body": "Corpo del Webhook",
|
||||
"webhooks": "Webhook"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user