From 7b9b56beacb5dcb4b0cfb96ae9c8c74de94bc1c0 Mon Sep 17 00:00:00 2001 From: Serghei MIHAI Date: Tue, 18 Nov 2014 10:22:36 +0100 Subject: [PATCH] mandatory authentication added --- hobo/default_settings.py | 1 - hobo/static/css/style.css | 14 ++++++++++++++ hobo/templates/hobo/base.html | 6 ++++++ hobo/templates/hobo/login.html | 16 ++++++++++++++++ hobo/urls.py | 12 +++++++++--- hobo/urls_utils.py | 31 +++++++++++++++++++++++++++++++ hobo/views.py | 9 +++++---- 7 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 hobo/templates/hobo/login.html create mode 100644 hobo/urls_utils.py diff --git a/hobo/default_settings.py b/hobo/default_settings.py index 172c105..f74ebc6 100644 --- a/hobo/default_settings.py +++ b/hobo/default_settings.py @@ -41,7 +41,6 @@ INSTALLED_APPS = ( 'gadjo', 'hobo.environment', 'hobo.agent', - 'allauth_authentic2', ) MIDDLEWARE_CLASSES = ( diff --git a/hobo/static/css/style.css b/hobo/static/css/style.css index a8a9f92..364e822 100644 --- a/hobo/static/css/style.css +++ b/hobo/static/css/style.css @@ -42,3 +42,17 @@ a.delete-service:after, a.delete-variable:after, a.delete-tenant:after { position: absolute; top: 0; } + +ul.login li { + list-style-type: none; + margin: .5em auto; +} + +ul.login li ul.errorlist { + margin-left: 10em; +} + +ul.login label { + float: left; + width: 10em; +} \ No newline at end of file diff --git a/hobo/templates/hobo/base.html b/hobo/templates/hobo/base.html index c394374..1e2509d 100644 --- a/hobo/templates/hobo/base.html +++ b/hobo/templates/hobo/base.html @@ -6,3 +6,9 @@ {% block css %} {% endblock %} + +{% if user.is_authenticated %} +{% block logout-url %} +{% url "logout" %} +{% endblock %} +{% endif %} diff --git a/hobo/templates/hobo/login.html b/hobo/templates/hobo/login.html new file mode 100644 index 0000000..3e1ad89 --- /dev/null +++ b/hobo/templates/hobo/login.html @@ -0,0 +1,16 @@ +{% extends "hobo/base.html" %} +{% load i18n %} + +{% block appbar %} +

{% trans "Authentication" %}

+{% endblock %} + +{% block content %} +
+ {% csrf_token %} + +
+{% endblock %} diff --git a/hobo/urls.py b/hobo/urls.py index 18ab34c..88b5004 100644 --- a/hobo/urls.py +++ b/hobo/urls.py @@ -1,13 +1,19 @@ +from django.conf import settings from django.conf.urls import patterns, include, url +from django.contrib.auth.decorators import login_required from django.contrib import admin admin.autodiscover() +from url_utils import decorated_includes + urlpatterns = patterns('', url(r'^$', 'hobo.views.home', name='home'), - url(r'^environment/', include('hobo.environment.urls')), - + url(r'^environment/', decorated_includes(login_required, include('hobo.environment.urls'))), url(r'^hobos.json$', 'hobo.views.hobo'), - url(r'^admin/', include(admin.site.urls)), + url(r'^accounts/login', 'django.contrib.auth.views.login', + {'template_name': 'hobo/login.html'}, name='login'), + url(r'^accounts/logout', 'django.contrib.auth.views.logout', + {'next_page': '/'}, name='logout'), ) diff --git a/hobo/urls_utils.py b/hobo/urls_utils.py new file mode 100644 index 0000000..13c3413 --- /dev/null +++ b/hobo/urls_utils.py @@ -0,0 +1,31 @@ +# Decorating URL includes, + +from django.core.urlresolvers import RegexURLPattern, RegexURLResolver + +class DecoratedURLPattern(RegexURLPattern): + def resolve(self, *args, **kwargs): + result = super(DecoratedURLPattern, self).resolve(*args, **kwargs) + if result: + result.func = self._decorate_with(result.func) + return result + +class DecoratedRegexURLResolver(RegexURLResolver): + def resolve(self, *args, **kwargs): + result = super(DecoratedRegexURLResolver, self).resolve(*args, **kwargs) + if result: + result.func = self._decorate_with(result.func) + return result + +def decorated_includes(func, includes, *args, **kwargs): + urlconf_module, app_name, namespace = includes + + for item in urlconf_module: + if isinstance(item, RegexURLPattern): + item.__class__ = DecoratedURLPattern + item._decorate_with = func + + elif isinstance(item, RegexURLResolver): + item.__class__ = DecoratedRegexURLResolver + item._decorate_with = func + + return urlconf_module, app_name, namespace diff --git a/hobo/views.py b/hobo/views.py index d0b9d3f..ffad3d3 100644 --- a/hobo/views.py +++ b/hobo/views.py @@ -5,6 +5,7 @@ from django.utils.translation import ugettext as _ from django.views.generic.base import TemplateView from django.views.generic import edit from django.core.urlresolvers import reverse +from django.contrib.auth.decorators import login_required from .environment.utils import Zone, get_operational_services from .forms import HoboForm, HoboUpdateForm, get_tenant_model @@ -23,7 +24,7 @@ class Home(TemplateView): context['zones'].append(Zone(_('Environment Settings'), 'settings', 'environment/')) return context -home = Home.as_view() +home = login_required(Home.as_view()) class ManagerHome(edit.CreateView): template_name = 'hobo/manager_home.html' @@ -47,7 +48,7 @@ class ManagerHome(edit.CreateView): self.object.create_schema(True) return response -manager_home = ManagerHome.as_view() +manager_home = login_required(ManagerHome.as_view()) class ManagerUpdateTenant(edit.UpdateView): model = get_tenant_model() @@ -62,7 +63,7 @@ class ManagerUpdateTenant(edit.UpdateView): self.object.create_schema(True) return response -update_tenant = ManagerUpdateTenant.as_view() +update_tenant = login_required(ManagerUpdateTenant.as_view()) class ManagerDeleteTenant(edit.DeleteView): template_name = 'environment/tenant_confirm_delete.html' @@ -71,7 +72,7 @@ class ManagerDeleteTenant(edit.DeleteView): def get_success_url(self): return reverse('manager-home', self.object.id) -delete_tenant = ManagerDeleteTenant.as_view() +delete_tenant = login_required(ManagerDeleteTenant.as_view()) def hobos(request, *args, **kwargs): response = HttpResponse(content_type='application/json')