Merge branch 'dev' of gitlab.com:crafty-controller/crafty-commander into dev

This commit is contained in:
luukas 2021-11-02 17:00:58 +02:00
commit 2e1a5c8895
12 changed files with 165 additions and 155 deletions

View File

@ -67,3 +67,6 @@ class Crafty_Perms_Controller:
permissions_list = crafty_permissions.get_permissions(permissions_mask) permissions_list = crafty_permissions.get_permissions(permissions_mask)
return permissions_list return permissions_list
@staticmethod
def add_server_creation(user_id):
return crafty_permissions.add_server_creation(user_id)

View File

@ -173,7 +173,7 @@ class Permissions_Crafty:
@staticmethod @staticmethod
def get_crafty_limit_value(user_id, permission): def get_crafty_limit_value(user_id, permission):
user_crafty = crafty_permissions.get_User_Crafty(user_id) user_crafty = crafty_permissions.get_User_Crafty(user_id)
quantity_list = get_permission_quantity_list(user_id) quantity_list = crafty_permissions.get_permission_quantity_list(user_id)
return quantity_list[permission] return quantity_list[permission]
@staticmethod @staticmethod

View File

@ -232,7 +232,7 @@ class helper_users:
user_query = User_Roles.select().where(User_Roles.user_id == user_id) user_query = User_Roles.select().where(User_Roles.user_id == user_id)
query = Roles.select().where(Roles.role_id == -1) query = Roles.select().where(Roles.role_id == -1)
for u in user_query: for u in user_query:
query = Roles.select().where(Roles.role_id == u.role_id) query = query + Roles.select().where(Roles.role_id == u.role_id)
return query return query
@staticmethod @staticmethod

View File

@ -19,7 +19,7 @@ class Translation():
fallback_lang = 'en_EN' fallback_lang = 'en_EN'
if lang not in self.lang_file_exists and \ if lang not in self.lang_file_exists and \
helper.check_file_exists(os.path.join(self.translations_path, lang + '.json')): helper.check_file_exists(os.path.join(self.translations_path, str(lang) + '.json')):
self.lang_file_exists.append(lang) self.lang_file_exists.append(lang)
translated_word = self.translate_inner(page, word, lang) \ translated_word = self.translate_inner(page, word, lang) \
@ -37,11 +37,11 @@ class Translation():
) )
try: try:
if not self.cached_translation: if not self.cached_translation:
with open(lang_file, 'r') as f: with open(lang_file, 'r', encoding='utf-8') as f:
data = json.load(f) data = json.load(f)
self.cached_translation = data self.cached_translation = data
elif self.cached_translation_lang != lang: elif self.cached_translation_lang != lang:
with open(lang_file, 'r') as f: with open(lang_file, 'r', encoding='utf-8') as f:
data = json.load(f) data = json.load(f)
self.cached_translation = data self.cached_translation = data
self.cached_translation_lang = lang self.cached_translation_lang = lang

View File

@ -129,15 +129,21 @@ class PanelHandler(BaseHandler):
user_auth = self.controller.servers.get_authorized_servers_stats(exec_user_id) user_auth = self.controller.servers.get_authorized_servers_stats(exec_user_id)
logger.debug("ASFR: {}".format(user_auth)) logger.debug("ASFR: {}".format(user_auth))
page_data['servers'] = user_auth page_data['servers'] = user_auth
page_data['server_stats']['running'] = 0
page_data['server_stats']['stopped'] = 0
for data in page_data['servers']: for data in page_data['servers']:
if data['stats']['running']:
page_data['server_stats']['running'] += 1
else:
page_data['server_stats']['stopped'] += 1
try: try:
data['stats']['waiting_start'] = self.controller.servers.get_waiting_start(int(data['stats']['server_id']['server_id'])) page_data['stats']['waiting_start'] = self.controller.servers.get_waiting_start(int(data['stats']['server_id']['server_id']))
except: except:
data['stats']['waiting_start'] = False data['stats']['waiting_start'] = False
total_players = 0 total_players = 0
for server in self.controller.servers.get_all_defined_servers(): for server in page_data['servers']:
total_players += len(self.controller.stats.get_server_players(server['server_id'])) total_players += len(self.controller.stats.get_server_players(server['server_data']['server_id']))
page_data['num_players'] = total_players page_data['num_players'] = total_players
for s in page_data['servers']: for s in page_data['servers']:
@ -303,7 +309,6 @@ class PanelHandler(BaseHandler):
users_list = [] users_list = []
role_users = {} role_users = {}
roles = self.controller.roles.get_all_roles() roles = self.controller.roles.get_all_roles()
role_servers = []
user_roles = {} user_roles = {}
for user in self.controller.users.get_all_users(): for user in self.controller.users.get_all_users():
user_roles_list = self.controller.users.get_user_roles_names(user.user_id) user_roles_list = self.controller.users.get_user_roles_names(user.user_id)

