diff options
author | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-01-20 11:21:59 +0100 |
---|---|---|
committer | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-01-20 12:54:57 +0100 |
commit | ddd46295717bd63bd31eadb506a93a66c45c0b02 (patch) | |
tree | 4c73a973fee008ef7eeb3859b508d4e59d309933 /ogcp | |
parent | 20a89ce96535508974a4c9315c062928bea17a85 (diff) |
Adds confirmation page to power off clients
This commit adds an extra view to ensure users do not power off clients
accidentally.
ogcp GET /poweroff returns the confirmation page and POST /poweroff
builds and sends the request to ogServer.
It also includes Spanish translation of the new strings.
Diffstat (limited to 'ogcp')
-rw-r--r-- | ogcp/templates/actions/poweroff.html | 25 | ||||
-rw-r--r-- | ogcp/templates/commands.html | 2 | ||||
-rw-r--r-- | ogcp/translations/es/LC_MESSAGES/messages.po | 63 | ||||
-rw-r--r-- | ogcp/views.py | 31 |
4 files changed, 89 insertions, 32 deletions
diff --git a/ogcp/templates/actions/poweroff.html b/ogcp/templates/actions/poweroff.html new file mode 100644 index 0000000..2ff9440 --- /dev/null +++ b/ogcp/templates/actions/poweroff.html @@ -0,0 +1,25 @@ +{% extends 'commands.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"> + {{ _('Power off %(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_poweroff'), + method='post', + button_map={'submit': 'primary'}, + extra_classes="mx-5") }} + +{% endblock %} + diff --git a/ogcp/templates/commands.html b/ogcp/templates/commands.html index 02fe5c2..b06574a 100644 --- a/ogcp/templates/commands.html +++ b/ogcp/templates/commands.html @@ -19,7 +19,7 @@ <input class="btn btn-light" type="submit" value="{{ _('Power on (WoL)') }}" form="scopesForm" formaction="{{ url_for('action_wol') }}" formmethod="get"> <input class="btn btn-light" type="submit" value="{{ _('Power off') }}" - form="scopesForm" formaction="{{ url_for('action_poweroff') }}" formmethod="post"> + form="scopesForm" formaction="{{ url_for('action_poweroff') }}" formmethod="get"> <input class="btn btn-light" type="submit" value="{{ _('Reboot') }}" form="scopesForm" formaction="{{ url_for('action_reboot') }}" formmethod="post"> <input class="btn btn-light" type="submit" value="{{ _('Refresh') }}" diff --git a/ogcp/translations/es/LC_MESSAGES/messages.po b/ogcp/translations/es/LC_MESSAGES/messages.po index 677c0a6..bbd07fc 100644 --- a/ogcp/translations/es/LC_MESSAGES/messages.po +++ b/ogcp/translations/es/LC_MESSAGES/messages.po @@ -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-19 13:06+0100\n" +"POT-Creation-Date: 2022-01-20 12:35+0100\n" "PO-Revision-Date: 2021-12-23 16:47+0100\n" "Last-Translator: Soleta Networks <opengnsys@soleta.eu>\n" "Language: es\n" @@ -34,99 +34,107 @@ msgstr "Contraseña incorrecta" msgid "Incorrect user name" msgstr "Nombre de usuario incorrecto" -#: views.py:276 +#: views.py:269 +msgid "ogServer: error powering off client" +msgstr "ogServer: error al apagar cliente" + +#: views.py:272 +msgid "Client powered off successfully" +msgstr "Cliente apagado con éxito" + +#: views.py:295 msgid "Wake On Lan request sent successfully" msgstr "Wake On Lan enviado con éxito" -#: views.py:437 +#: views.py:456 msgid "Computers have different partition setup" msgstr "Los ordenadores tienen diferentes configuraciones de partición" -#: views.py:441 +#: views.py:460 msgid "ogServer was unable to obtain setup of selected computer {}" msgstr "ogServer no pudo obtener la configuración del ordenador seleccionado {}" -#: views.py:444 +#: views.py:463 msgid "Disk: {} | Part: {}" msgstr "Disco: {} | Partición: {}" -#: views.py:489 +#: views.py:508 msgid "Software profile request sent successfully" msgstr "Solicitud de perfil de software enviado con éxito" -#: views.py:491 +#: views.py:510 msgid "Error processing software profile request: ({})" msgstr "Error procesando la solicitud de perfil de software: ({})" -#: views.py:616 +#: views.py:637 msgid "ogServer: error adding client" msgstr "ogServer: error al añadir cliente" -#: views.py:619 +#: views.py:640 msgid "Client added successfully" msgstr "Cliente añadido con éxito" -#: views.py:646 +#: views.py:667 msgid "ogServer: error deleting client" msgstr "ogServer: error al eliminar cliente" -#: views.py:649 +#: views.py:670 msgid "Client deleted successfully" msgstr "Cliente eliminado con éxito" -#: views.py:671 +#: views.py:693 msgid "Client set boot mode request sent successfully" msgstr "Solicitud del cambio del modo de inicio del cliente enviado con éxito" -#: views.py:673 views.py:703 views.py:710 +#: views.py:695 views.py:725 views.py:732 msgid "Ogserver replied with status code not ok" msgstr "OgServer respondió con el código de estado de error" -#: views.py:700 +#: views.py:722 msgid "Client set ogLive request sent successfully" msgstr "Solicitud de cambio de ogLive enviada con éxito" -#: views.py:784 views.py:799 views.py:931 +#: views.py:806 views.py:821 views.py:953 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 +#: views.py:808 views.py:823 msgid "Refresh request processed successfully" msgstr "Solicitud de actualización procesada con éxito" -#: views.py:813 +#: views.py:835 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:816 +#: views.py:838 msgid "Center added successfully" msgstr "Centro añadido con éxito" -#: views.py:829 +#: views.py:851 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:832 +#: views.py:854 msgid "Center deleted successfully" msgstr "Centro eliminado con éxito" -#: views.py:851 +#: views.py:873 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:853 +#: views.py:875 msgid "Room added successfully" msgstr "Sala añadida con éxito" -#: views.py:870 +#: views.py:892 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:873 +#: views.py:895 msgid "Room deleted successfully" msgstr "Sala eliminada con éxito" -#: views.py:933 +#: views.py:955 msgid "Delete client request processed successfully" msgstr "Solicitud de eliminar cliente procesada con éxito" @@ -506,6 +514,11 @@ msgstr "Articulo" msgid "Create a partition image" msgstr "Crear una imagen de partición" +#: templates/actions/poweroff.html:9 +#, python-format +msgid "Power off %(ip_count)d client(s)" +msgstr "Apaga %(ip_count)d cliente(s)" + #: templates/actions/setup.html:5 msgid "Partition and Format" msgstr "Partición y formato" diff --git a/ogcp/views.py b/ogcp/views.py index de92430..93c95e1 100644 --- a/ogcp/views.py +++ b/ogcp/views.py @@ -254,15 +254,34 @@ def scopes(): scopes, clients = get_scopes() return render_template('scopes.html', scopes=scopes, clients=clients) -@app.route('/action/poweroff', methods=['POST']) +@app.route('/action/poweroff', methods=['GET', 'POST']) @login_required def action_poweroff(): - ips = parse_elements(request.form.to_dict()) - if not validate_elements(ips): + form = GenericForm(request.form) + if request.method == 'POST': + ips = form.ips.data.split(' ') + if not validate_elements(ips): + return redirect(url_for('commands')) + + payload = {'clients': ips} + r = g.server.post('/poweroff', payload) + if r.status_code != requests.codes.ok: + flash(_('ogServer: error powering off client'), + category='error') + else: + flash(_('Client powered off successfully'), + category='info') return redirect(url_for('commands')) - payload = {'clients': list(ips)} - g.server.post('/poweroff', payload) - return redirect(url_for('commands')) + else: + 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/poweroff.html', form=form, + scopes=scopes) + else: + return redirect(url_for('commands')) + @app.route('/action/wol', methods=['GET', 'POST']) @login_required |