use django-stronghold for authentication handling (instead of @login_required)

This commit is contained in:
fonfon 2014-11-11 15:32:40 +01:00 committed by Sunil Mohan Adapa
parent 0335ee9c32
commit 824a9091c1
20 changed files with 21 additions and 71 deletions

View File

@ -188,6 +188,7 @@ def configure_django():
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
'django.contrib.messages', 'django.contrib.messages',
'stronghold',
'plinth'] 'plinth']
applications += module_loader.get_modules_to_load() applications += module_loader.get_modules_to_load()
sessions_directory = os.path.join(cfg.data_dir, 'sessions') sessions_directory = os.path.join(cfg.data_dir, 'sessions')
@ -217,6 +218,7 @@ def configure_django():
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'stronghold.middleware.LoginRequiredMiddleware',
'plinth.modules.first_boot.middleware.FirstBootMiddleware', 'plinth.modules.first_boot.middleware.FirstBootMiddleware',
), ),
ROOT_URLCONF='plinth.urls', ROOT_URLCONF='plinth.urls',
@ -224,6 +226,7 @@ def configure_django():
SESSION_ENGINE='django.contrib.sessions.backends.file', SESSION_ENGINE='django.contrib.sessions.backends.file',
SESSION_FILE_PATH=sessions_directory, SESSION_FILE_PATH=sessions_directory,
STATIC_URL='/'.join([cfg.server_dir, 'static/']).replace('//', '/'), STATIC_URL='/'.join([cfg.server_dir, 'static/']).replace('//', '/'),
STRONGHOLD_PUBLIC_NAMED_URLS=('lib:login',),
TEMPLATE_CONTEXT_PROCESSORS=context_processors, TEMPLATE_CONTEXT_PROCESSORS=context_processors,
USE_X_FORWARDED_HOST=bool(cfg.use_x_forwarded_host)) USE_X_FORWARDED_HOST=bool(cfg.use_x_forwarded_host))
django.setup() django.setup()

View File

@ -21,7 +21,6 @@ Plinth module for configuring timezone, hostname etc.
from django import forms from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core import validators from django.core import validators
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
@ -116,7 +115,6 @@ def init():
menu.add_urlname(_('Configure'), 'glyphicon-cog', 'config:index', 10) menu.add_urlname(_('Configure'), 'glyphicon-cog', 'config:index', 10)
@login_required
def index(request): def index(request):
"""Serve the configuration form""" """Serve the configuration form"""
status = get_status() status = get_status()

View File

@ -20,7 +20,6 @@ Plinth module to configure a Deluge web client.
""" """
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
@ -30,7 +29,6 @@ from plinth import package
from plinth.modules import deluge from plinth.modules import deluge
@login_required
@package.required(['deluged', 'deluge-web']) @package.required(['deluged', 'deluge-web'])
def index(request): def index(request):
"""Serve configuration page.""" """Serve configuration page."""

View File

@ -19,7 +19,6 @@
Plinth module for running diagnostics Plinth module for running diagnostics
""" """
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
@ -35,14 +34,12 @@ def init():
"diagnostics:index", 30) "diagnostics:index", 30)
@login_required
def index(request): def index(request):
"""Serve the index page""" """Serve the index page"""
return TemplateResponse(request, 'diagnostics.html', return TemplateResponse(request, 'diagnostics.html',
{'title': _('System Diagnostics')}) {'title': _('System Diagnostics')})
@login_required
def test(request): def test(request):
"""Run diagnostics and the output page""" """Run diagnostics and the output page"""
output = '' output = ''

View File

@ -17,7 +17,6 @@
from django import forms from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core import validators from django.core import validators
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
@ -47,7 +46,6 @@ def init():
'dynamicdns:index', 40) 'dynamicdns:index', 40)
@login_required
@package.required(['ez-ipupdate']) @package.required(['ez-ipupdate'])
def index(request): def index(request):
"""Serve dynamic DNS page""" """Serve dynamic DNS page"""
@ -205,7 +203,6 @@ class ConfigureForm(forms.Form):
LOGGER.info('no password given') LOGGER.info('no password given')
@login_required
@package.required(['ez-ipupdate']) @package.required(['ez-ipupdate'])
def configure(request): def configure(request):
"""Serve the configuration form""" """Serve the configuration form"""
@ -227,7 +224,6 @@ def configure(request):
'subsubmenu': subsubmenu}) 'subsubmenu': subsubmenu})
@login_required
@package.required(['ez-ipupdate']) @package.required(['ez-ipupdate'])
def statuspage(request): def statuspage(request):
"""Serve the status page """ """Serve the status page """

View File

