mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-27 10:44:33 +00:00
pagekite: Get rid of tabs in the configuration page
Made the changes requested in issue #1693 to the pagekite configuration page. Removed the tabs and the javascript. Made a sort of hacky but working solution to always having the standard pagekite services being enabled. Put custom services configuration below the regular configuration and added a separate add custom service page a la the Gitweb page. Fixed formatting issues. Signed-off-by: Matt Conroy <matt@mattconroy.net> Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
This commit is contained in:
parent
a869ef531c
commit
bdb090e386
@ -112,6 +112,24 @@ class ConfigurationForm(forms.Form):
|
|||||||
if old['enabled'] != new['enabled']:
|
if old['enabled'] != new['enabled']:
|
||||||
if new['enabled']:
|
if new['enabled']:
|
||||||
utils.run(['start-and-enable'])
|
utils.run(['start-and-enable'])
|
||||||
|
# Ensure all standard/predefined services are enabled
|
||||||
|
for service_name in utils.PREDEFINED_SERVICES.keys():
|
||||||
|
service = \
|
||||||
|
utils.PREDEFINED_SERVICES[service_name]['params']
|
||||||
|
service = json.dumps(service)
|
||||||
|
|
||||||
|
# Probably should keep track of which services
|
||||||
|
# are enabled since adding the service produces
|
||||||
|
# an error if it is already added. But this works
|
||||||
|
# too.
|
||||||
|
|
||||||
|
try:
|
||||||
|
utils.run(['add-service', '--service', service])
|
||||||
|
except ActionError as exception:
|
||||||
|
if "already exists" in str(exception):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise
|
||||||
messages.success(request, _('PageKite enabled'))
|
messages.success(request, _('PageKite enabled'))
|
||||||
else:
|
else:
|
||||||
utils.run(['stop-and-disable'])
|
utils.run(['stop-and-disable'])
|
||||||
@ -127,43 +145,6 @@ class ConfigurationForm(forms.Form):
|
|||||||
kite_name=new['kite_name'])
|
kite_name=new['kite_name'])
|
||||||
|
|
||||||
|
|
||||||
class StandardServiceForm(forms.Form):
|
|
||||||
"""Creates a form out of PREDEFINED_SERVICES"""
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
"""Add the fields from PREDEFINED_SERVICES"""
|
|
||||||
super(StandardServiceForm, self).__init__(*args, **kwargs)
|
|
||||||
kite = utils.get_kite_details()
|
|
||||||
for name, service in utils.PREDEFINED_SERVICES.items():
|
|
||||||
if name in ('http', 'https'):
|
|
||||||
help_text = service['help_text'].format(kite['kite_name'])
|
|
||||||
else:
|
|
||||||
help_text = service['help_text']
|
|
||||||
self.fields[name] = forms.BooleanField(
|
|
||||||
label=service['label'], help_text=help_text, required=False)
|
|
||||||
|
|
||||||
def save(self, request):
|
|
||||||
formdata = self.cleaned_data
|
|
||||||
for service_name in utils.PREDEFINED_SERVICES.keys():
|
|
||||||
if self.initial[service_name] != formdata[service_name]:
|
|
||||||
service = utils.PREDEFINED_SERVICES[service_name]['params']
|
|
||||||
service = json.dumps(service)
|
|
||||||
if formdata[service_name]:
|
|
||||||
utils.run(['add-service', '--service', service])
|
|
||||||
messages.success(
|
|
||||||
request,
|
|
||||||
_('Service enabled: {name}').format(name=service_name))
|
|
||||||
else:
|
|
||||||
utils.run(['remove-service', '--service', service])
|
|
||||||
messages.success(
|
|
||||||
request,
|
|
||||||
_('Service disabled: {name}').format(
|
|
||||||
name=service_name))
|
|
||||||
|
|
||||||
# Update kite services registered with Name Services module.
|
|
||||||
utils.update_names_module()
|
|
||||||
|
|
||||||
|
|
||||||
class BaseCustomServiceForm(forms.Form):
|
class BaseCustomServiceForm(forms.Form):
|
||||||
"""Basic form functionality to handle a custom service"""
|
"""Basic form functionality to handle a custom service"""
|
||||||
choices = [('http', 'http'), ('https', 'https'), ('raw', 'raw')]
|
choices = [('http', 'http'), ('https', 'https'), ('raw', 'raw')]
|
||||||
|
|||||||
@ -1,34 +0,0 @@
|
|||||||
/**
|
|
||||||
* @licstart The following is the entire license notice for the JavaScript
|
|
||||||
* code in this page.
|
|
||||||
*
|
|
||||||
* This file is part of FreedomBox.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as
|
|
||||||
* published by the Free Software Foundation, either version 3 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* @licend The above is the entire license notice for the JavaScript code
|
|
||||||
* in this page.
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function($) {
|
|
||||||
|
|
||||||
$('#id_pagekite-enabled').change(function() {
|
|
||||||
if ($('#id_pagekite-enabled').prop('checked')) {
|
|
||||||
$('#pagekite-post-enabled-form').show('fast');
|
|
||||||
} else {
|
|
||||||
$('#pagekite-post-enabled-form').hide('fast');
|
|
||||||
}
|
|
||||||
}).change();
|
|
||||||
|
|
||||||
})(jQuery);
|
|
||||||
@ -21,29 +21,74 @@
|
|||||||
{% load bootstrap %}
|
{% load bootstrap %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
{% load pagekite_extras %}
|
||||||
|
|
||||||
|
{% block page_head %}
|
||||||
|
<style type="text/css">
|
||||||
|
div.custom-services span.service {
|
||||||
|
display: inline-block;
|
||||||
|
padding-top: 6px;
|
||||||
|
}
|
||||||
|
form.pull-right button {
|
||||||
|
margin: 10px 5px;
|
||||||
|
}
|
||||||
|
.add-service input.btn {
|
||||||
|
margin: 10px 0px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block configuration %}
|
{% block configuration %}
|
||||||
|
{{ block.super }}
|
||||||
|
|
||||||
<form class="form" method="post">
|
<h3>{% trans "Custom Services" %}</h3>
|
||||||
|
|
||||||
|
<a href="{% url 'pagekite:add-custom-service' %}" class="btn btn-primary"
|
||||||
|
role="button" title="{% trans 'Add Custom Service' %}">
|
||||||
|
<span class="fa fa-plus" aria-hidden="true"></span>
|
||||||
|
{% trans 'Add Custom Service' %}
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h4>{% trans "Existing custom services" %}</h4>
|
||||||
|
|
||||||
|
{% if not custom_services %}
|
||||||
|
<i>{% trans "You don't have any Custom Services enabled" %}</i>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="list-group">
|
||||||
|
{% for service in custom_services %}
|
||||||
|
{% create_pagekite_service_url service kite_name as service_url %}
|
||||||
|
<div class="list-group-item clearfix">
|
||||||
|
<span class="service">
|
||||||
|
<span title="Connects {{ service_url }} to {{ service.backend_host }}:{{ service.backend_port }}">
|
||||||
|
{% if service_url|slice:":4" == "http" %}
|
||||||
|
<a href="{{ service_url }}">{{ service_url }}</a>
|
||||||
|
{% else %}
|
||||||
|
{{ service_url }}
|
||||||
|
{% endif %}
|
||||||
|
<br>
|
||||||
|
{% blocktrans trimmed with backend_host=service.backend_host backend_port=service.backend_port %}
|
||||||
|
connected to {{ backend_host }}:{{ backend_port }}
|
||||||
|
{% endblocktrans %}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<form class="form pull-right" method="post"
|
||||||
|
action="{% url 'pagekite:delete-custom-service' %}">
|
||||||
|
<div style='display:none'>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
{{ service.form.as_p }}
|
||||||
{% include 'bootstrapform/field.html' with field=form.enabled %}
|
</div>
|
||||||
|
<button type="submit" class="btn btn-default"
|
||||||
<div id='pagekite-post-enabled-form'
|
title="{% trans "Delete this service" %}">
|
||||||
style='display: {{ form.enabled.value|yesno:'block,none' }};'>
|
<span class="fa fa-trash-o" aria-hidden="true">
|
||||||
<h3>{% trans "PageKite Account" %}</h3>
|
</span>
|
||||||
{{ form.server_domain|bootstrap_horizontal }}
|
</button>
|
||||||
{{ form.server_port|bootstrap_horizontal }}
|
</form>
|
||||||
{{ form.kite_name|bootstrap_horizontal }}
|
</div>
|
||||||
{{ form.kite_secret|bootstrap_horizontal }}
|
{% endfor %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input type="submit" class="btn btn-primary"
|
|
||||||
value="{% trans "Save settings" %}"/>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block page_js %}
|
|
||||||
<script type="text/javascript" src="{% static 'pagekite/pagekite.js' %}"></script>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
{% extends "pagekite_base.html" %}
|
{% extends "base.html" %}
|
||||||
{% comment %}
|
{% comment %}
|
||||||
#
|
#
|
||||||
# This file is part of FreedomBox.
|
# This file is part of FreedomBox.
|
||||||
@ -20,26 +20,14 @@
|
|||||||
|
|
||||||
{% load bootstrap %}
|
{% load bootstrap %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
{% load pagekite_extras %}
|
{% load pagekite_extras %}
|
||||||
|
|
||||||
{% block page_head %}
|
|
||||||
<style type="text/css">
|
|
||||||
div.custom-services span.service {
|
|
||||||
display: inline-block;
|
|
||||||
padding-top: 6px;
|
|
||||||
}
|
|
||||||
form.pull-right button {
|
|
||||||
margin: 10px 5px;
|
|
||||||
}
|
|
||||||
.add-service input.btn {
|
|
||||||
margin: 10px 0px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block configuration %}
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h3>{% trans 'Add custom PageKite service' %}</h3>
|
||||||
<div class="alert alert-warning" role="alert">
|
<div class="alert alert-warning" role="alert">
|
||||||
{% blocktrans trimmed %}
|
{% blocktrans trimmed %}
|
||||||
<b>Warning:</b><br>Your PageKite frontend server may not support
|
<b>Warning:</b><br>Your PageKite frontend server may not support
|
||||||
@ -49,66 +37,15 @@
|
|||||||
{% endblocktrans %}
|
{% endblocktrans %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row custom-services">
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<form class="form add-service" method="post">
|
|
||||||
<h4>{% trans "Create a custom service" %}</h4>
|
|
||||||
{{ form|bootstrap_horizontal:'col-lg-6' }}
|
|
||||||
|
|
||||||
|
<form class="form" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|
||||||
<div class="form-group">
|
{{ form|bootstrap }}
|
||||||
<div class="col-lg-offset-6 col-lg-6">
|
|
||||||
<input type="submit" class="btn btn-primary"
|
<input type="submit" class="btn btn-primary"
|
||||||
value="{% trans "Add Service" %}"/>
|
value="{% trans "Submit" %}"/>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<h4>{% trans "Existing custom services" %}</h4>
|
|
||||||
|
|
||||||
{% if not custom_services %}
|
|
||||||
<i>{% trans "You don't have any Custom Services enabled" %}</i>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<div class="list-group">
|
|
||||||
{% for service in custom_services %}
|
|
||||||
{% create_pagekite_service_url service kite_name as service_url %}
|
|
||||||
<div class="list-group-item clearfix">
|
|
||||||
<span class="service">
|
|
||||||
<span title="Connects {{ service_url }} to {{ service.backend_host }}:{{ service.backend_port }}">
|
|
||||||
{% if service_url|slice:":4" == "http" %}
|
|
||||||
<a href="{{ service_url }}">{{ service_url }}</a>
|
|
||||||
{% else %}
|
|
||||||
{{ service_url }}
|
|
||||||
{% endif %}
|
|
||||||
<br>
|
|
||||||
{% blocktrans trimmed with backend_host=service.backend_host backend_port=service.backend_port %}
|
|
||||||
connected to {{ backend_host }}:{{ backend_port }}
|
|
||||||
{% endblocktrans %}
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
<form class="form pull-right" method="post"
|
|
||||||
action="{% url 'pagekite:delete-custom-service' %}">
|
|
||||||
<div style='display:none'>
|
|
||||||
{% csrf_token %}
|
|
||||||
{{ service.form.as_p }}
|
|
||||||
</div>
|
|
||||||
<button type="submit" class="btn btn-default"
|
|
||||||
title="{% trans "Delete this service" %}">
|
|
||||||
<span class="fa fa-trash-o" aria-hidden="true">
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
@ -20,15 +20,12 @@ URLs for the PageKite module
|
|||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
from .views import (ConfigurationView, CustomServiceView, DeleteServiceView,
|
from .views import (ConfigurationView, AddCustomServiceView, DeleteServiceView)
|
||||||
StandardServiceView)
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^sys/pagekite/$', ConfigurationView.as_view(), name='index'),
|
url(r'^sys/pagekite/$', ConfigurationView.as_view(), name='index'),
|
||||||
url(r'^sys/pagekite/services/standard/$', StandardServiceView.as_view(),
|
url(r'^sys/pagekite/services/custom/add/$', AddCustomServiceView.as_view(),
|
||||||
name='standard-services'),
|
name='add-custom-service'),
|
||||||
url(r'^sys/pagekite/services/custom/$', CustomServiceView.as_view(),
|
|
||||||
name='custom-services'),
|
|
||||||
url(r'^sys/pagekite/services/custom/delete/$', DeleteServiceView.as_view(),
|
url(r'^sys/pagekite/services/custom/delete/$', DeleteServiceView.as_view(),
|
||||||
name='delete-custom-service'),
|
name='delete-custom-service'),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
from django.views.generic import TemplateView, View
|
from django.views.generic import TemplateView, View
|
||||||
from django.views.generic.edit import FormView
|
from django.views.generic.edit import FormView
|
||||||
|
|
||||||
@ -25,20 +24,7 @@ from plinth.modules import pagekite
|
|||||||
|
|
||||||
from . import utils
|
from . import utils
|
||||||
from .forms import (AddCustomServiceForm, ConfigurationForm,
|
from .forms import (AddCustomServiceForm, ConfigurationForm,
|
||||||
DeleteCustomServiceForm, StandardServiceForm)
|
DeleteCustomServiceForm)
|
||||||
|
|
||||||
subsubmenu = [{
|
|
||||||
'url': reverse_lazy('pagekite:index'),
|
|
||||||
'text': _('Configure')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'url': reverse_lazy('pagekite:standard-services'),
|
|
||||||
'text': _('Standard Services')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'url': reverse_lazy('pagekite:custom-services'),
|
|
||||||
'text': _('Custom Services')
|
|
||||||
}]
|
|
||||||
|
|
||||||
|
|
||||||
class ContextMixin(object):
|
class ContextMixin(object):
|
||||||
@ -54,7 +40,6 @@ class ContextMixin(object):
|
|||||||
context['name'] = pagekite.name
|
context['name'] = pagekite.name
|
||||||
context['description'] = pagekite.description
|
context['description'] = pagekite.description
|
||||||
context['manual_page'] = pagekite.manual_page
|
context['manual_page'] = pagekite.manual_page
|
||||||
context['subsubmenu'] = subsubmenu
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def dispatch(self, *args, **kwargs):
|
def dispatch(self, *args, **kwargs):
|
||||||
@ -66,14 +51,14 @@ class DeleteServiceView(ContextMixin, View):
|
|||||||
form = DeleteCustomServiceForm(request.POST)
|
form = DeleteCustomServiceForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
form.delete(request)
|
form.delete(request)
|
||||||
return HttpResponseRedirect(reverse('pagekite:custom-services'))
|
return HttpResponseRedirect(reverse('pagekite:index'))
|
||||||
|
|
||||||
|
|
||||||
class CustomServiceView(ContextMixin, TemplateView):
|
class AddCustomServiceView(ContextMixin, TemplateView):
|
||||||
template_name = 'pagekite_custom_services.html'
|
template_name = 'pagekite_custom_services.html'
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
context = super(CustomServiceView, self).get_context_data(
|
context = super(AddCustomServiceView, self).get_context_data(
|
||||||
*args, **kwargs)
|
*args, **kwargs)
|
||||||
unused, custom_services = utils.get_pagekite_services()
|
unused, custom_services = utils.get_pagekite_services()
|
||||||
for service in custom_services:
|
for service in custom_services:
|
||||||
@ -99,21 +84,7 @@ class CustomServiceView(ContextMixin, TemplateView):
|
|||||||
|
|
||||||
context = self.get_context_data()
|
context = self.get_context_data()
|
||||||
context['form'] = form
|
context['form'] = form
|
||||||
|
return HttpResponseRedirect(reverse('pagekite:index'))
|
||||||
return self.render_to_response(context)
|
|
||||||
|
|
||||||
|
|
||||||
class StandardServiceView(ContextMixin, FormView):
|
|
||||||
template_name = 'pagekite_standard_services.html'
|
|
||||||
form_class = StandardServiceForm
|
|
||||||
success_url = reverse_lazy('pagekite:standard-services')
|
|
||||||
|
|
||||||
def get_initial(self):
|
|
||||||
return utils.get_pagekite_services()[0]
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
form.save(self.request)
|
|
||||||
return super(StandardServiceView, self).form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
class ConfigurationView(ContextMixin, FormView):
|
class ConfigurationView(ContextMixin, FormView):
|
||||||
@ -122,6 +93,19 @@ class ConfigurationView(ContextMixin, FormView):
|
|||||||
prefix = 'pagekite'
|
prefix = 'pagekite'
|
||||||
success_url = reverse_lazy('pagekite:index')
|
success_url = reverse_lazy('pagekite:index')
|
||||||
|
|
||||||
|
def get_context_data(self, *args, **kwargs):
|
||||||
|
context = super(ConfigurationView, self).get_context_data(
|
||||||
|
*args, **kwargs)
|
||||||
|
unused, custom_services = utils.get_pagekite_services()
|
||||||
|
for service in custom_services:
|
||||||
|
service['form'] = AddCustomServiceForm(initial=service)
|
||||||
|
context['custom_services'] = [
|
||||||
|
utils.prepare_service_for_display(service)
|
||||||
|
for service in custom_services
|
||||||
|
]
|
||||||
|
context.update(utils.get_kite_details())
|
||||||
|
return context
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
return utils.get_pagekite_config()
|
return utils.get_pagekite_config()
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user