mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Merge branch 'dev' into tweak/server-create-roles
This commit is contained in:
commit
c504f3d83f
11
CHANGELOG.md
11
CHANGELOG.md
@ -3,11 +3,16 @@
|
||||
### New features
|
||||
TBD
|
||||
### Bug fixes
|
||||
TBD
|
||||
- Fix zip imports so the root dir selection is functional ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/764))
|
||||
- Fix bug where full access gives minimal access ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/768))
|
||||
- Ensure audit.log exists or create it on Crafty startup ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/771))
|
||||
### Tweaks
|
||||
TBD
|
||||
- Add info note to default creds file ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/760))
|
||||
- Remove navigation label from sidebar ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/766))
|
||||
- Add a thread dump to support logs ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/769))
|
||||
- Remove text from status page and use symbols ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/770))
|
||||
### Lang
|
||||
TBD
|
||||
- Add remaining `he_IL`, `th_TH` translations for 4.4.0 Release ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/761))
|
||||
<br><br>
|
||||
|
||||
## --- [4.4.0] - 2024/05/11
|
||||
|
@ -1,4 +1,5 @@
|
||||
import os
|
||||
import sys
|
||||
import pathlib
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
@ -251,6 +252,19 @@ class Controller:
|
||||
# Copy crafty logs to archive dir
|
||||
full_log_name = os.path.join(crafty_path, "logs")
|
||||
FileHelpers.copy_dir(os.path.join(self.project_root, "logs"), full_log_name)
|
||||
thread_dump = ""
|
||||
for thread in threading.enumerate():
|
||||
if sys.version_info >= (3, 8):
|
||||
thread_dump += (
|
||||
f"Name: {thread.name}\tIdentifier:"
|
||||
f" {thread.ident}\tTID/PID: {thread.native_id}\n"
|
||||
)
|
||||
else:
|
||||
print(f"Name: {thread.name}\tIdentifier: {thread.ident}")
|
||||
with open(
|
||||
os.path.join(temp_dir, "crafty_thread_dump.txt"), "a", encoding="utf-8"
|
||||
) as f:
|
||||
f.write(thread_dump)
|
||||
self.support_scheduler.add_job(
|
||||
self.log_status,
|
||||
"interval",
|
||||
|
@ -6,6 +6,7 @@ import nh3
|
||||
import tornado.web
|
||||
|
||||
from app.classes.models.crafty_permissions import EnumPermissionsCrafty
|
||||
from app.classes.models.server_permissions import EnumPermissionsServer
|
||||
from app.classes.models.users import ApiKeys
|
||||
from app.classes.shared.helpers import Helpers
|
||||
from app.classes.shared.file_helpers import FileHelpers
|
||||
@ -195,6 +196,8 @@ class BaseHandler(tornado.web.RequestHandler):
|
||||
if api_key is not None:
|
||||
superuser = superuser and api_key.full_access
|
||||
server_permissions_api_mask = api_key.server_permissions
|
||||
if api_key.full_access:
|
||||
server_permissions_api_mask = "1" * len(EnumPermissionsServer)
|
||||
exec_user_role = set()
|
||||
if superuser:
|
||||
authorized_servers = self.controller.servers.get_all_defined_servers()
|
||||
|
@ -41,7 +41,7 @@ async function getTreeView(path, unzip = false, upload = false) {
|
||||
let responseData = await res.json();
|
||||
if (responseData.status === "ok") {
|
||||
console.log(responseData);
|
||||
process_tree_response(responseData);
|
||||
process_tree_response(responseData, unzip);
|
||||
let x = document.querySelector('.bootbox');
|
||||
if (x) {
|
||||
x.remove()
|
||||
@ -61,7 +61,7 @@ async function getTreeView(path, unzip = false, upload = false) {
|
||||
}
|
||||
}
|
||||
|
||||
function process_tree_response(response) {
|
||||
function process_tree_response(response, unzip) {
|
||||
const styles = window.getComputedStyle(document.getElementById("lower_half"));
|
||||
//If this value is still hidden we know the user is executing a zip import and not an upload
|
||||
if (styles.visibility === "hidden") {
|
||||
@ -70,7 +70,9 @@ function process_tree_response(response) {
|
||||
document.getElementById('upload_submit').disabled = false;
|
||||
}
|
||||
let path = response.data.root_path.path;
|
||||
if (unzip) {
|
||||
$(".root-input").val(response.data.root_path.path);
|
||||
}
|
||||
let text = `<ul class="tree-nested d-block" id="${path}ul">`;
|
||||
Object.entries(response.data).forEach(([key, value]) => {
|
||||
if (key === "root_path" || key === "db_stats") {
|
||||
@ -83,7 +85,7 @@ function process_tree_response(response) {
|
||||
if (value.dir) {
|
||||
text += `<li class="tree-item" id="${dpath}li" data-path="${dpath}">
|
||||
<div id="${dpath}" data-path="${dpath}" data-name="${filename}" class="tree-caret tree-ctx-item tree-folder">
|
||||
<input type="radio" name="root_path" value="${dpath}">
|
||||
<input type="radio" class="root-input" name="root_path" value="${dpath}">
|
||||
<span id="${dpath}span" class="files-tree-title" data-path="${dpath}" data-name="${filename}" onclick="getDirView(event)">
|
||||
<i style="color: var(--info);" class="far fa-folder"></i>
|
||||
<i style="color: var(--info);" class="far fa-folder-open"></i>
|
||||
|
@ -63,9 +63,6 @@
|
||||
<nav class="sidebar sidebar-offcanvas" id="sidebar">
|
||||
<ul class="nav">
|
||||
|
||||
<li class="nav-item nav-category" style="margin-top:10px;">{{ translate('sidebar', 'navigation', data['lang']) }}
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/panel/dashboard">
|
||||
<i class="fa-solid fa-diagram-project"></i>
|
||||
|
@ -64,7 +64,7 @@
|
||||
<span class="text-warning"><i class="fas fa-exclamation-triangle"></i></span>
|
||||
</td>
|
||||
<td id="server_motd_{{ server['stats']['server_id']['server_id'] }}">
|
||||
<span class="text-warning">Crafty can't get infos from this Server </span>
|
||||
<span class="text-warning"><i class="fa-solid fa-link-slash"></i> </span>
|
||||
</td>
|
||||
<td id="server_version_{{ server['stats']['server_id']['server_id'] }}">
|
||||
<span class="text-warning"><i class="fas fa-question"></i></i></span>
|
||||
@ -148,7 +148,7 @@
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div id="m_server_motd_{{ server['stats']['server_id']['server_id'] }}">
|
||||
<span class="text-warning"><i class="fas fa-exclamation-triangle"></i> Crafty can't get infos from
|
||||
<span class="text-warning"><i class="fas fa-exclamation-triangle"></i> Crafty can't get info from
|
||||
this Server </span>
|
||||
</div>
|
||||
<div id="m_server_version_{{ server['stats']['server_id']['server_id'] }}"></div>
|
||||
@ -223,9 +223,9 @@
|
||||
}
|
||||
else {
|
||||
server_players.innerHTML = `<span class="text-warning"><i class="fas fa-exclamation-triangle"></i></span>`;
|
||||
server_motd.innerHTML = `<span class="text-warning">Crafty can't get infos from this Server </span>`;
|
||||
server_motd.innerHTML = `<span class="text-warning"><i class="fa-solid fa-link-slash"></i> </span>`;
|
||||
server_version.innerHTML = `<span class="text-warning"><i class="fas fa-question"></i></i></span>`;
|
||||
m_server_motd.innerHTML = `<span class="text-warning"><i class="fas fa-exclamation-triangle"></i> Crafty can't get infos from this Server </span>`;
|
||||
m_server_motd.innerHTML = `<span class="text-warning"><i class="fas fa-exclamation-triangle"></i> <i class="fa-solid fa-link-slash"></i> </span>`;
|
||||
}
|
||||
|
||||
/* Update Online Status */
|
||||
|
@ -234,12 +234,6 @@
|
||||
{% end %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div style="visibility: hidden;">
|
||||
<div class="form-group">
|
||||
<input type="text" class="form-control" id="zip_root_path" name="zip_root_path">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="dir_select" tabindex="-1" role="dialog" aria-labelledby="dir_select"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
@ -361,11 +355,6 @@
|
||||
{% end %}
|
||||
</select>
|
||||
</div>
|
||||
<div style="visibility: hidden;">
|
||||
<div class="form-group">
|
||||
<input type="text" class="form-control" id="zip_root_path" name="zip_root_path">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="dir_upload_select" tabindex="-1" role="dialog" aria-labelledby="dir_select"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
@ -769,7 +758,13 @@
|
||||
wait_msg(true);
|
||||
e.preventDefault();
|
||||
let jarForm = document.getElementById("import-zip");
|
||||
|
||||
var checkedRadio = $('.root-input:checked');
|
||||
let zip_root_path = ""
|
||||
if (checkedRadio.length > 0) {
|
||||
// Get the value of the checked radio button
|
||||
var checkedValue = checkedRadio.val();
|
||||
zip_root_path = checkedValue; // Return the checked value if needed
|
||||
}
|
||||
let formData = new FormData(jarForm);
|
||||
//Create an object from the form data entries
|
||||
let formDataObject = Object.fromEntries(formData.entries());
|
||||
@ -786,7 +781,7 @@
|
||||
"minecraft_bedrock_create_data": {
|
||||
"create_type": "import_server",
|
||||
"import_server_create_data": {
|
||||
"existing_server_path": formDataObject.root_path,
|
||||
"existing_server_path": zip_root_path,
|
||||
"executable": formDataObject.server_jar,
|
||||
}
|
||||
}
|
||||
@ -807,6 +802,13 @@
|
||||
//Create an object from the form data entries
|
||||
let formDataObject = Object.fromEntries(formData.entries());
|
||||
console.log(formDataObject);
|
||||
var checkedRadio = $('.root-input:checked');
|
||||
let zip_root_path = ""
|
||||
if (checkedRadio.length > 0) {
|
||||
// Get the value of the checked radio button
|
||||
var checkedValue = checkedRadio.val();
|
||||
zip_root_path = checkedValue; // Return the checked value if needed
|
||||
}
|
||||
let send_data = {
|
||||
"name": formDataObject.name,
|
||||
"roles": calcRoles(),
|
||||
@ -819,7 +821,7 @@
|
||||
"minecraft_bedrock_create_data": {
|
||||
"create_type": "import_server",
|
||||
"import_server_create_data": {
|
||||
"existing_server_path": formDataObject.root_path,
|
||||
"existing_server_path": zip_root_path,
|
||||
"executable": formDataObject.server_jar,
|
||||
}
|
||||
}
|
||||
|
@ -422,11 +422,6 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12" style="visibility: hidden;" hidden>
|
||||
<div class="form-group">
|
||||
<input type="text" class="form-control" id="zip_root_path" name="zip_root_path">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="dir_select" tabindex="-1" role="dialog" aria-labelledby="dir_select"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
@ -567,12 +562,6 @@
|
||||
{% end %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div style="visibility: hidden;">
|
||||
<div class="form-group">
|
||||
<input type="text" class="form-control" id="zip_root_path" name="zip_root_path">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="dir_upload_select" tabindex="-1" role="dialog" aria-labelledby="dir_select"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
@ -1016,6 +1005,13 @@
|
||||
//Create an object from the form data entries
|
||||
let formDataObject = Object.fromEntries(formData.entries());
|
||||
console.log(formDataObject);
|
||||
var checkedRadio = $('.root-input:checked');
|
||||
let zip_root_path = ""
|
||||
if (checkedRadio.length > 0) {
|
||||
// Get the value of the checked radio button
|
||||
var checkedValue = checkedRadio.val();
|
||||
zip_root_path = checkedValue; // Return the checked value if needed
|
||||
}
|
||||
let send_data = {
|
||||
"name": formDataObject.name,
|
||||
"roles": calcRoles(),
|
||||
@ -1028,7 +1024,7 @@
|
||||
"minecraft_java_create_data": {
|
||||
"create_type": "import_server",
|
||||
"import_server_create_data": {
|
||||
"existing_server_path": formDataObject.root_path,
|
||||
"existing_server_path": zip_root_path,
|
||||
"jarfile": formDataObject.server_jar,
|
||||
"mem_min": formDataObject.mem_min,
|
||||
"mem_max": formDataObject.mem_max,
|
||||
@ -1052,6 +1048,13 @@
|
||||
//Create an object from the form data entries
|
||||
let formDataObject = Object.fromEntries(formData.entries());
|
||||
console.log(formDataObject);
|
||||
var checkedRadio = $('.root-input:checked');
|
||||
let zip_root_path = ""
|
||||
if (checkedRadio.length > 0) {
|
||||
// Get the value of the checked radio button
|
||||
var checkedValue = checkedRadio.val();
|
||||
zip_root_path = checkedValue; // Return the checked value if needed
|
||||
}
|
||||
let send_data = {
|
||||
"name": formDataObject.name,
|
||||
"roles": calcRoles(),
|
||||
@ -1064,7 +1067,7 @@
|
||||
"minecraft_java_create_data": {
|
||||
"create_type": "import_server",
|
||||
"import_server_create_data": {
|
||||
"existing_server_path": formDataObject.root_path,
|
||||
"existing_server_path": zip_root_path,
|
||||
"jarfile": formDataObject.server_jar,
|
||||
"mem_min": formDataObject.mem_min,
|
||||
"mem_max": formDataObject.mem_max,
|
||||
|
@ -619,7 +619,6 @@
|
||||
"dashboard": "Ovládací panel",
|
||||
"documentation": "Dokumentace",
|
||||
"inApp": "V lokalní dokumentaci",
|
||||
"navigation": "Navigace",
|
||||
"newServer": "Vytvořit nový server",
|
||||
"servers": "Servery"
|
||||
},
|
||||
|
@ -600,7 +600,6 @@
|
||||
"dashboard": "Dashboard",
|
||||
"documentation": "Dokumentation",
|
||||
"inApp": "In-App-Dokumentation",
|
||||
"navigation": "Navigation",
|
||||
"newServer": "Neuen Server erstellen",
|
||||
"servers": "Server"
|
||||
},
|
||||
|
@ -598,7 +598,6 @@
|
||||
"dashboard": "Dashboard",
|
||||
"documentation": "Documentation",
|
||||
"inApp": "In App Docs",
|
||||
"navigation": "Navigation",
|
||||
"newServer": "Create New Server",
|
||||
"servers": "Servers"
|
||||
},
|
||||
|
@ -600,7 +600,6 @@
|
||||
"dashboard": "Panel de control",
|
||||
"documentation": "Documentación",
|
||||
"inApp": "Documentación de la Aplicación",
|
||||
"navigation": "Navegación",
|
||||
"newServer": "Crear nuevo Servidor",
|
||||
"servers": "Servidores"
|
||||
},
|
||||
|
@ -520,7 +520,6 @@
|
||||
"credits": "Hyvitykset",
|
||||
"dashboard": "Kojelauta",
|
||||
"documentation": "Dokumentaatio",
|
||||
"navigation": "Navigaatio",
|
||||
"newServer": "Luo uusi palvelin",
|
||||
"servers": "Palvelimet"
|
||||
},
|
||||
|
@ -600,7 +600,6 @@
|
||||
"dashboard": "Tableau de Bord",
|
||||
"documentation": "Documentation",
|
||||
"inApp": "Documentation Interne",
|
||||
"navigation": "Navigation",
|
||||
"newServer": "Créer un Nouveau Serveur",
|
||||
"servers": "Serveurs"
|
||||
},
|
||||
|
@ -489,7 +489,6 @@
|
||||
"credits": "Credits",
|
||||
"dashboard": "Dashboard",
|
||||
"documentation": "Dokumintaasje",
|
||||
"navigation": "Navigaasje",
|
||||
"newServer": "Nije server oanmeitsje",
|
||||
"servers": "Servers"
|
||||
},
|
||||
|
@ -184,6 +184,8 @@
|
||||
"error": {
|
||||
"agree": "מסכים",
|
||||
"bedrockError": "הורדות Bedrock אינן זמינות. אנא בדוק",
|
||||
"bigBucket1": "בדיקת הבריאות של Big Bucket נכשלה. אנא בדוק",
|
||||
"bigBucket2": "כדי לקבל את המידע המעודכן ביותר.",
|
||||
"cancel": "בטל",
|
||||
"contact": "בבקשה צרו קשר עם תמיכת פאנל קראפטי באמצעות דיסקורד",
|
||||
"craftyStatus": "דף המצב של Crafty",
|
||||
@ -206,6 +208,7 @@
|
||||
"portReminder": "זיהינו שזו הפעם הראשונה ש-{} מופעל. הקפידו להעביר את היציאה {} דרך הנתב/חומת האש שלכם כדי להפוך אותה לנגישה מרחוק מהאינטרנט.",
|
||||
"privMsg": "וה",
|
||||
"return": "חזרה לפאנל",
|
||||
"selfHost": "אם אתה מארח בעצמך את הריפו הזה, אנא בדוק את הכתובת שלך או התייעץ עם מדריך פתרון הבעיות שלנו.",
|
||||
"serverJars1": "API של צנצנות השרת אינו נגיש. אנא בדוק",
|
||||
"serverJars2": "למידע מעודכן ביותר.",
|
||||
"start-error": "השרת {} לא הצליח להתחיל עם קוד שגיאה: {}",
|
||||
@ -597,12 +600,12 @@
|
||||
"dashboard": "פאנל",
|
||||
"documentation": "ויקיפדייה",
|
||||
"inApp": "מסמכים באפליקציה",
|
||||
"navigation": "ניווט",
|
||||
"newServer": "צור שרת חדש",
|
||||
"servers": "שרתים"
|
||||
},
|
||||
"startup": {
|
||||
"almost": "מסיימים. תחזיקו חזק...",
|
||||
"cache": "מרענן את קובץ המטמון של Big Bucket",
|
||||
"internals": "הגדרה והפעלה של הרכיבים הפנימיים של Crafty",
|
||||
"internet": "בודק את חיבור האינטרנט",
|
||||
"server": "אתחול ",
|
||||
|
@ -489,7 +489,6 @@
|
||||
"credits": "Zasluge",
|
||||
"dashboard": "Upravljačka ploča",
|
||||
"documentation": "Dokumentacija",
|
||||
"navigation": "Navigacija",
|
||||
"newServer": "Stvorite novi poslužitelj",
|
||||
"servers": "Poslužitelji"
|
||||
},
|
||||
|
@ -496,7 +496,6 @@
|
||||
"credits": "Kredit",
|
||||
"dashboard": "Dasbor",
|
||||
"documentation": "Documentasi",
|
||||
"navigation": "Navigasi",
|
||||
"newServer": "Membuat Server Baru",
|
||||
"servers": "Server"
|
||||
},
|
||||
|
@ -600,7 +600,6 @@
|
||||
"dashboard": "Pannello di controllo",
|
||||
"documentation": "Documentazione",
|
||||
"inApp": "Documenti in app",
|
||||
"navigation": "Navigazione",
|
||||
"newServer": "Crea un Nuovo Server",
|
||||
"servers": "Servers"
|
||||
},
|
||||
|
@ -600,7 +600,6 @@
|
||||
"dashboard": "DASHBORD",
|
||||
"documentation": "DOCUMENTASHUN",
|
||||
"inApp": "IN APPZ DOCS",
|
||||
"navigation": "NAVIGASHUN",
|
||||
"newServer": "CONSTWUCT A SERVR",
|
||||
"servers": "SERVRS"
|
||||
},
|
||||
|
@ -601,7 +601,6 @@
|
||||
"dashboard": "Panelis",
|
||||
"documentation": "Dokumentācija",
|
||||
"inApp": "Iebūvētā dokumentācija",
|
||||
"navigation": "Navigācija",
|
||||
"newServer": "Izveidot Jaunu Serveri",
|
||||
"servers": "Serveri"
|
||||
},
|
||||
|
@ -600,7 +600,6 @@
|
||||
"dashboard": "Dashboard",
|
||||
"documentation": "Documentatie",
|
||||
"inApp": "In-app documentatie",
|
||||
"navigation": "Navigatie",
|
||||
"newServer": "Nieuwe server maken",
|
||||
"servers": "Servers"
|
||||
},
|
||||
|
@ -489,7 +489,6 @@
|
||||
"credits": "Credits",
|
||||
"dashboard": "Dashboard",
|
||||
"documentation": "Documentatie",
|
||||
"navigation": "Navigatie",
|
||||
"newServer": "Nieuwe server maken",
|
||||
"servers": "Servers"
|
||||
},
|
||||
|
@ -599,7 +599,6 @@
|
||||
"dashboard": "Panel",
|
||||
"documentation": "Dokumentacja",
|
||||
"inApp": "Dokumentacja w Aplikacji",
|
||||
"navigation": "Nawigacja",
|
||||
"newServer": "Stwórz nowy serwer",
|
||||
"servers": "Serwery"
|
||||
},
|
||||
|
@ -497,7 +497,6 @@
|
||||
"credits": "Créditos",
|
||||
"dashboard": "Painel de Controle",
|
||||
"documentation": "Documentação",
|
||||
"navigation": "Navegação",
|
||||
"newServer": "Criar Novo Servidor",
|
||||
"servers": "Servidores"
|
||||
},
|
||||
|
@ -184,6 +184,8 @@
|
||||
"error": {
|
||||
"agree": "ยอมรับ",
|
||||
"bedrockError": "การดาวน์โหลดเวอร์ชั่น Bedrock ไม่พร้อมใช้งาน โปรดตรวจสอบ",
|
||||
"bigBucket1": "การตรวจสอบสุขภาพ Big Bucket ล้มเหลว โปรดตรวจสอบ",
|
||||
"bigBucket2": "สำหรับข้อมูลล่าสุด",
|
||||
"cancel": "ยกเลิก",
|
||||
"contact": "ติดต่อฝ่ายสนับสนุน Crafty Control ผ่านดิสคอร์ด",
|
||||
"craftyStatus": "หน้าสถานะของ Crafty",
|
||||
@ -206,6 +208,7 @@
|
||||
"portReminder": "เราตรวจพบว่านี่เป็นครั้งแรกที่มีการเรียกใช้ {} ตรวจสอบให้แน่ใจว่าได้ Forward port {} ผ่านเราเตอร์/ไฟร์วอลล์ของคุณเพื่อให้สามารถเข้าถึงได้จากอินเทอร์เน็ตจากระยะไกล",
|
||||
"privMsg": "และ ",
|
||||
"return": "ย้อนกลับไปยังแผงควบคุม",
|
||||
"selfHost": "หากคุณโฮสต์ repo นี้ด้วยตนเอง โปรดตรวจสอบที่อยู่ของคุณ หรือศึกษาคู่มือแก้ปัญหาของเรา",
|
||||
"serverJars1": "ไม่สามารถเข้าถึงเซิร์ฟเวอร์ JARs API กรุณาตรวจสอบ",
|
||||
"serverJars2": "เพื่อข้อมูลที่ทันสมัยที่สุด",
|
||||
"start-error": "เซิร์ฟเวอร์ {} ไม่สามารถเริ่มต้นได้เนื่องจากรหัสข้อผิดพลาด: {}",
|
||||
@ -596,12 +599,12 @@
|
||||
"dashboard": "แผงควบคุม",
|
||||
"documentation": "เอกสารประกอบ",
|
||||
"inApp": "เอกสารประกอบภายในแอป",
|
||||
"navigation": "เมนูนำทาง",
|
||||
"newServer": "สร้างเซิร์ฟเวอร์ใหม่",
|
||||
"servers": "เซิร์ฟเวอร์"
|
||||
},
|
||||
"startup": {
|
||||
"almost": "เสร็จสิ้นการทำงาน. รอซักครู่...",
|
||||
"cache": "กำลังรีเฟรชไฟล์แคช Big Bucket",
|
||||
"internals": "กำหนดค่าและเริ่มการทำงานภายในของ Crafty",
|
||||
"internet": "กำลังตรวจสอบการเชื่อมต่ออินเทอร์เน็ต",
|
||||
"server": "กำลังเริ่มต้นการทำงาน ",
|
||||
|
@ -599,7 +599,6 @@
|
||||
"dashboard": "Arayüz",
|
||||
"documentation": "Dokümantasyon",
|
||||
"inApp": "Uygulama İçi Dokümanlar",
|
||||
"navigation": "Navigasyon",
|
||||
"newServer": "Yeni Sunucu Oluştur",
|
||||
"servers": "Sunucular"
|
||||
},
|
||||
|
@ -599,7 +599,6 @@
|
||||
"dashboard": "Панель",
|
||||
"documentation": "Документація",
|
||||
"inApp": "Швидка документація",
|
||||
"navigation": "Навігація",
|
||||
"newServer": "Створити новий сервер",
|
||||
"servers": "Сервери"
|
||||
},
|
||||
|
@ -600,7 +600,6 @@
|
||||
"dashboard": "仪表板",
|
||||
"documentation": "文档",
|
||||
"inApp": "内置文档",
|
||||
"navigation": "导航栏",
|
||||
"newServer": "创建新服务器",
|
||||
"servers": "服务器"
|
||||
},
|
||||
|
19
main.py
19
main.py
@ -278,6 +278,15 @@ def setup_logging(debug=True):
|
||||
encoding="utf-8",
|
||||
).close()
|
||||
|
||||
if not helper.check_file_exists(
|
||||
os.path.join(APPLICATION_PATH, "logs", "audit.log")
|
||||
):
|
||||
open(
|
||||
os.path.join(APPLICATION_PATH, "logs", "audit.log"),
|
||||
"a",
|
||||
encoding="utf-8",
|
||||
).close()
|
||||
|
||||
if os.path.exists(logging_config_file):
|
||||
# open our logging config file
|
||||
with open(logging_config_file, "rt", encoding="utf-8") as f:
|
||||
@ -367,7 +376,15 @@ if __name__ == "__main__":
|
||||
encoding="utf-8",
|
||||
) as cred_file:
|
||||
cred_file.write(
|
||||
json.dumps({"username": "admin", "password": PASSWORD}, indent=4)
|
||||
json.dumps(
|
||||
{
|
||||
"username": "admin",
|
||||
"password": PASSWORD,
|
||||
"info": "This is NOT where you change your password."
|
||||
" This file is only a means to give you a default password.",
|
||||
},
|
||||
indent=4,
|
||||
)
|
||||
)
|
||||
os.chmod(
|
||||
os.path.join(APPLICATION_PATH, "app", "config", "default-creds.txt"), 0o600
|
||||
|
Loading…
Reference in New Issue
Block a user