X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/410bfa05ee36ed1d99356c443a5f3f6aa3ee9578..9308d78c7f1e4d2a4faf3b98d1b24c262f3b6287:/forum/views/auth.py diff --git a/forum/views/auth.py b/forum/views/auth.py index 0d4e2f3..ebccf0e 100644 --- a/forum/views/auth.py +++ b/forum/views/auth.py @@ -12,9 +12,9 @@ from django.http import get_host import types import datetime -from forum.authentication.forms import SimpleRegistrationForm, SimpleEmailSubscribeForm, \ +from forum.forms import SimpleRegistrationForm, SimpleEmailSubscribeForm, \ TemporaryLoginRequestForm, ChangePasswordForm, SetPasswordForm -from forum.utils.mail import send_email +from forum.utils.mail import send_email, send_template_email from forum.authentication.base import InvalidAuthentication from forum.authentication import AUTH_PROVIDERS @@ -85,7 +85,9 @@ def prepare_provider_signin(request, provider): except InvalidAuthentication, e: request.session['auth_error'] = e.message - return HttpResponseRedirect(reverse('auth_signin')) + return HttpResponseRedirect(reverse('auth_signin')) + else: + raise Http404() def process_provider_signin(request, provider): @@ -115,7 +117,7 @@ def process_provider_signin(request, provider): uassoc = AuthKeyUserAssociation(user=request.user, key=assoc_key, provider=provider) uassoc.save() request.user.message_set.create(message=_('The new credentials are now associated with your account')) - return HttpResponseRedirect(reverse('user_authsettings')) + return HttpResponseRedirect(reverse('user_authsettings', args=[request.user.id])) return HttpResponseRedirect(reverse('auth_signin')) else: @@ -145,13 +147,11 @@ def external_register(request): if User.objects.all().count() == 0: user_.is_superuser = True + user_.is_staff = True user_.save() UserJoinsAction(user=user_, ip=request.META['REMOTE_ADDR']).save() - if not user_.email_isvalid: - send_validation_email(user_) - try: assoc_key = request.session['assoc_key'] auth_provider = request.session['auth_provider'] @@ -169,20 +169,17 @@ def external_register(request): del request.session['assoc_key'] del request.session['auth_provider'] - if user_.email_isvalid: - return login_and_forward(request, user_) - else: - return HttpResponseRedirect(reverse('index')) + return login_and_forward(request, user_, message=_("A welcome email has been sent to your email address. ")) else: provider_class = AUTH_PROVIDERS[request.session['auth_provider']].consumer user_data = provider_class.get_user_data(request.session['assoc_key']) + if not user_data: + user_data = request.session.get('auth_consumer_data', {}) + username = user_data.get('username', '') email = user_data.get('email', '') - if not email: - email = request.session.get('auth_email_request', '') - if email: request.session['auth_validated_email'] = email @@ -218,10 +215,7 @@ def request_temp_login(request): except: hash = ValidationHash.objects.create_new(user, 'templogin', [user.id]) - send_email(_("Temporary login link"), [(user.username, user.email)], "auth/temp_login_email.html", { - 'temp_login_code': hash, - 'user': user - }) + send_template_email([user], "auth/temp_login_email.html", {'temp_login_code': hash}) request.user.message_set.create(message=_("An email has been sent with your temporary login key")) @@ -237,18 +231,11 @@ def temp_signin(request, user, code): user = get_object_or_404(User, id=user) if (ValidationHash.objects.validate(code, user, 'templogin', [user.id])): - return login_and_forward(request, user, reverse('user_authsettings'), + return login_and_forward(request, user, reverse('user_authsettings', kwargs={'id': user.id}), _("You are logged in with a temporary access key, please take the time to fix your issue with authentication.")) else: raise Http404() - -def send_validation_email(user): - hash = ValidationHash.objects.create_new(user, 'email', [user.email]) - send_email(_("Email Validation"), [(user.username, user.email)], "auth/email_validation.html", { - 'validation_code': hash, - 'user': user - }) - + def validate_email(request, user, code): user = get_object_or_404(User, id=user) @@ -260,35 +247,36 @@ def validate_email(request, user, code): raise Http404() @login_required -def auth_settings(request): - """ - change password view. +def auth_settings(request, id): + user_ = get_object_or_404(User, id=id) + + if not (request.user.is_superuser or request.user == user_): + return HttpResponseForbidden() - url : /changepw/ - template: authopenid/changepw.html - """ - user_ = request.user auth_keys = user_.auth_keys.all() - if user_.has_usable_password(): - FormClass = ChangePasswordForm - else: + if request.user.is_superuser or (not user_.has_usable_password()): FormClass = SetPasswordForm + else: + FormClass = ChangePasswordForm if request.POST: form = FormClass(request.POST, user=user_) if form.is_valid(): - if user_.has_usable_password(): - request.user.message_set.create(message=_("Your password was changed")) - else: - request.user.message_set.create(message=_("New password set")) - FormClass = ChangePasswordForm - + is_new_pass = not user_.has_usable_password() user_.set_password(form.cleaned_data['password1']) user_.save() - return HttpResponseRedirect(reverse('user_authsettings')) - - form = FormClass(user=user_) + + if is_new_pass: + request.user.message_set.create(message=_("New password set")) + if not request.user.is_superuser: + form = ChangePasswordForm(user=user_) + else: + request.user.message_set.create(message=_("Your password was changed")) + + return HttpResponseRedirect(reverse('user_authsettings', kwargs={'id': user_.id})) + else: + form = FormClass(user=user_) auth_keys_list = [] @@ -307,6 +295,8 @@ def auth_settings(request): }) return render_to_response('auth/auth_settings.html', { + 'view_user': user_, + "can_view_private": (user_ == request.user) or request.user.is_superuser, 'form': form, 'has_password': user_.has_usable_password(), 'auth_keys': auth_keys_list, @@ -314,11 +304,12 @@ def auth_settings(request): def remove_external_provider(request, id): association = get_object_or_404(AuthKeyUserAssociation, id=id) - if not association.user == request.user: + if not (request.user.is_superuser or request.user == association.user): return HttpResponseForbidden() + request.user.message_set.create(message=_("You removed the association with %s") % association.provider) association.delete() - return HttpResponseRedirect(reverse('user_authsettings')) + return HttpResponseRedirect(reverse('user_authsettings', kwargs={'id': association.user.id})) def newquestion_signin_action(user): question = Question.objects.filter(author=user).order_by('-added_at')[0] @@ -338,7 +329,17 @@ def login_and_forward(request, user, forward=None, message=None): user.backend = "django.contrib.auth.backends.ModelBackend" login(request, user) - #user_logged_in.send(user=user,old_session=old_session,sender=None) + temp_data = request.session.pop('temp_node_data', None) + if temp_data: + request.POST = temp_data + node_type = request.session.pop('temp_node_type') + + if node_type == "question": + from forum.views.writers import ask + return ask(request) + elif node_type == "answer": + from forum.views.writers import answer + return answer(request, request.session.pop('temp_question_id')) if not forward: signin_action = request.session.get('on_signin_action', None)