diff options
author | Javier Sánchez Parra <jsanchez@soleta.eu> | 2021-12-15 11:28:16 +0100 |
---|---|---|
committer | Javier Sánchez Parra <jsanchez@soleta.eu> | 2021-12-16 17:17:07 +0100 |
commit | e07c8afcce3f16739bbf9e8c52405f327f367977 (patch) | |
tree | 3c76acfcfacdb2ec62e7eeadc1190107ce494d54 | |
parent | 695c19f86ec361db8b316358ac9a0609ecfb020f (diff) |
Add set ogLive to commands
This action is related to /oglive in ogServer's API. Allows changing the
ogLive for a set of given clients, previously selected in the /commands
view.
-rw-r--r-- | ogcp/forms/action_forms.py | 5 | ||||
-rw-r--r-- | ogcp/templates/actions/oglive.html | 22 | ||||
-rw-r--r-- | ogcp/templates/commands.html | 2 | ||||
-rw-r--r-- | ogcp/views.py | 39 |
4 files changed, 67 insertions, 1 deletions
diff --git a/ogcp/forms/action_forms.py b/ogcp/forms/action_forms.py index d618f24..e8b607f 100644 --- a/ogcp/forms/action_forms.py +++ b/ogcp/forms/action_forms.py @@ -110,6 +110,11 @@ class BootModeForm(FlaskForm): boot = SelectField(label=_('Boot mode')) ok = SubmitField(label=_('Ok')) +class OgliveForm(FlaskForm): + ips = HiddenField() + oglive = SelectField(label=_('ogLive')) + ok = SubmitField(label=_('Ok')) + class ImageCreateForm(FlaskForm): ip = HiddenField() os = SelectField(label=_('OS'), choices=[]) diff --git a/ogcp/templates/actions/oglive.html b/ogcp/templates/actions/oglive.html new file mode 100644 index 0000000..f35b371 --- /dev/null +++ b/ogcp/templates/actions/oglive.html @@ -0,0 +1,22 @@ +{% 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">Changing ogLive of {{ip_count}} {%if ip_count > 1%}computers{% else %}computer{% endif %}</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_oglive'), + method='post', + button_map={'ok': 'primary'}, + extra_classes="m-5") }} + +{% endblock %} diff --git a/ogcp/templates/commands.html b/ogcp/templates/commands.html index df84ab0..02fe5c2 100644 --- a/ogcp/templates/commands.html +++ b/ogcp/templates/commands.html @@ -40,6 +40,8 @@ form="scopesForm" formaction="{{ url_for('action_image_create') }}" formmethod="get"> <input class="btn btn-light" type="submit" value="{{ _('Set boot mode') }}" form="scopesForm" formaction="{{ url_for('action_mode') }}" formmethod="get"> + <input class="btn btn-light" type="submit" value="{{ _('Set ogLive') }}" + form="scopesForm" formaction="{{ url_for('action_oglive') }}" formmethod="get"> <input class="btn btn-light" type="submit" value="{{ _('Log') }}" form="scopesForm" formaction="{{ url_for('action_legacy_log') }}" formmethod="get"> <input class="btn btn-light" type="submit" value="{{ _('Real time log') }}" diff --git a/ogcp/views.py b/ogcp/views.py index fe8d465..4f29f2f 100644 --- a/ogcp/views.py +++ b/ogcp/views.py @@ -11,7 +11,7 @@ from flask import ( from ogcp.forms.action_forms import ( WOLForm, SetupForm, ClientDetailsForm, ImageDetailsForm, HardwareForm, SessionForm, ImageRestoreForm, ImageCreateForm, SoftwareForm, BootModeForm, - RoomForm, DeleteRoomForm, CenterForm, DeleteCenterForm + RoomForm, DeleteRoomForm, CenterForm, DeleteCenterForm, OgliveForm ) from flask_login import ( current_user, LoginManager, @@ -666,6 +666,43 @@ def action_mode(): return render_template('actions/mode.html', form=form, scopes=scopes, clients=clients) +@app.route('/action/oglive', methods=['GET', 'POST']) +@login_required +def action_oglive(): + form = OgliveForm(request.form) + if request.method == 'POST': + ips = form.ips.data.split(' ') + payload = {'clients': ips, 'name': form.oglive.data} + r = g.server.post('/oglive/set', payload) + if r.status_code == requests.codes.ok: + flash(_('Client set ogLive request sent successfully'), + category='info') + else: + flash(_('Ogserver replied with status code not ok'), + category='error') + return redirect(url_for('commands')) + + else: + r = g.server.get('/oglive/list') + if r.status_code != requests.codes.ok: + flash(_('Ogserver replied with status code not ok'), + category='error') + return redirect(url_for('commands')) + available_oglives = [(oglive.get('directory'), oglive.get('directory')) + for oglive in r.json()['oglive']] + available_oglives.insert(0, ('default', 'default')) + form.oglive.choices = list(available_oglives) + + ips = parse_elements(request.args.to_dict()) + form.ips.data = " ".join(ips) + if not validate_elements(ips): + return redirect(url_for('commands')) + + form.ok.render_kw = {'formaction': url_for('action_oglive')} + scopes, clients = get_scopes(set(ips)) + return render_template('actions/oglive.html', form=form, scopes=scopes) + + @app.route('/action/image/create', methods=['GET', 'POST']) @login_required def action_image_create(): |