def activate_view(request, activation_key, row_level_role_id, user_id, text_id = None): activation_key = activation_key.lower() # Normalize before trying anything with it. activated, user = Profile.objects.activate_user(activation_key) if user: if row_level_role_id and not text_id:# old invitations rl = ObjectUserRole.objects.filter(content_type = ContentType.objects.get_for_model(Text), user__exact = user.id,) if len(rl) == 1 : #in case of a click in the first mail after a sequence of invitation/removal/re-invitation use text.id to recover text_id = rl[0].object_id if text_id: # new invitations rl = ObjectUserRole.objects.filter(object_id__exact = text_id, content_type = ContentType.objects.get_for_model(Text), user__exact = user.id,) if not rl : return HttpResponseRedirect(reverse('unauthorized')) row_level_role_id = rl[0].id if row_level_role_id: inviter_user = get_object_or_404(User,pk = user_id) row_level_role = get_object_or_404(ObjectUserRole,pk = row_level_role_id) if request.method == 'POST': form = BasicRegisterForm(request.POST) if form.is_valid(): data = form.cleaned_data openid_url = data.get('openid_url', None) if not openid_url: # non openid activation user.username = data['username'] user.first_name = data['firstname'] user.last_name = data['lastname'] user.set_password(data['password']) user.save() profile = user.get_profile() profile.preferred_language = data['preferred_language'] profile.is_temp = False profile.save() user.backend = 'django.contrib.auth.backends.ModelBackend' login(request, user) request.session['message'] = _(u"Registration successful !") if row_level_role_id: # directly redirect to text redirect_to = reverse('text-viewandcomment', args=[row_level_role.object.id]) return HttpResponseRedirect(redirect_to) else: return HttpResponseRedirect("/") else: # open id activation # 1. store registration data in session # 2. redirect to openid authentification page # 3. home page redirect will: # - detect the authentification # - create the user # - attach the new user to openid # - login the user request.session[DELAYED_REGISTRATION_SESSION_KEY] = form.cleaned_data from django_openidconsumer.views import begin return begin(request, redirect_to = reverse('openid-complete')) else: form = BasicRegisterForm(initial={'email': user.email}) if not user.get_profile().is_temp: # hack : manual backend setting user.backend = 'django.contrib.auth.backends.ModelBackend' login(request, user) if activated: request.session['message'] = _(u"Welcome, your account has been activated.") if row_level_role_id: # directly redirect to text redirect_to = reverse('text-viewandcomment', args=[row_level_role.object.id]) return HttpResponseRedirect(redirect_to) else: return HttpResponseRedirect("/") text = row_level_role.object # slightly modify form appearance form.fields['email'].help_text = _(u"this is the email which received the invitation (it will never be displayed on the site)") form.fields['email'].widget.attrs['readonly'] = 'readonly' TOU_TXT = get_tou_txt() return render_to_response('accounts/invitation_register.html', {'has_newsletter':settings.HAS_NEWSLETTER, 'TOU_TXT' : TOU_TXT, 'form': form, 'inviter_user' : inviter_user, 'text' : text} , context_instance=RequestContext(request)) else: request.session['message'] = _(u"Invalid activation key.") return HttpResponseRedirect("/")
def register_view(request): next_activate = '' if request.method == 'POST': if is_unattached_openid(request): form = RegisterFormWithoutPw(request.POST) else: form = RegisterForm(request.POST) if form.is_valid(): data = form.cleaned_data if is_unattached_openid(request): pw = '' send = False else: pw = data['password'] send = True if 'openid_url' in data and data['openid_url']: # the user is registering with OpendID authentification request.session[DELAYED_REGISTRATION_SESSION_KEY] = data from django_openidconsumer.views import begin return begin(request, redirect_to = reverse('openid-complete')) else: # no OpenID: # - redirect from an OpenID login # - plain old register user = Profile.objects.create_inactive_user(data['username'], data['email'], pw, data['preferred_language'], send_email = send, next_activate = request.POST.get('next_activate',''), ) user.first_name = data['firstname'] user.last_name = data['lastname'] user.save() # newsletter if data['newsletter'] and settings.HAS_NEWSLETTER and not settings.DEBUG: register_mailman(data['email'], settings.NEWSLETTER_ADR, data['username']) # opend id? if is_unattached_openid(request): # activate user profile = user.get_profile() profile.is_temp = False profile.save() user.is_active = True user.save() # attach it from django_openidauth.models import associate_openid associate_openid(user,request.openid) # login user.backend = 'django.contrib.auth.backends.ModelBackend' login(request, user) request.session['message'] = _(u"OpenId Registration successful!") return HttpResponseRedirect("/") else: request.session['message'] = _(u"Registration successful! Check your email to activate your account.") return HttpResponseRedirect("/") else: if 'django_language' in request.session: default_lang = request.session['django_language'] elif request.LANGUAGE_CODE: default_lang = request.LANGUAGE_CODE else: default_lang = 'en' next_activate = request.GET.get("next_activate",'') if is_unattached_openid(request): form = RegisterFormWithoutPw( initial={'preferred_language': default_lang} ) else: form = RegisterForm( initial={'preferred_language': default_lang} ) TOU_TXT = get_tou_txt() return render_to_response('accounts/register.html', {'has_newsletter':settings.HAS_NEWSLETTER, 'TOU_TXT':TOU_TXT, 'form': form, 'next_activate': base64.b64encode(next_activate), } , context_instance=RequestContext(request))