View File

@ -45,7 +45,8 @@ class PublicHandler(BaseHandler):
'version': helper.get_version_string(), 'version': helper.get_version_string(),
'error': error 'error': error
} }
page_data['lang'] = helper.get_setting('language')
page_data['lang'] = tornado.locale.get("en_EN")
# sensible defaults # sensible defaults
template = "public/404.html" template = "public/404.html"

View File

@ -64,17 +64,12 @@ class ServerHandler(BaseHandler):
}, },
'hosts_data': self.controller.management.get_latest_hosts_stats(), 'hosts_data': self.controller.management.get_latest_hosts_stats(),
'menu_servers': defined_servers, 'menu_servers': defined_servers,
'show_contribute': helper.get_setting("show_contribute_link", True) 'show_contribute': helper.get_setting("show_contribute_link", True),
'lang': self.controller.users.get_user_lang_by_id(exec_user_id)
} }
page_data['lang'] = self.controller.users.get_user_lang_by_id(exec_user_id)
if page == "step1": if page == "step1":
if not exec_user['superuser'] and not self.controller.crafty_perms.can_create_server(exec_user_id):
if len(self.controller.users.get_user_roles_id(exec_user_id)) <= 0:
self.redirect("/panel/error?error=Unauthorized access: you must have a role to create a server.")
return
elif not exec_user['superuser'] and not self.controller.crafty_perms.can_create_server(exec_user_id):
self.redirect("/panel/error?error=Unauthorized access: not a server creator or server limit reached") self.redirect("/panel/error?error=Unauthorized access: not a server creator or server limit reached")
return return
@ -99,7 +94,8 @@ class ServerHandler(BaseHandler):
page_data = { page_data = {
'version_data': "version_data_here", 'version_data': "version_data_here",
'user_data': exec_user_data, 'user_data': exec_user_data,
'show_contribute': helper.get_setting("show_contribute_link", True) 'show_contribute': helper.get_setting("show_contribute_link", True),
'lang': self.controller.users.get_user_lang_by_id(exec_user_id)
} }
if page == "command": if page == "command":
@ -205,12 +201,13 @@ class ServerHandler(BaseHandler):
new_server_id, new_server_id,
self.get_remote_ip()) self.get_remote_ip())
#These lines add the server to all the user's existing roles with full permissions # These lines create a new Role for the Server with full permissions and add the user to it if he's not a superuser
new_server_uuid = self.controller.servers.get_server_data_by_id(new_server_id).get("server_uuid")
for role_id in self.controller.users.get_user_roles_id(exec_user_id):
self.controller.server_perms.add_role_server(new_server_id, role_id, "11111111")
if not exec_user['superuser']: if not exec_user['superuser']:
self.controller.server_perms.add_server_creation(exec_user_id) new_server_uuid = self.controller.servers.get_server_data_by_id(new_server_id).get("server_uuid")
role_id = self.controller.roles.add_role("Creator of Server with uuid={}".format(new_server_uuid))
self.controller.server_perms.add_role_server(new_server_id, role_id, "11111111")
self.controller.users.add_role_to_user(exec_user_id, role_id)
self.controller.crafty_perms.add_server_creation(exec_user_id)
self.controller.stats.record_stats() self.controller.stats.record_stats()
self.redirect("/panel/dashboard") self.redirect("/panel/dashboard")

View File

@ -25,6 +25,7 @@ except ModuleNotFoundError as e:
class StatusHandler(BaseHandler): class StatusHandler(BaseHandler):
def get(self): def get(self):
page_data = {} page_data = {}
page_data['lang'] = tornado.locale.get("en_EN")
page_data['servers'] = self.controller.servers.get_all_servers_stats() page_data['servers'] = self.controller.servers.get_all_servers_stats()
for srv in page_data['servers']: for srv in page_data['servers']:
server_data = srv.get('server_data', False) server_data = srv.get('server_data', False)

View File

