mirror of https://git.48k.eu/ogcp
Ask twice to delete clients
This commit adds an extra view to ensure users do not clients accidentally. It also includes Spanish translation of the new strings.multi-ogserver
parent
96d2797ec3
commit
73963a0273
|
@ -14,6 +14,12 @@ from flask_wtf import FlaskForm
|
|||
from flask_babel import lazy_gettext as _l
|
||||
from flask_babel import _
|
||||
|
||||
|
||||
class GenericForm(FlaskForm):
|
||||
ips = HiddenField()
|
||||
submit = SubmitField(label=_l('Submit'))
|
||||
|
||||
|
||||
class WOLForm(FlaskForm):
|
||||
ips = HiddenField()
|
||||
wol_type = SelectField(label=_l('Type'),
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
{% extends 'scopes.html' %}
|
||||
{% import "bootstrap/wtf.html" as wtf %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% set ip_list = form.ips.data.split(' ') %}
|
||||
{% set ip_count = ip_list | length %}
|
||||
<h1 class="m-5">
|
||||
{{ _('Delete %(ip_count)d client(s)', ip_count=ip_count) }}
|
||||
</h1>
|
||||
|
||||
<ul class="list-group mx-5 list-group-horizontal-sm">
|
||||
{% for ip in ip_list %}
|
||||
<li class="list-group-item flex-fill list-group-item-info">{{ ip }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{{ wtf.quick_form(form,
|
||||
action=url_for('action_client_delete'),
|
||||
method='post',
|
||||
button_map={'submit': 'primary'},
|
||||
extra_classes="mx-5") }}
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
<input class="btn btn-light" type="submit" value="{{ _('Add center') }}"
|
||||
form="scopesForm" formaction="{{ url_for('action_center_add') }}" formmethod="get">
|
||||
<input class="btn btn-light" type="submit" value="{{ _('Delete client') }}"
|
||||
form="scopesForm" formaction="{{ url_for('action_client_delete') }}" formmethod="post">
|
||||
form="scopesForm" formaction="{{ url_for('action_client_delete') }}" formmethod="get">
|
||||
<input class="btn btn-light" type="submit" value="{{ _('Delete room') }}"
|
||||
form="scopesForm" formaction="{{ url_for('action_room_delete') }}" formmethod="get">
|
||||
<input class="btn btn-light" type="submit" value="{{ _('Delete center') }}"
|
||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: opengnsys@soleta.eu\n"
|
||||
"POT-Creation-Date: 2022-01-14 09:01+0100\n"
|
||||
"POT-Creation-Date: 2022-01-19 13:06+0100\n"
|
||||
"PO-Revision-Date: 2021-12-23 16:47+0100\n"
|
||||
"Last-Translator: Soleta Networks <opengnsys@soleta.eu>\n"
|
||||
"Language: es\n"
|
||||
|
@ -18,281 +18,290 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
|
||||
#: views.py:82
|
||||
#: views.py:83
|
||||
msgid "Please, select at least {} element(s)"
|
||||
msgstr "Por favor, seleccione al menos {} elemento(s)"
|
||||
|
||||
#: views.py:86
|
||||
#: views.py:87
|
||||
msgid "No more than {} element(s) can be selected for the given action"
|
||||
msgstr "No se pueden seleccionar más de {} elemento(s) para la acción dada"
|
||||
|
||||
#: views.py:174
|
||||
#: views.py:175
|
||||
msgid "Incorrect password"
|
||||
msgstr "Contraseña incorrecta"
|
||||
|
||||
#: views.py:176
|
||||
#: views.py:177
|
||||
msgid "Incorrect user name"
|
||||
msgstr "Nombre de usuario incorrecto"
|
||||
|
||||
#: views.py:275
|
||||
#: views.py:276
|
||||
msgid "Wake On Lan request sent successfully"
|
||||
msgstr "Wake On Lan enviado con éxito"
|
||||
|
||||
#: views.py:436
|
||||
#: views.py:437
|
||||
msgid "Computers have different partition setup"
|
||||
msgstr "Los ordenadores tienen diferentes configuraciones de partición"
|
||||
|
||||
#: views.py:440
|
||||
#: views.py:441
|
||||
msgid "ogServer was unable to obtain setup of selected computer {}"
|
||||
msgstr "ogServer no pudo obtener la configuración del ordenador seleccionado {}"
|
||||
|
||||
#: views.py:443
|
||||
#: views.py:444
|
||||
msgid "Disk: {} | Part: {}"
|
||||
msgstr "Disco: {} | Partición: {}"
|
||||
|
||||
#: views.py:488
|
||||
#: views.py:489
|
||||
msgid "Software profile request sent successfully"
|
||||
msgstr "Solicitud de perfil de software enviado con éxito"
|
||||
|
||||
#: views.py:490
|
||||
#: views.py:491
|
||||
msgid "Error processing software profile request: ({})"
|
||||
msgstr "Error procesando la solicitud de perfil de software: ({})"
|
||||
|
||||
#: views.py:615
|
||||
#: views.py:616
|
||||
msgid "ogServer: error adding client"
|
||||
msgstr "ogServer: error al añadir cliente"
|
||||
|
||||
#: views.py:618
|
||||
#: views.py:619
|
||||
msgid "Client added successfully"
|
||||
msgstr "Cliente añadido con éxito"
|
||||
|
||||
#: views.py:643 views.py:771 views.py:786 views.py:918
|
||||
msgid "OgServer replied with a non ok status code"
|
||||
msgstr "OgServer respondió con un código de estado de error"
|
||||
#: views.py:646
|
||||
msgid "ogServer: error deleting client"
|
||||
msgstr "ogServer: error al eliminar cliente"
|
||||
|
||||
#: views.py:645 views.py:920
|
||||
msgid "Delete client request processed successfully"
|
||||
msgstr "Solicitud de eliminar cliente procesada con éxito"
|
||||
#: views.py:649
|
||||
msgid "Client deleted successfully"
|
||||
msgstr "Cliente eliminado con éxito"
|
||||
|
||||
#: views.py:658
|
||||
#: views.py:671
|
||||
msgid "Client set boot mode request sent successfully"
|
||||
msgstr "Solicitud del cambio del modo de inicio del cliente enviado con éxito"
|
||||
|
||||
#: views.py:660 views.py:690 views.py:697
|
||||
#: views.py:673 views.py:703 views.py:710
|
||||
msgid "Ogserver replied with status code not ok"
|
||||
msgstr "OgServer respondió con el código de estado de error"
|
||||
|
||||
#: views.py:687
|
||||
#: views.py:700
|
||||
msgid "Client set ogLive request sent successfully"
|
||||
msgstr "Solicitud de cambio de ogLive enviada con éxito"
|
||||
|
||||
#: views.py:773 views.py:788
|
||||
#: views.py:784 views.py:799 views.py:931
|
||||
msgid "OgServer replied with a non ok status code"
|
||||
msgstr "OgServer respondió con un código de estado de error"
|
||||
|
||||
#: views.py:786 views.py:801
|
||||
msgid "Refresh request processed successfully"
|
||||
msgstr "Solicitud de actualización procesada con éxito"
|
||||
|
||||
#: views.py:800
|
||||
#: views.py:813
|
||||
msgid "Server replied with error code when adding the center"
|
||||
msgstr "El servidor respondió con el código de error al agregar el centro."
|
||||
|
||||
#: views.py:803
|
||||
#: views.py:816
|
||||
msgid "Center added successfully"
|
||||
msgstr "Centro añadido con éxito"
|
||||
|
||||
#: views.py:816
|
||||
#: views.py:829
|
||||
msgid "Server replied with error code when deleting the center"
|
||||
msgstr "El servidor respondió con el código de error al eliminar el centro"
|
||||
|
||||
#: views.py:819
|
||||
#: views.py:832
|
||||
msgid "Center deleted successfully"
|
||||
msgstr "Centro eliminado con éxito"
|
||||
|
||||
#: views.py:838
|
||||
#: views.py:851
|
||||
msgid "Server replied with error code when adding the room"
|
||||
msgstr "El servidor respondió con el código de error al agregar la sala."
|
||||
|
||||
#: views.py:840
|
||||
#: views.py:853
|
||||
msgid "Room added successfully"
|
||||
msgstr "Sala añadida con éxito"
|
||||
|
||||
#: views.py:857
|
||||
#: views.py:870
|
||||
msgid "Server replied with error code when deleting the room"
|
||||
msgstr "El servidor respondió con el código de error al eliminar la sala."
|
||||
|
||||
#: views.py:860
|
||||
#: views.py:873
|
||||
msgid "Room deleted successfully"
|
||||
msgstr "Sala eliminada con éxito"
|
||||
|
||||
#: forms/action_forms.py:19 forms/action_forms.py:27 forms/action_forms.py:57
|
||||
#: views.py:933
|
||||
msgid "Delete client request processed successfully"
|
||||
msgstr "Solicitud de eliminar cliente procesada con éxito"
|
||||
|
||||
#: forms/action_forms.py:20 forms/action_forms.py:28 forms/action_forms.py:137
|
||||
#: forms/action_forms.py:142 forms/action_forms.py:151
|
||||
#: forms/action_forms.py:156
|
||||
msgid "Submit"
|
||||
msgstr "Enviar"
|
||||
|
||||
#: forms/action_forms.py:25 forms/action_forms.py:33 forms/action_forms.py:63
|
||||
#: templates/actions/hardware.html:14
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
||||
#: forms/action_forms.py:22 forms/action_forms.py:131 forms/action_forms.py:136
|
||||
#: forms/action_forms.py:145 forms/action_forms.py:150
|
||||
msgid "Submit"
|
||||
msgstr "Enviar"
|
||||
|
||||
#: forms/action_forms.py:25 forms/action_forms.py:70 forms/action_forms.py:81
|
||||
#: forms/action_forms.py:31 forms/action_forms.py:76 forms/action_forms.py:87
|
||||
msgid "Partition"
|
||||
msgstr "Partición"
|
||||
|
||||
#: forms/action_forms.py:43
|
||||
#: forms/action_forms.py:49
|
||||
msgid "Filesystem"
|
||||
msgstr "Sistema de ficheros"
|
||||
|
||||
#: forms/action_forms.py:51
|
||||
#: forms/action_forms.py:57
|
||||
msgid "Size (KB)"
|
||||
msgstr "Tamaño (KB)"
|
||||
|
||||
#: forms/action_forms.py:52
|
||||
#: forms/action_forms.py:58
|
||||
msgid "Format"
|
||||
msgstr "Formatear"
|
||||
|
||||
#: forms/action_forms.py:66 templates/commands.html:25
|
||||
#: forms/action_forms.py:72 templates/commands.html:25
|
||||
msgid "Refresh"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: forms/action_forms.py:71
|
||||
#: forms/action_forms.py:77
|
||||
msgid "View"
|
||||
msgstr "Vista"
|
||||
|
||||
#: forms/action_forms.py:72
|
||||
#: forms/action_forms.py:78
|
||||
msgid "Update"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: forms/action_forms.py:76
|
||||
#: forms/action_forms.py:82
|
||||
msgid "Session"
|
||||
msgstr "Sesión"
|
||||
|
||||
#: forms/action_forms.py:77
|
||||
#: forms/action_forms.py:83
|
||||
msgid "Run"
|
||||
msgstr "Lanzar"
|
||||
|
||||
#: forms/action_forms.py:82
|
||||
#: forms/action_forms.py:88
|
||||
msgid "Image"
|
||||
msgstr "Imagen"
|
||||
|
||||
#: forms/action_forms.py:83
|
||||
#: forms/action_forms.py:89
|
||||
msgid "Method"
|
||||
msgstr "Método"
|
||||
|
||||
#: forms/action_forms.py:85
|
||||
#: forms/action_forms.py:91
|
||||
msgid "Restore"
|
||||
msgstr "Restaurar"
|
||||
|
||||
#: forms/action_forms.py:88 forms/action_forms.py:154
|
||||
#: forms/action_forms.py:94 forms/action_forms.py:160
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#: forms/action_forms.py:89
|
||||
#: forms/action_forms.py:95
|
||||
msgid "IP"
|
||||
msgstr "IP"
|
||||
|
||||
#: forms/action_forms.py:90
|
||||
#: forms/action_forms.py:96
|
||||
msgid "MAC"
|
||||
msgstr "MAC"
|
||||
|
||||
#: forms/action_forms.py:91
|
||||
#: forms/action_forms.py:97
|
||||
msgid "Serial Number"
|
||||
msgstr "Número de serie"
|
||||
|
||||
#: forms/action_forms.py:92 forms/action_forms.py:143
|
||||
#: forms/action_forms.py:98 forms/action_forms.py:149
|
||||
msgid "Netmask"
|
||||
msgstr "Máscara de red"
|
||||
|
||||
#: forms/action_forms.py:93 forms/action_forms.py:116
|
||||
#: forms/action_forms.py:99 forms/action_forms.py:122
|
||||
msgid "ogLive"
|
||||
msgstr "ogLive"
|
||||
|
||||
#: forms/action_forms.py:95
|
||||
#: forms/action_forms.py:101
|
||||
msgid "Remote"
|
||||
msgstr "Remoto"
|
||||
|
||||
#: forms/action_forms.py:96
|
||||
#: forms/action_forms.py:102
|
||||
msgid "Maintenance"
|
||||
msgstr "Mantenimiento"
|
||||
|
||||
#: forms/action_forms.py:97
|
||||
#: forms/action_forms.py:103
|
||||
msgid "Interface"
|
||||
msgstr "Interfaz"
|
||||
|
||||
#: forms/action_forms.py:101
|
||||
#: forms/action_forms.py:107
|
||||
msgid "Driver"
|
||||
msgstr "Controlador"
|
||||
|
||||
#: forms/action_forms.py:103
|
||||
#: forms/action_forms.py:109
|
||||
msgid "Repository"
|
||||
msgstr "Repositorio"
|
||||
|
||||
#: forms/action_forms.py:105 forms/action_forms.py:148
|
||||
#: forms/action_forms.py:111 forms/action_forms.py:154
|
||||
msgid "Room"
|
||||
msgstr "Sala"
|
||||
|
||||
#: forms/action_forms.py:106
|
||||
#: forms/action_forms.py:112
|
||||
msgid "Boot Mode"
|
||||
msgstr "Modo de arranque"
|
||||
|
||||
#: forms/action_forms.py:107 forms/action_forms.py:125
|
||||
#: forms/action_forms.py:113 forms/action_forms.py:131
|
||||
msgid "Create"
|
||||
msgstr "Crear"
|
||||
|
||||
#: forms/action_forms.py:111
|
||||
#: forms/action_forms.py:117
|
||||
msgid "Boot mode"
|
||||
msgstr "Modo de arranque"
|
||||
|
||||
#: forms/action_forms.py:112 forms/action_forms.py:117
|
||||
#: forms/action_forms.py:118 forms/action_forms.py:123
|
||||
msgid "Ok"
|
||||
msgstr "OK"
|
||||
|
||||
#: forms/action_forms.py:121
|
||||
#: forms/action_forms.py:127
|
||||
msgid "OS"
|
||||
msgstr "SO"
|
||||
|
||||
#: forms/action_forms.py:122
|
||||
#: forms/action_forms.py:128
|
||||
msgid "Image name"
|
||||
msgstr "Nombre de la imagen"
|
||||
|
||||
#: forms/action_forms.py:124
|
||||
#: forms/action_forms.py:130
|
||||
msgid "Description"
|
||||
msgstr "Descripción"
|
||||
|
||||
#: forms/action_forms.py:128
|
||||
#: forms/action_forms.py:134
|
||||
msgid "Center name"
|
||||
msgstr "Nombre del centro"
|
||||
|
||||
#: forms/action_forms.py:130
|
||||
#: forms/action_forms.py:136
|
||||
msgid "Comment"
|
||||
msgstr "Comentario"
|
||||
|
||||
#: forms/action_forms.py:134 forms/action_forms.py:139
|
||||
#: forms/action_forms.py:140 forms/action_forms.py:145
|
||||
msgid "Center"
|
||||
msgstr "Centro"
|
||||
|
||||
#: forms/action_forms.py:141
|
||||
#: forms/action_forms.py:147
|
||||
msgid "Room name"
|
||||
msgstr "Nombre de la sala"
|
||||
|
||||
#: forms/action_forms.py:153
|
||||
#: forms/action_forms.py:159
|
||||
msgid "Id"
|
||||
msgstr "Id"
|
||||
|
||||
#: forms/action_forms.py:155
|
||||
#: forms/action_forms.py:161
|
||||
msgid "Size (GiB)"
|
||||
msgstr "Tamaño (GiB)"
|
||||
|
||||
#: forms/action_forms.py:156
|
||||
#: forms/action_forms.py:162
|
||||
msgid "Datasize (GiB)"
|
||||
msgstr "Tamaño de los datos (GiB)"
|
||||
|
||||
#: forms/action_forms.py:157
|
||||
#: forms/action_forms.py:163
|
||||
msgid "Modified"
|
||||
msgstr "Modificado"
|
||||
|
||||
#: forms/action_forms.py:158
|
||||
#: forms/action_forms.py:164
|
||||
msgid "Permissions"
|
||||
msgstr "Permisos"
|
||||
|
||||
#: forms/action_forms.py:159
|
||||
#: forms/action_forms.py:165
|
||||
msgid "Software id"
|
||||
msgstr "ID de software"
|
||||
|
||||
|
@ -476,6 +485,11 @@ msgstr "Formulario para añadir una sala"
|
|||
msgid "Delete center form"
|
||||
msgstr "Formulario para eliminar un centro"
|
||||
|
||||
#: templates/actions/delete_client.html:9
|
||||
#, python-format
|
||||
msgid "Delete %(ip_count)d client(s)"
|
||||
msgstr "Elimina %(ip_count)d cliente(s)"
|
||||
|
||||
#: templates/actions/delete_room.html:6
|
||||
msgid "Delete room form"
|
||||
msgstr "Formulario para eliminar una sala"
|
||||
|
|
|
@ -11,7 +11,8 @@ from flask import (
|
|||
from ogcp.forms.action_forms import (
|
||||
WOLForm, SetupForm, ClientDetailsForm, ImageDetailsForm, HardwareForm,
|
||||
SessionForm, ImageRestoreForm, ImageCreateForm, SoftwareForm, BootModeForm,
|
||||
RoomForm, DeleteRoomForm, CenterForm, DeleteCenterForm, OgliveForm
|
||||
RoomForm, DeleteRoomForm, CenterForm, DeleteCenterForm, OgliveForm,
|
||||
GenericForm
|
||||
)
|
||||
from flask_login import (
|
||||
current_user, LoginManager,
|
||||
|
@ -630,20 +631,33 @@ def action_client_add():
|
|||
form.create.render_kw = {"formaction": url_for('action_client_add')}
|
||||
return render_template('actions/client_details.html', form=form)
|
||||
|
||||
@app.route('/action/client/delete', methods=['POST'])
|
||||
@app.route('/action/client/delete', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def action_client_delete():
|
||||
ips = parse_elements(request.form.to_dict())
|
||||
if not validate_elements(ips):
|
||||
return redirect(url_for('scopes'))
|
||||
form = GenericForm(request.form)
|
||||
if request.method == 'POST':
|
||||
ips = form.ips.data.split(' ')
|
||||
if not validate_elements(ips):
|
||||
return redirect(url_for('scopes'))
|
||||
|
||||
payload = {'clients': list(ips)}
|
||||
r = g.server.post('/client/delete', payload)
|
||||
if r.status_code != requests.codes.ok:
|
||||
flash(_('OgServer replied with a non ok status code'), category='error')
|
||||
payload = {'clients': ips}
|
||||
r = g.server.post('/client/delete', payload)
|
||||
if r.status_code != requests.codes.ok:
|
||||
flash(_('ogServer: error deleting client'),
|
||||
category='error')
|
||||
else:
|
||||
flash(_('Client deleted successfully'),
|
||||
category='info')
|
||||
return redirect(url_for('scopes'))
|
||||
else:
|
||||
flash(_('Delete client request processed successfully'), category='info')
|
||||
return redirect(url_for('scopes'))
|
||||
ips = parse_elements(request.args.to_dict())
|
||||
form.ips.data = " ".join(ips)
|
||||
if validate_elements(ips):
|
||||
scopes, clients = get_scopes(set(ips))
|
||||
return render_template('actions/delete_client.html', form=form,
|
||||
scopes=scopes)
|
||||
else:
|
||||
return redirect(url_for('scopes'))
|
||||
|
||||
@app.route('/action/mode', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
|
|
Loading…
Reference in New Issue