@ -19,7 +19,6 @@
Plinth module to configure a firewall Plinth module to configure a firewall
""" """
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
import logging import logging
@ -42,7 +41,6 @@ def init():
service_enabled.connect(on_service_enabled) service_enabled.connect(on_service_enabled)
@login_required
@package.required(['firewalld']) @package.required(['firewalld'])
def index(request): def index(request):
"""Serve introcution page""" """Serve introcution page"""

View File

@ -19,6 +19,7 @@ import os
from gettext import gettext as _ from gettext import gettext as _
from django.http import Http404 from django.http import Http404
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from stronghold.decorators import public
from plinth import cfg, __version__ from plinth import cfg, __version__
@ -38,12 +39,14 @@ def init():
menu.add_urlname(_('About'), 'glyphicon-star', 'help:about', 100) menu.add_urlname(_('About'), 'glyphicon-star', 'help:about', 100)
@public
def index(request): def index(request):
"""Serve the index page""" """Serve the index page"""
return TemplateResponse(request, 'help_index.html', return TemplateResponse(request, 'help_index.html',
{'title': _('Documentation and FAQ')}) {'title': _('Documentation and FAQ')})
@public
def about(request): def about(request):
"""Serve the about page""" """Serve the about page"""
context = { context = {
@ -53,6 +56,7 @@ def about(request):
return TemplateResponse(request, 'help_about.html', context) return TemplateResponse(request, 'help_about.html', context)
@public
def helppage(request, page): def helppage(request, page):
"""Serve a help page from the 'doc' directory""" """Serve a help page from the 'doc' directory"""
try: try:

View File

@ -20,7 +20,6 @@ Plinth module for configuring ikiwiki
""" """
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.shortcuts import redirect from django.shortcuts import redirect
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
@ -45,7 +44,6 @@ def on_install():
actions.superuser_run('ikiwiki', ['setup']) actions.superuser_run('ikiwiki', ['setup'])
@login_required
@package.required(['ikiwiki', @package.required(['ikiwiki',
'gcc', 'gcc',
'libc6-dev', 'libc6-dev',
@ -98,7 +96,6 @@ def _apply_changes(request, old_status, new_status):
messages.info(request, _('Setting unchanged')) messages.info(request, _('Setting unchanged'))
@login_required
def manage(request): def manage(request):
"""Manage existing wikis and blogs.""" """Manage existing wikis and blogs."""
sites = actions.run('ikiwiki', ['get-sites']).split('\n') sites = actions.run('ikiwiki', ['get-sites']).split('\n')
@ -110,7 +107,6 @@ def manage(request):
'sites': sites}) 'sites': sites})
@login_required
def create(request): def create(request):
"""Form to create a wiki or blog.""" """Form to create a wiki or blog."""
form = None form = None
@ -161,7 +157,6 @@ def _create_blog(request, name, admin_name, admin_password):
messages.error(request, _('Could not create blog: %s') % err) messages.error(request, _('Could not create blog: %s') % err)
@login_required
def delete(request, name): def delete(request, name):
"""Handle deleting wikis/blogs, showing a confirmation dialog first. """Handle deleting wikis/blogs, showing a confirmation dialog first.

View File

@ -20,7 +20,6 @@ Plinth module for configuring Mumble Server
""" """
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
import logging import logging
@ -38,7 +37,6 @@ def on_install():
mumble.service.notify_enabled(None, True) mumble.service.notify_enabled(None, True)
@login_required
@package.required(['mumble-server'], on_install=on_install) @package.required(['mumble-server'], on_install=on_install)
def index(request): def index(request):
"""Serve configuration page.""" """Serve configuration page."""

View File

@ -16,7 +16,6 @@
# #
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.shortcuts import redirect from django.shortcuts import redirect
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
@ -45,7 +44,6 @@ def init():
menu.add_urlname(_('Networks'), 'glyphicon-signal', 'networks:index', 18) menu.add_urlname(_('Networks'), 'glyphicon-signal', 'networks:index', 18)
@login_required
@package.required(['network-manager']) @package.required(['network-manager'])
def index(request): def index(request):
"""Show connection list.""" """Show connection list."""
@ -57,7 +55,6 @@ def index(request):
'connections': connections}) 'connections': connections})
@login_required
def edit(request, uuid): def edit(request, uuid):
"""Serve connection editing form.""" """Serve connection editing form."""
try: try:
@ -148,7 +145,6 @@ def edit(request, uuid):
'form': form}) 'form': form})
@login_required
def activate(request, uuid): def activate(request, uuid):
"""Activate the connection.""" """Activate the connection."""
try: try:
@ -166,7 +162,6 @@ def activate(request, uuid):
return redirect(reverse_lazy('networks:index')) return redirect(reverse_lazy('networks:index'))
@login_required
def deactivate(request, uuid): def deactivate(request, uuid):
"""Deactivate the connection.""" """Deactivate the connection."""
try: try:
@ -180,7 +175,6 @@ def deactivate(request, uuid):
return redirect(reverse_lazy('networks:index')) return redirect(reverse_lazy('networks:index'))
@login_required
def scan(request): def scan(request):
"""Show a list of nearby visible Wi-Fi access points.""" """Show a list of nearby visible Wi-Fi access points."""
access_points = network.wifi_scan() access_points = network.wifi_scan()
@ -190,7 +184,6 @@ def scan(request):
'access_points': access_points}) 'access_points': access_points})
@login_required
def add(request): def add(request):
"""Serve the connection type selection form.""" """Serve the connection type selection form."""
form = None form = None
@ -211,7 +204,6 @@ def add(request):
'form': form}) 'form': form})
@login_required
def add_ethernet(request): def add_ethernet(request):
"""Serve ethernet connection create form.""" """Serve ethernet connection create form."""
form = None form = None
@ -237,7 +229,6 @@ def add_ethernet(request):
'form': form}) 'form': form})
@login_required
def add_wifi(request, ssid=None): def add_wifi(request, ssid=None):
"""Serve wifi connection create form.""" """Serve wifi connection create form."""
form = None form = None
@ -280,7 +271,6 @@ def add_wifi(request, ssid=None):
'form': form}) 'form': form})
@login_required
def delete(request, uuid): def delete(request, uuid):
"""Handle deleting connections, showing a confirmation dialog first. """Handle deleting connections, showing a confirmation dialog first.