@ -135,7 +135,7 @@
<script src="/static/assets/js/shared/hoverable-collapse.js"></script> <script src="/static/assets/js/shared/hoverable-collapse.js"></script>
<script src="/static/assets/js/shared/misc.js"></script> <script src="/static/assets/js/shared/misc.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/v/bs4/dt-1.10.22/fh-3.1.7/r-2.2.6/sc-2.0.3/sp-1.2.2/datatables.min.js"></script> <script type="text/javascript" src="https://cdn.datatables.net/v/bs4/dt-1.10.22/fh-3.1.7/r-2.2.6/sc-2.0.3/sp-1.2.2/datatables.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.4.0/bootbox.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.4.0/bootbox.min.js"></script>
<script> <script>

View File

@ -52,7 +52,7 @@
{% for user in data['users'] %} {% for user in data['users'] %}
<tr> <tr>
<td><i class="fas fa-user"></i> {{ user.username }}</td> <td><i class="fas fa-user"></i> {{ user.username }}</td>
<td style="max-width: 30px;"> <td>
{% if user.enabled %} {% if user.enabled %}
<span class="text-success"> <span class="text-success">
<i class="fas fa-check-square"></i> Yes <i class="fas fa-check-square"></i> Yes
@ -63,23 +63,27 @@
</span> </span>
{% end %} {% end %}
</td> </td>
<td style="max-width: 30px;"><button data-toggle="tooltip" title="Show API Key" data-id="{{ user.api_token }}" type="button" class="btn btn-info show_button">Show</button></td> <td>
<td class="server_list_{{user.user_id}}"><ul id="{{user.user_id}}"> <button data-toggle="tooltip" title="Show API Key" data-id="{{ user.api_token }}" type="button" class="btn btn-info show_button">Show</button>
{% for item in data['auth-servers'][user.user_id] %} </td>
<li>{{item}}</li> <td id="server_list_{{user.user_id}}">
{% end %} <ul id="{{user.user_id}}">
</ul></td> {% for item in data['auth-servers'][user.user_id] %}
<td class="role_list_{{user.user_id}}" style="max-width: 100px; overflow: scroll;"><ul> <li>{{item}}</li>
{% end %}
</ul>
</td>
<td id="role_list_{{user.user_id}}">
<ul>
{% for item in data['user-roles'][user.user_id] %} {% for item in data['user-roles'][user.user_id] %}
<li data-toggle="tooltip" title="{{ item }}">{{item}}</li> <li data-toggle="tooltip" title="{{ item }}">{{item}}</li>
{% end %} {% end %}
</ul>
</td>
<td><a href="/panel/edit_user?id={{user.user_id}}"><i class="fas fa-pencil-alt"></i></a></td> <td><a href="/panel/edit_user?id={{user.user_id}}"><i class="fas fa-pencil-alt"></i></a></td>
</tr> </tr>
{% end %} {% end %}
</tbody> </tbody>
</table> </table>
</div> </div>
@ -110,11 +114,13 @@
{% for role in data['roles'] %} {% for role in data['roles'] %}
<tr> <tr>
<td>{{ role.role_name }}</td> <td>{{ role.role_name }}</td>
<td class="role_list_{{role.role_id}}"><ul id="{{role.role_id}}"> <td id="role_list_{{role.role_id}}">
{% for item in data['role-servers'][role.role_id] %} <ul id="{{role.role_id}}">
<li>{{item}}</li> {% for item in data['role-servers'][role.role_id] %}
{% end %} <li>{{item}}</li>
</ul></td> {% end %}
</ul>
</td>
<td><ul> <td><ul>
{% for user in data['users'] %} {% for user in data['users'] %}
{% for ruser in data['user-roles'][user.user_id] %} {% for ruser in data['user-roles'][user.user_id] %}

View File

