summaryrefslogtreecommitdiffstats
path: root/ogcp
diff options
context:
space:
mode:
authorJavier Sánchez Parra <jsanchez@soleta.eu>2021-12-15 11:28:16 +0100
committerJavier Sánchez Parra <jsanchez@soleta.eu>2021-12-16 17:17:07 +0100
commite07c8afcce3f16739bbf9e8c52405f327f367977 (patch)
tree3c76acfcfacdb2ec62e7eeadc1190107ce494d54 /ogcp
parent695c19f86ec361db8b316358ac9a0609ecfb020f (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.
Diffstat (limited to 'ogcp')
-rw-r--r--ogcp/forms/action_forms.py5
-rw-r--r--ogcp/templates/actions/oglive.html22
-rw-r--r--ogcp/templates/commands.html2
-rw-r--r--ogcp/views.py39
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():