Using fresh user attributs on ticket creation + auth class as string in config

This commit is contained in:
Valentin Samir 2015-05-30 19:45:59 +02:00
parent 443c7987a9
commit b4a5961886
6 changed files with 28 additions and 30 deletions

View file

@ -10,8 +10,6 @@
# (c) 2015 Valentin Samir # (c) 2015 Valentin Samir
"""Default values for the app's settings""" """Default values for the app's settings"""
from django.conf import settings from django.conf import settings
from . import auth
def setting_default(name, default_value): def setting_default(name, default_value):
"""if the config `name` is not set, set it the `default_value`""" """if the config `name` is not set, set it the `default_value`"""
@ -21,7 +19,7 @@ def setting_default(name, default_value):
setting_default('CAS_LOGIN_TEMPLATE', 'cas_server/login.html') setting_default('CAS_LOGIN_TEMPLATE', 'cas_server/login.html')
setting_default('CAS_WARN_TEMPLATE', 'cas_server/warn.html') setting_default('CAS_WARN_TEMPLATE', 'cas_server/warn.html')
setting_default('CAS_LOGGED_TEMPLATE', 'cas_server/logged.html') setting_default('CAS_LOGGED_TEMPLATE', 'cas_server/logged.html')
setting_default('CAS_AUTH_CLASS', auth.DjangoAuthUser) setting_default('CAS_AUTH_CLASS', 'cas_server.auth.DjangoAuthUser')
setting_default('CAS_ST_LEN', 30) setting_default('CAS_ST_LEN', 30)
setting_default('CAS_TICKET_VALIDITY', 300) setting_default('CAS_TICKET_VALIDITY', 300)
setting_default('CAS_TICKET_TIMEOUT', 24*3600) setting_default('CAS_TICKET_TIMEOUT', 24*3600)
@ -41,6 +39,3 @@ setting_default('CAS_SQL_USER_QUERY', 'SELECT user AS usersame, pass AS ' \
'password, users.* FROM users WHERE user = %s') 'password, users.* FROM users WHERE user = %s')
setting_default('CAS_SQL_PASSWORD_CHECK', 'crypt') # crypt or plain setting_default('CAS_SQL_PASSWORD_CHECK', 'crypt') # crypt or plain
def noop():
"""do nothing"""
pass

View file

@ -9,13 +9,13 @@
# #
# (c) 2015 Valentin Samir # (c) 2015 Valentin Samir
"""forms for the app""" """forms for the app"""
from . import default_settings from .default_settings import settings
from django import forms from django import forms
from django.conf import settings
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from . import models import utils
import models
class UserCredential(forms.Form): class UserCredential(forms.Form):
"""Form used on the login page to retrive user credentials""" """Form used on the login page to retrive user credentials"""
@ -30,17 +30,13 @@ class UserCredential(forms.Form):
def clean(self): def clean(self):
cleaned_data = super(UserCredential, self).clean() cleaned_data = super(UserCredential, self).clean()
auth = settings.CAS_AUTH_CLASS(cleaned_data.get("username")) auth = utils.import_attr(settings.CAS_AUTH_CLASS)(cleaned_data.get("username"))
if auth.test_password(cleaned_data.get("password")): if auth.test_password(cleaned_data.get("password")):
try: try:
user = models.User.objects.get(username=auth.username) user = models.User.objects.get(username=auth.username)
user.attributs = auth.attributs()
user.save() user.save()
except models.User.DoesNotExist: except models.User.DoesNotExist:
user = models.User.objects.create( user = models.User.objects.create(username=auth.username)
username=auth.username,
attributs=auth.attributs()
)
user.save() user.save()
else: else:
raise forms.ValidationError(_(u"Bad user")) raise forms.ValidationError(_(u"Bad user"))

View file

@ -10,15 +10,14 @@
# #
# (c) 2015 Valentin Samir # (c) 2015 Valentin Samir
"""models for the app""" """models for the app"""
from . import default_settings from .default_settings import settings
from django.conf import settings
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q
from django.contrib import messages from django.contrib import messages
from picklefield.fields import PickledObjectField
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils import timezone from django.utils import timezone
from picklefield.fields import PickledObjectField
import re import re
import os import os
@ -27,14 +26,18 @@ from datetime import timedelta
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
from requests_futures.sessions import FuturesSession from requests_futures.sessions import FuturesSession
from . import utils import utils
class User(models.Model): class User(models.Model):
"""A user logged into the CAS""" """A user logged into the CAS"""
username = models.CharField(max_length=30, unique=True) username = models.CharField(max_length=30, unique=True)
attributs = PickledObjectField()
date = models.DateTimeField(auto_now_add=True, auto_now=True) date = models.DateTimeField(auto_now_add=True, auto_now=True)
@property
def attributs(self):
"""return a fresh dict for the user attributs"""
return utils.import_attr(settings.CAS_AUTH_CLASS)(self.username).attributs()
def __unicode__(self): def __unicode__(self):
return self.username return self.username

View file

@ -13,7 +13,7 @@
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from django.views.generic import RedirectView from django.views.generic import RedirectView
from . import views import views
urlpatterns = patterns( urlpatterns = patterns(
'', '',

View file

@ -9,9 +9,9 @@
# #
# (c) 2015 Valentin Samir # (c) 2015 Valentin Samir
"""Some util function for the app""" """Some util function for the app"""
from . import default_settings from .default_settings import settings
from django.conf import settings from django.utils.importlib import import_module
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
@ -20,6 +20,13 @@ import urllib
import random import random
import string import string
def import_attr(path):
"""transform a python module.attr path to the attr"""
if not isinstance(path, str):
return string
module, attr = path.rsplit('.', 1)
return getattr(import_module(module), attr)
def redirect_params(url_name, params=None): def redirect_params(url_name, params=None):
"""Redirect to `url_name` with `params` as querystring""" """Redirect to `url_name` with `params` as querystring"""
url = reverse(url_name) url = reverse(url_name)

View file

@ -10,13 +10,10 @@
# #
# (c) 2015 Valentin Samir # (c) 2015 Valentin Samir
"""views for the app""" """views for the app"""
from . import default_settings from .default_settings import settings
default_settings.noop()
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.conf import settings
from django.contrib import messages from django.contrib import messages
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
@ -29,9 +26,9 @@ import requests
from lxml import etree from lxml import etree
from datetime import timedelta from datetime import timedelta
from . import utils import utils
from . import forms import forms
from . import models import models
class AttributesMixin(object): class AttributesMixin(object):
"""mixin for the attributs methode""" """mixin for the attributs methode"""