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
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'))
def get_role_form_class(): if app_settings.ROLE_FORM_CLASS: return import_module_or_class(app_settings.ROLE_FORM_CLASS) return RoleEditForm
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'),