View File

@ -17,7 +17,6 @@
from django import forms from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
@ -47,7 +46,6 @@ def init():
is_external=True, enabled=status['enabled']) is_external=True, enabled=status['enabled'])
@login_required
@package.required(['postgresql', 'php5-pgsql', 'owncloud']) @package.required(['postgresql', 'php5-pgsql', 'owncloud'])
def index(request): def index(request):
"""Serve the ownCloud configuration page""" """Serve the ownCloud configuration page"""

View File

@ -17,7 +17,6 @@
from django import forms from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
import os import os
@ -60,7 +59,6 @@ def init():
menu.add_urlname('Package Manager', 'glyphicon-gift', 'packages:index', 20) menu.add_urlname('Package Manager', 'glyphicon-gift', 'packages:index', 20)
@login_required
def index(request): def index(request):
"""Serve the form""" """Serve the form"""
status = get_status() status = get_status()

View File

@ -20,7 +20,6 @@ URLs for the PageKite module
""" """
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required
from .views import StandardServiceView, CustomServiceView, ConfigurationView, \ from .views import StandardServiceView, CustomServiceView, ConfigurationView, \
DeleteServiceView, index DeleteServiceView, index
@ -28,15 +27,13 @@ from .views import StandardServiceView, CustomServiceView, ConfigurationView, \
urlpatterns = patterns( # pylint: disable-msg=C0103 urlpatterns = patterns( # pylint: disable-msg=C0103
'plinth.modules.pagekite.views', 'plinth.modules.pagekite.views',
url(r'^apps/pagekite/$', login_required(index), name='index'), url(r'^apps/pagekite/$', index, name='index'),
url(r'^apps/pagekite/configure/$', url(r'^apps/pagekite/configure/$', ConfigurationView.as_view(),
login_required(ConfigurationView.as_view()), name='configure'), name='configure'),
url(r'^apps/pagekite/services/standard$', url(r'^apps/pagekite/services/standard$', StandardServiceView.as_view(),
login_required(StandardServiceView.as_view()),
name='standard-services'), name='standard-services'),
url(r'^apps/pagekite/services/custom$', url(r'^apps/pagekite/services/custom$', CustomServiceView.as_view(),
login_required(CustomServiceView.as_view()), name='custom-services'), name='custom-services'),
url(r'^apps/pagekite/services/custom/delete$', url(r'^apps/pagekite/services/custom/delete$', DeleteServiceView.as_view(),
login_required(DeleteServiceView.as_view()),
name='delete-custom-service'), name='delete-custom-service'),
) )

View File

@ -20,7 +20,6 @@ Plinth module for configuring Privoxy Server.
""" """
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
import logging import logging
@ -38,7 +37,6 @@ def on_install():
actions.superuser_run('privoxy', ['setup']) actions.superuser_run('privoxy', ['setup'])
@login_required
@package.required(['privoxy'], on_install=on_install) @package.required(['privoxy'], on_install=on_install)
def index(request): def index(request):
"""Serve configuration page.""" """Serve configuration page."""

View File

@ -20,7 +20,6 @@ Plinth module for configuring Roundcube.
""" """
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
import logging import logging
@ -42,7 +41,6 @@ def on_install():
actions.superuser_run('roundcube', ['setup']) actions.superuser_run('roundcube', ['setup'])
@login_required
@package.required(['sqlite3', 'roundcube', 'roundcube-sqlite3'], @package.required(['sqlite3', 'roundcube', 'roundcube-sqlite3'],
before_install=before_install, on_install=on_install) before_install=before_install, on_install=on_install)
def index(request): def index(request):

