From e57aa2ae8528f18893f4a5b50babffbb1c1974ef Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 18 Sep 2016 11:42:21 +0530 Subject: [PATCH] xmpp: Add a view to serve JSXC embed page This is a publicly available view since people should be able to login even without access to Plinth interface. Also avoid double login. There should be no security risk in doing this. --- plinth/modules/xmpp/__init__.py | 13 -------- plinth/modules/xmpp/urls.py | 3 +- plinth/modules/xmpp/views.py | 56 +++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 plinth/modules/xmpp/views.py diff --git a/plinth/modules/xmpp/__init__.py b/plinth/modules/xmpp/__init__.py index 9336c58de..901681c5d 100644 --- a/plinth/modules/xmpp/__init__.py +++ b/plinth/modules/xmpp/__init__.py @@ -28,7 +28,6 @@ from plinth import action_utils from plinth import cfg from plinth import frontpage from plinth import service as service_module -from plinth.views import ServiceView from plinth.signals import pre_hostname_change, post_hostname_change from plinth.signals import domainname_change @@ -97,18 +96,6 @@ def add_shortcut(): description) -class EjabberdServiceView(ServiceView): - service_id = managed_services[0] - template_name = "xmpp.html" - description = description - diagnostics_module_name = "xmpp" - - def get_context_data(self, *args, **kwargs): - context = super().get_context_data(*args, **kwargs) - context['domainname'] = get_domainname() - return context - - def is_enabled(): """Return whether the module is enabled.""" return (action_utils.service_is_enabled('ejabberd') and diff --git a/plinth/modules/xmpp/urls.py b/plinth/modules/xmpp/urls.py index b3efc5252..6b0b8daba 100644 --- a/plinth/modules/xmpp/urls.py +++ b/plinth/modules/xmpp/urls.py @@ -21,9 +21,10 @@ URLs for the XMPP module from django.conf.urls import url -from plinth.modules.xmpp import EjabberdServiceView +from .views import EjabberdServiceView, JsxcView urlpatterns = [ url(r'^apps/xmpp/$', EjabberdServiceView.as_view(), name='index'), + url(r'^apps/xmpp/jsxc/$', JsxcView.as_view(), name='jsxc'), ] diff --git a/plinth/modules/xmpp/views.py b/plinth/modules/xmpp/views.py new file mode 100644 index 000000000..61b4c351f --- /dev/null +++ b/plinth/modules/xmpp/views.py @@ -0,0 +1,56 @@ +# +# This file is part of Plinth. +# +# 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 . +# + +""" +Views for the XMPP module +""" + +from django.views.generic import TemplateView +from django.utils.decorators import method_decorator +from stronghold.decorators import public + +from plinth.modules import xmpp +from plinth.views import ServiceView + + +class EjabberdServiceView(ServiceView): + """Show ejabberd as a service.""" + service_id = xmpp.managed_services[0] + template_name = 'xmpp.html' + description = xmpp.description + diagnostics_module_name = 'xmpp' + + def get_context_data(self, *args, **kwargs): + context = super().get_context_data(*args, **kwargs) + context['domainname'] = xmpp.get_domainname() + return context + + +class JsxcView(TemplateView): + """A simple page to embed Javascript XMPP Client library.""" + template_name = 'jsxc.html' + + @method_decorator(public) + def dispatch(self, *args, **kwargs): + """Dispatch a get, post etc. request.""" + return super().dispatch(*args, **kwargs) + + def get_context_data(self, *args, **kwargs): + """Add domain information to view context.""" + context = super().get_context_data(*args, **kwargs) + context['domainname'] = xmpp.get_domainname() + return context