Merge branch 'server-role-creation' into 'dev'

Adds checkbox option for adding roles at server creation.

See merge request crafty-controller/crafty-commander!86
This commit is contained in:
Andrew 2021-11-17 21:34:33 +00:00
commit b92b9c04fb
6 changed files with 157 additions and 11 deletions

View File

@ -315,7 +315,8 @@ class PanelHandler(BaseHandler):
user_servers = self.controller.servers.get_authorized_servers(user.user_id)
servers = []
for server in user_servers:
servers.append(server['server_name'])
if server['server_name'] not in servers:
servers.append(server['server_name'])
new_item = {user.user_id: servers}
auth_servers.update(new_item)
data = {user.user_id: user_roles_list}

View File

@ -38,12 +38,17 @@ class ServerHandler(BaseHandler):
defined_servers = self.controller.list_defined_servers()
exec_user_role.add("Super User")
exec_user_crafty_permissions = self.controller.crafty_perms.list_defined_crafty_permissions()
list_roles = []
for role in self.controller.roles.get_all_roles():
list_roles.append(self.controller.roles.get_role(role.role_id))
else:
exec_user_crafty_permissions = self.controller.crafty_perms.get_crafty_permissions_list(exec_user_id)
defined_servers = self.controller.servers.get_authorized_servers(exec_user_id)
list_roles = []
for r in exec_user['roles']:
role = self.controller.roles.get_role(r)
exec_user_role.add(role['role_name'])
list_roles.append(self.controller.roles.get_role(role['role_id']))
template = "public/404.html"
@ -51,6 +56,7 @@ class ServerHandler(BaseHandler):
'version_data': helper.get_version_string(),
'user_data': exec_user_data,
'user_role' : exec_user_role,
'roles' : list_roles,
'user_crafty_permissions' : exec_user_crafty_permissions,
'crafty_permissions': {
'Server_Creation': Enum_Permissions_Crafty.Server_Creation,
@ -67,6 +73,8 @@ class ServerHandler(BaseHandler):
'show_contribute': helper.get_setting("show_contribute_link", True),
'lang': self.controller.users.get_user_lang_by_id(exec_user_id)
}
if exec_user['superuser'] == 1:
page_data['roles'] = list_roles
if page == "step1":
if not exec_user['superuser'] and not self.controller.crafty_perms.can_create_server(exec_user_id):
@ -147,6 +155,10 @@ class ServerHandler(BaseHandler):
if page == "step1":
if not exec_user['superuser']:
user_roles = self.controller.roles.get_all_roles()
else:
user_roles = self.controller.roles.get_all_roles()
server = bleach.clean(self.get_argument('server', ''))
server_name = bleach.clean(self.get_argument('server_name', ''))
min_mem = bleach.clean(self.get_argument('min_memory', ''))
@ -156,6 +168,13 @@ class ServerHandler(BaseHandler):
import_server_path = bleach.clean(self.get_argument('server_path', ''))
import_server_jar = bleach.clean(self.get_argument('server_jar', ''))
server_parts = server.split("|")
captured_roles = []
for role in user_roles:
try:
if bleach.clean(self.get_argument(str(role), '')) == "on":
captured_roles.append(role)
except:
pass
if not server_name:
self.redirect("/panel/error?error=Server name cannot be empty!")
@ -202,12 +221,18 @@ class ServerHandler(BaseHandler):
self.get_remote_ip())
# These lines create a new Role for the Server with full permissions and add the user to it if he's not a superuser
if not exec_user['superuser']:
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)
if len(captured_roles) == 0:
if not exec_user['superuser']:
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)
else:
for role in captured_roles:
role_id = role
self.controller.server_perms.add_role_server(new_server_id, role_id, "11111111")
self.controller.stats.record_stats()
self.redirect("/panel/dashboard")

View File