View File

@ -21,7 +21,6 @@ Plinth module for configuring Tor
from django import forms from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
@ -43,7 +42,6 @@ def init():
menu.add_urlname('Tor', 'glyphicon-eye-close', 'tor:index', 30) menu.add_urlname('Tor', 'glyphicon-eye-close', 'tor:index', 30)
@login_required
@package.required(['tor']) @package.required(['tor'])
def index(request): def index(request):
"""Service the index page""" """Service the index page"""

View File

@ -20,7 +20,6 @@ Plinth module for configuring Transmission Server
""" """
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
import json import json
@ -42,7 +41,6 @@ def on_install():
actions.superuser_run('transmission', ['enable']) actions.superuser_run('transmission', ['enable'])
@login_required
@package.required(['transmission-daemon'], on_install=on_install) @package.required(['transmission-daemon'], on_install=on_install)
def index(request): def index(request):
"""Serve configuration page.""" """Serve configuration page."""

View File

@ -21,7 +21,6 @@ Plinth module for upgrades
from django import forms from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.views.decorators.http import require_POST from django.views.decorators.http import require_POST
@ -45,7 +44,6 @@ def init():
'upgrades:index', 21) 'upgrades:index', 21)
@login_required
@package.required(['unattended-upgrades']) @package.required(['unattended-upgrades'])
def index(request): def index(request):
"""Serve the index page.""" """Serve the index page."""
@ -54,7 +52,6 @@ def index(request):
'subsubmenu': subsubmenu}) 'subsubmenu': subsubmenu})
@login_required
@require_POST @require_POST
@package.required(['unattended-upgrades']) @package.required(['unattended-upgrades'])
def run(request): def run(request):
@ -84,7 +81,6 @@ run once per day. It will attempt to perform any package upgrades that are \
available.')) available.'))
@login_required
@package.required(['unattended-upgrades']) @package.required(['unattended-upgrades'])
def configure(request): def configure(request):
"""Serve the configuration form.""" """Serve the configuration form."""

View File

@ -20,7 +20,6 @@ URLs for the Users module
""" """
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from . import views from . import views
@ -28,17 +27,14 @@ from . import views
urlpatterns = patterns( urlpatterns = patterns(
'', '',
url(r'^sys/users/$', login_required(views.UserList.as_view()), url(r'^sys/users/$', views.UserList.as_view(), name='index'),
name='index'), url(r'^sys/users/create/$', views.UserCreate.as_view(), name='create'),
url(r'^sys/users/create/$', login_required(views.UserCreate.as_view()), url(r'^sys/users/(?P<slug>[\w.@+-]+)/edit/$', views.UserUpdate.as_view(),
name='create'), name='edit'),
url(r'^sys/users/(?P<slug>[\w.@+-]+)/edit/$', url(r'^sys/users/(?P<slug>[\w.@+-]+)/delete/$', views.UserDelete.as_view(),
login_required(views.UserUpdate.as_view()), name='edit'), name='delete'),
url(r'^sys/users/(?P<slug>[\w.@+-]+)/delete/$',
login_required(views.UserDelete.as_view()), name='delete'),
url(r'^sys/users/(?P<slug>[\w.@+-]+)/change_password/$', url(r'^sys/users/(?P<slug>[\w.@+-]+)/change_password/$',
login_required(views.UserChangePassword.as_view()), views.UserChangePassword.as_view(), name='change_password'),
name='change_password'),
# Add Django's login/logout urls # Add Django's login/logout urls
url(r'^accounts/login/$', 'django.contrib.auth.views.login', url(r'^accounts/login/$', 'django.contrib.auth.views.login',
{'template_name': 'login.html'}, name='login'), {'template_name': 'login.html'}, name='login'),

View File

@ -17,7 +17,6 @@
from django import forms from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
@ -75,7 +74,6 @@ def on_install():
actions.superuser_run('xmpp', ['setup']) actions.superuser_run('xmpp', ['setup'])
@login_required
@package.required(['jwchat', 'ejabberd'], @package.required(['jwchat', 'ejabberd'],
before_install=before_install, before_install=before_install,
on_install=on_install) on_install=on_install)
@ -98,7 +96,6 @@ the XMPP service'))
allowed to register an account through an XMPP client')) allowed to register an account through an XMPP client'))
@login_required
def configure(request): def configure(request):
"""Serve the configuration form""" """Serve the configuration form"""
status = get_status() status = get_status()
@ -196,7 +193,6 @@ class RegisterForm(forms.Form): # pylint: disable-msg=W0232
for vhost in vhosts) for vhost in vhosts)
@login_required
def register(request): def register(request):
"""Serve the registration form.""" """Serve the registration form."""
form = None form = None