]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/views/auth.py
If you're a superuser viweing a user auth settings, don't present the option to add...
[osqa.git] / forum / views / auth.py
index 3d615750e0d085599fdb1d652a10aba0d9301d8e..23059e2f7a11fda1f919047d5d732225bc6d6e94 100644 (file)
@@ -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:
@@ -257,14 +259,12 @@ 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():
@@ -283,7 +283,7 @@ def auth_settings(request):
                 
             user_.set_password(form.cleaned_data['password1'])
             user_.save()
-            return HttpResponseRedirect(reverse('user_authsettings'))
+            return HttpResponseRedirect(reverse('user_authsettings', kwargs={'id': user_.id}))
     
     form = FormClass(user=user_)
 
@@ -304,6 +304,7 @@ def auth_settings(request):
         })
 
     return render_to_response('auth/auth_settings.html', {
+        'user': user_,
         'form': form,
         'has_password': user_.has_usable_password(),
         'auth_keys': auth_keys_list,
@@ -311,11 +312,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]