Example #1
0
class BaseRegistrationView(FormView):
    form_class = import_module_or_class(
        app_settings.A2_REGISTRATION_FORM_CLASS)
    template_name = 'registration/registration_form.html'
    title = _('Registration')

    def dispatch(self, request, *args, **kwargs):
        if not getattr(settings, 'REGISTRATION_OPEN', True):
            raise Http404('Registration is not open.')
        self.token = {}
        self.ou = get_default_ou()
        # load pre-filled values
        if request.GET.get('token'):
            try:
                self.token = signing.loads(
                    request.GET.get('token'),
                    max_age=settings.ACCOUNT_ACTIVATION_DAYS * 3600 * 24)
            except (TypeError, ValueError, signing.BadSignature) as e:
                logger.warning(u'registration_view: invalid token: %s', e)
                return HttpResponseBadRequest('invalid token',
                                              content_type='text/plain')
            if 'ou' in self.token:
                self.ou = OrganizationalUnit.objects.get(pk=self.token['ou'])
        self.next_url = self.token.pop(REDIRECT_FIELD_NAME,
                                       utils.select_next_url(request, None))
        return super(BaseRegistrationView,
                     self).dispatch(request, *args, **kwargs)

    def form_valid(self, form):
        email = form.cleaned_data.pop('email')
        for field in form.cleaned_data:
            self.token[field] = form.cleaned_data[field]

        # propagate service to the registration completion view
        if constants.SERVICE_FIELD_NAME in self.request.GET:
            self.token[constants.SERVICE_FIELD_NAME] = \
                self.request.GET[constants.SERVICE_FIELD_NAME]

        self.token.pop(REDIRECT_FIELD_NAME, None)
        self.token.pop('email', None)

        utils.send_registration_mail(self.request,
                                     email,
                                     next_url=self.next_url,
                                     ou=self.ou,
                                     **self.token)
        self.request.session['registered_email'] = email
        return redirect(self.request, 'registration_complete')

    def get_context_data(self, **kwargs):
        context = super(BaseRegistrationView, self).get_context_data(**kwargs)
        parameters = {'request': self.request, 'context': context}
        blocks = [
            utils.get_backend_method(backend, 'registration', parameters)
            for backend in utils.get_backends('AUTH_FRONTENDS')
        ]
        context['frontends'] = collections.OrderedDict(
            (block['id'], block) for block in blocks if block)
        return context
Example #2
0
from django.conf.urls import url
from django.contrib.auth import views as auth_views, REDIRECT_FIELD_NAME
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.contrib import messages
from django.utils.translation import ugettext as _
from django.views.decorators.debug import sensitive_post_parameters

from authentic2.utils import import_module_or_class, redirect
from . import app_settings, decorators, profile_views, hooks
from .views import (logged_in, edit_profile, email_change, email_change_verify, profile)

SET_PASSWORD_FORM_CLASS = import_module_or_class(
        app_settings.A2_REGISTRATION_SET_PASSWORD_FORM_CLASS)
CHANGE_PASSWORD_FORM_CLASS = import_module_or_class(
        app_settings.A2_REGISTRATION_CHANGE_PASSWORD_FORM_CLASS)

@sensitive_post_parameters()
@login_required
@decorators.setting_enabled('A2_REGISTRATION_CAN_CHANGE_PASSWORD')
def password_change_view(request, *args, **kwargs):
    post_change_redirect = kwargs.pop('post_change_redirect', None)
    if 'next_url' in request.POST and request.POST['next_url']:
        post_change_redirect = request.POST['next_url']
    elif REDIRECT_FIELD_NAME in request.GET:
        post_change_redirect = request.GET[REDIRECT_FIELD_NAME]
    elif post_change_redirect is None:
        post_change_redirect = reverse('account_management')
    if not request.user.can_change_password():
        messages.warning(request, _('Password change is forbidden'))
Example #3
0
def get_role_form_class():
    if app_settings.ROLE_FORM_CLASS:
        return import_module_or_class(app_settings.ROLE_FORM_CLASS)
    return RoleEditForm
Example #4
0
def get_role_form_class():
    if app_settings.ROLE_FORM_CLASS:
        return import_module_or_class(app_settings.ROLE_FORM_CLASS)
    return RoleEditForm
Example #5
0
from django.conf.urls import patterns, url
from django.contrib.auth import views as auth_views, REDIRECT_FIELD_NAME
from django.core.urlresolvers import reverse

from authentic2.utils import import_module_or_class
from . import app_settings, decorators, profile_views

SET_PASSWORD_FORM_CLASS = import_module_or_class(
        app_settings.A2_REGISTRATION_SET_PASSWORD_FORM_CLASS)
CHANGE_PASSWORD_FORM_CLASS = import_module_or_class(
        app_settings.A2_REGISTRATION_CHANGE_PASSWORD_FORM_CLASS)

@decorators.setting_enabled('A2_REGISTRATION_CAN_CHANGE_PASSWORD')
def password_change_view(request, *args, **kwargs):
    post_change_redirect = kwargs.pop('post_change_redirect', None)
    if 'next_url' in request.POST and request.POST['next_url']:
        post_change_redirect = request.POST['next_url']
    elif REDIRECT_FIELD_NAME in request.GET:
        post_change_redirect = request.GET[REDIRECT_FIELD_NAME]
    elif post_change_redirect is None:
        post_change_redirect = reverse('account_management')
    kwargs['post_change_redirect'] = post_change_redirect
    extra_context = kwargs.setdefault('extra_context', {})
    extra_context[REDIRECT_FIELD_NAME] = post_change_redirect
    return auth_views.password_change(request, *args, **kwargs)


urlpatterns = patterns('authentic2.views',
    url(r'^logged-in/$', 'logged_in', name='logged-in'),
    url(r'^edit/$', 'edit_profile', name='profile_edit'),
    url(r'^change-email/$', 'email_change', name='email-change'),