@ -5,6 +5,7 @@
{% block content %}
<div class="content-wrapper">
<div class="d-none" id="overlay" onclick="hide(event)"></div>
<div class="row">
<div class="col-sm-6 grid-margin stretch-card">
<div class="card">
@ -70,6 +71,29 @@
<input type="number" class="form-control" id="port1" name="port" value="25565" step="1" min="1">
</div>
</div>
<div class="col-sm-12">
<div class="form-group">
<div id="accordion-1">
<div class="card">
<div class="card-header p-2" id="Role-1">
<p class="mb-0 p-0" data-toggle="collapse" data-target="#collapseRole-1" aria-expanded="true" aria-controls="collapseRole-1">
<i class="fas fa-chevron-down"></i> {{ translate('serverWizard', 'addRole', data['lang']) }} <small style="text-transform: none;"> - {{ translate('serverWizard', 'autoCreate', data['lang']) }}</small>
</p>
</div>
<div id="collapseRole-1" class="collapse" aria-labelledby="Role-1" data-parent="">
<div class="card-body scroll">
<div class="form-group">
{% for r in data['roles'] %}
<span class="d-block menu-option"><label><input name="{{ r['role_id'] }}" type="checkbox">&nbsp;
{{ r['role_name'].capitalize() }}</label></span>
{% end %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2" onclick="wait_msg()">{{ translate('serverWizard', 'buildServer', data['lang']) }}</button>
@ -143,7 +167,29 @@
<input type="number" class="form-control" id="port2" name="port" value="25565" step="1" min="1">
</div>
</div>
<div class="col-sm-12">
<div class="form-group">
<div id="accordion-2">
<div class="card">
<div class="card-header p-2" id="Role-2">
<p class="mb-0 p-0" data-toggle="collapse" data-target="#collapseRole-2" aria-expanded="true" aria-controls="collapseRole-2">
<i class="fas fa-chevron-down"></i> {{ translate('serverWizard', 'addRole', data['lang']) }} <small style="text-transform: none;"> - {{ translate('serverWizard', 'autoCreate', data['lang']) }}</small>
</p>
</div>
<div id="collapseRole-2" class="collapse" aria-labelledby="Role-2" data-parent="">
<div class="card-body scroll">
<div class="form-group">
{% for r in data['roles'] %}
<span class="d-block menu-option"><label><input name="{{ r['role_id'] }}" type="checkbox">&nbsp;
{{ r['role_name'].capitalize() }}</label></span>
{% end %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2" onclick="wait_msg(true)">{{ translate('serverWizard', 'importServerButton', data['lang']) }}</button>
<button type="reset" class="btn btn-danger mr-2">{{ translate('serverWizard', 'resetForm', data['lang']) }}</button>
@ -218,6 +264,30 @@
</div>
</div>
<div class="col-sm-12">
<div class="form-group">
<div id="accordion-3">
<div class="card">
<div class="card-header p-2" id="Role-3">
<p class="mb-0 p-0" data-toggle="collapse" data-target="#collapseRole-3" aria-expanded="true" aria-controls="collapseRole-3">
<i class="fas fa-chevron-down"></i> {{ translate('serverWizard', 'addRole', data['lang']) }} <small style="text-transform: none;"> - {{ translate('serverWizard', 'autoCreate', data['lang']) }}</small>
</p>
</div>
<div id="collapseRole-3" class="collapse" aria-labelledby="Role-3" data-parent="">
<div class="card-body scroll">
<div class="form-group">
{% for r in data['roles'] %}
<span class="d-block menu-option"><label><input name="{{ r['role_id'] }}" type="checkbox">&nbsp;
{{ r['role_name'].capitalize() }}</label></span>
{% end %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2" onclick="wait_msg(true)">{{ translate('serverWizard', 'importServerButton', data['lang']) }}</button>
<button type="reset" class="btn btn-danger mr-2">{{ translate('serverWizard', 'resetForm', data['lang']) }}</button>
@ -229,12 +299,52 @@
</div>
</div>
</div>
<style>
.scroll {
max-height: 12em;
overflow-y: auto;
}
.menu-btn {
font-size: 0.9em;
padding: 2px 10px;
}
.menu {
padding-top: 10px;
z-index: 200;
margin-top: 4px;
position: absolute;
background-color: #2a2c44;
}
.menu-option {
padding: 6px 20px 6px;
color: white;
}
#overlay {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
z-index: 100;
}
</style>
{% end %}
{% block js%}
<script>
function dropDown(event) {
event.target.parentElement.children[1].classList.remove("d-none");
document.getElementById("overlay").classList.remove("d-none");
}
function hide(event) {
var items = document.getElementsByClassName('menu');
for (let i = 0; i < items.length; i++) {
items[i].classList.add("d-none");
}
document.getElementById("overlay").classList.add("d-none");
}
$( document ).ready(function() {
console.log('ready');
var forms = $('form.server-wizard');

View File

@ -59,7 +59,10 @@
"myNewServer": "My New Server",
"bePatient": "Please be patient as we ' + (importing ? 'import' : 'download') + ' the server",
"importing": "Importing Server...",
"downloading": "Downloading Server..."
"downloading": "Downloading Server...",
"addRole": "Add Server to Existing Role(s)",
"autoCreate": "If none are selected Crafty will make one!",
"selectRole": "Select Role(s)"
},
"dashboard": {
"dashboard": "Dashboard",

View File

@ -59,7 +59,11 @@
"myNewServer": "Minun uusi palvelin",
"bePatient": "Ole kärsivällinen, kun ' + (importing ? 'tuomme' : 'lataamme') + ' palvelinta",
"importing": "Tuomme palvelinta...",
"downloading": "Lataamme palvelinta..."
"downloading": "Lataamme palvelinta...",
"addRole": "Lisää Palvelin Olemassa Oleviin Rooleihin",
"autoCreate": "Jos ketään ei valita, Crafty tekee sellaisen!",
"selectRole": "Valitse roolit"
},
"dashboard": {
"dashboard": "Kojelauta",

View File

@ -59,7 +59,10 @@
"myNewServer": "Mon Nouveau Serveur",
"bePatient": "Merci de patienter pendant que nous ' + (importing ? 'importons' : 'téléchargeons') + ' le serveur",
"importing": "Importation du Serveur ...",
"downloading": "Téléchargement du Serveur ..."
"downloading": "Téléchargement du Serveur ...",
"addRole": "Ajouter le server au(x) rôle(s) existant(s)",
"autoCreate": "Si aucun n'est sélectionné, Crafty en créera un !",
"selectRole": "Sélectionnez le rôle(s)"
},
"dashboard": {
"dashboard": "Tableau de Bord",