@ -69,20 +69,20 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="form-group"> <div class="form-group">
<label for="username">User Name <small class="text-muted ml-1"> - What you wish to call this user</small> </label> <label class="form-label" for="username">User Name <small class="text-muted ml-1"> - What you wish to call this user</small> </label>
<input type="text" class="form-control" name="username" id="username" value="{{ data['user']['username'] }}" placeholder="User Name" > <input type="text" class="form-control" name="username" id="username" value="{{ data['user']['username'] }}" placeholder="User Name" >
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="password0">Password <small class="text-muted ml-1"> - leave blank to don't change</small> </label> <label class="form-label" for="password0">Password <small class="text-muted ml-1"> - leave blank to don't change</small> </label>
<input type="password" class="form-control" name="password0" id="password0" value="" placeholder="Password" > <input type="password" class="form-control" name="password0" id="password0" value="" placeholder="Password" >
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="password1">Repeat Password <small class="text-muted ml-1"> - leave blank to don't change</small> </label> <label class="form-label" for="password1">Repeat Password <small class="text-muted ml-1"> - leave blank to don't change</small> </label>
<input type="password" class="form-control" name="password1" id="password1" value="" placeholder="Repeat Password" > <input type="password" class="form-control" name="password1" id="password1" value="" placeholder="Repeat Password" >
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="language">User Language:</label> <label class="form-label" for="language">User Language:</label>
<select id="language" name="language" form="user_form"> <select class="form-select" id="language" name="language" form="user_form">
{% for lang in data['languages'] %} {% for lang in data['languages'] %}
<option value="{{lang}}">{{lang}}</option> <option value="{{lang}}">{{lang}}</option>
{% end %} {% end %}
@ -91,8 +91,6 @@
</div> </div>
</div> </div>
{% if len(data['servers_all']) > 0 %}
<div class="card"> <div class="card">
<div class="card-header header-sm d-flex justify-content-between align-items-center"> <div class="card-header header-sm d-flex justify-content-between align-items-center">
<h4 class="card-title"><i class="fas fa-user-tag"></i> Roles <small class="text-muted ml-1"> - the roles this user is a member of</small></h4> <h4 class="card-title"><i class="fas fa-user-tag"></i> Roles <small class="text-muted ml-1"> - the roles this user is a member of</small></h4>
@ -113,9 +111,9 @@
<td>{{ role.role_name }}</td> <td>{{ role.role_name }}</td>
<td> <td>
{% if role.role_id in data['user']['roles'] %} {% if role.role_id in data['user']['roles'] %}
<input type="checkbox" class="" id="role_{{ role.role_id }}_membership" name="role_{{ role.role_id }}_membership" checked="" value="1"> <input type="checkbox" class="form-check-input" id="role_{{ role.role_id }}_membership" name="role_{{ role.role_id }}_membership" checked="" value="1">
{% else %} {% else %}
<input type="checkbox" class="" id="role_{{ role.role_id }}_membership" name="role_{{ role.role_id }}_membership" value="1"> <input type="checkbox" class="form-check-input" id="role_{{ role.role_id }}_membership" name="role_{{ role.role_id }}_membership" value="1">
{% end %} {% end %}
</td> </td>
@ -151,9 +149,9 @@
<td>{{ permission.name }}</td> <td>{{ permission.name }}</td>
<td> <td>
{% if permission in data['permissions_list'] %} {% if permission in data['permissions_list'] %}
<input type="checkbox" class="" id="permission_{{ permission.name }}" name="permission_{{ permission.name }}" checked="" value="1"> <input type="checkbox" class="form-check-input" id="permission_{{ permission.name }}" name="permission_{{ permission.name }}" checked="" value="1">
{% else %} {% else %}
<input type="checkbox" class="" id="permission_{{ permission.name }}" name="permission_{{ permission.name }}" value="1"> <input type="checkbox" class="form-check-input" id="permission_{{ permission.name }}" name="permission_{{ permission.name }}" value="1">
{% end %} {% end %}
</td> </td>
<td><input type="text" class="form-control" name="quantity_{{ permission.name }}" id="quantity_{{ permission.name }}" value="{{ data['quantity_server'][permission.name] }}"></td> <td><input type="text" class="form-control" name="quantity_{{ permission.name }}" id="quantity_{{ permission.name }}" value="{{ data['quantity_server'][permission.name] }}"></td>
@ -165,7 +163,6 @@
</div> </div>
</div> </div>
</div> </div>
{% end %}
<div class="form-check-flat"> <div class="form-check-flat">
<label for="enabled" class="form-check-label ml-4 mb-4"> <label for="enabled" class="form-check-label ml-4 mb-4">

View File

@ -53,7 +53,7 @@
</td> </td>
{% end %} {% end %}
<td> <td>
{% if server['stats']['int_ping_results'] %} {% if server['stats']['running'] %}
<span class="text-success"><i class="fas fa-signal"></i> {{ translate('dashboard', 'online', data['lang']) }}</span> <span class="text-success"><i class="fas fa-signal"></i> {{ translate('dashboard', 'online', data['lang']) }}</span>
{% else %} {% else %}
<span class="text-danger"><i class="fas fa-ban"></i> {{ translate('dashboard', 'offline', data['lang']) }}</span> <span class="text-danger"><i class="fas fa-ban"></i> {{ translate('dashboard', 'offline', data['lang']) }}</span>