redirect to profile page from prepare_response instead of each target
authorSofia Papagiannaki <papagian@gmail.com>
Thu, 24 Nov 2011 14:57:22 +0000 (16:57 +0200)
committerSofia Papagiannaki <papagian@gmail.com>
Thu, 24 Nov 2011 14:57:22 +0000 (16:57 +0200)
Refs: #1584

pithos/im/target/invitation.py
pithos/im/target/local.py
pithos/im/target/shibboleth.py
pithos/im/target/twitter.py
pithos/im/target/util.py
pithos/im/templates/users_profile.html
pithos/im/urls.py
pithos/im/views.py

index f4e1cd8..fa458c4 100644 (file)
@@ -37,8 +37,6 @@ from datetime import datetime
 
 from django.conf import settings
 from django.http import HttpResponseBadRequest
-from django.core.urlresolvers import reverse
-from django.utils.http import urlencode
 
 from pithos.im.models import Invitation
 from pithos.im.target.util import get_or_create_user, prepare_response
@@ -63,9 +61,5 @@ def login(request):
                                 invitation.inviter.level + 1)
     
     next = request.GET.get('next')
-    if settings.FORCE_PROFILE_UPDATE and not user.is_verified:
-        params = urlencode({'next': next})
-        next = reverse('pithos.im.views.users_profile', args=(user.id,))
-        next = next + '?' + params
     
     return prepare_response(request, user, next, 'renew' in request.GET)
index 4e8bea7..832881a 100644 (file)
@@ -34,8 +34,6 @@
 from django.http import HttpResponse, HttpResponseRedirect, HttpResponseBadRequest
 from django.conf import settings
 from django.template.loader import render_to_string
-from django.core.urlresolvers import reverse
-from django.utils.http import urlencode
 
 from pithos.im.target.util import prepare_response
 from pithos.im.models import User
@@ -64,10 +62,6 @@ def login(request):
         return HttpResponseBadRequest('Unverified account')
     
     next = request.POST.get('next')
-    if settings.FORCE_PROFILE_UPDATE and not user.is_verified:
-        params = urlencode({'next': next})
-        next = reverse('pithos.im.views.users_profile', args=(user.id,))
-        next = next + '?' + params
     
     return prepare_response(request, user, next)
 
index 8779876..b7f15fe 100644 (file)
@@ -33,8 +33,6 @@
 
 from django.http import HttpResponseBadRequest
 from django.core.urlresolvers import reverse
-from django.utils.http import urlencode
-from django.conf import settings
 
 from pithos.im.target.util import get_or_create_user, prepare_response
 
@@ -69,14 +67,12 @@ def login(request):
     
     affiliation = tokens.get(Tokens.SHIB_EP_AFFILIATION, '')
     
-    user = get_or_create_user(eppn, realname, affiliation, 0)
-    next = request.GET.get('next')
     if settings.FORCE_PROFILE_UPDATE and not user.is_verified:
         params = urlencode({'next': next})
         next = reverse('pithos.im.views.users_profile', args=(user.id,))
         next = next + '?' + params
     
     return prepare_response(request,
-                            user,
-                            next,
+                            get_or_create_user(eppn, realname, affiliation, 0),
+                            request.GET.get('next'),
                             'renew' in request.GET)
index 01bd42a..4831ab6 100644 (file)
@@ -115,11 +115,6 @@ def authenticated(request):
     uniq = '%s@twitter.com' % access_token['screen_name']
     realname = access_token['user_id']
     
-    user = get_or_create_user(uniq, realname, 'Twitter', 0)
-    next = request_token.get('next')
-    if settings.FORCE_PROFILE_UPDATE and not user.is_verified:
-        params = urlencode({'next': next})
-        next = reverse('pithos.im.views.users_profile', args=(user.id,))
-        next = next + '?' + params
-    
-    return prepare_response(request, user, next)
+    return prepare_response(request,
+                            get_or_create_user(uniq, realname, 'Twitter', 0),
+                            request_token.get('next'))
index c4816ba..20c1cdc 100644 (file)
@@ -40,6 +40,7 @@ from urllib import quote
 from django.conf import settings
 from django.http import HttpResponse
 from django.utils.http import urlencode
+from django.core.urlresolvers import reverse
 
 from pithos.im.models import User
 
@@ -76,6 +77,7 @@ def prepare_response(request, user, next='', renew=False):
     if renew or user.auth_token_expires < datetime.datetime.now():
         user.renew_token()
         user.save()
+        
     if next:
         # TODO: Avoid redirect loops.
         parts = list(urlsplit(next))
@@ -84,6 +86,12 @@ def prepare_response(request, user, next='', renew=False):
             parts[3] = urlencode({'user': user.uniq, 'token': user.auth_token})
             next = urlunsplit(parts)
     
+    if settings.FORCE_PROFILE_UPDATE and not user.is_verified:
+        params = ''
+        if next:
+            params = '?' + urlencode({'next': next})
+        next = reverse('pithos.im.views.users_profile') + params
+    
     response = HttpResponse()
     expire_fmt = user.auth_token_expires.strftime('%a, %d-%b-%Y %H:%M:%S %Z')
     cookie_value = quote(user.uniq + '|' + user.auth_token)
index d564121..fe2745d 100644 (file)
@@ -8,7 +8,7 @@
 
 {% block body %}
 
-<form action="{% url pithos.im.views.users_edit user.id %}" method="post">
+<form action="{% url pithos.im.views.users_edit%}" method="post">
   <div class="clearfix">
     <label for="user-id">ID</label>
     <div class="input">
index 44a1cf6..3dc41e6 100644 (file)
@@ -51,8 +51,8 @@ urlpatterns = patterns('pithos.im.views',
     (r'^admin/invitations/?$', 'invitations_list'),
     (r'^admin/invitations/export/?$', 'invitations_export'),
     
-    (r'^profile/(\d+)/?$', 'users_profile'),
-    (r'^profile/(\d+)/edit/?$', 'users_edit'),
+    (r'^profile/?$', 'users_profile'),
+    (r'^profile/edit/?$', 'users_edit'),
 )
 
 urlpatterns += patterns('pithos.im.target',
index ee1e81e..36d5aae 100644 (file)
@@ -76,25 +76,6 @@ def requires_login(func):
         return func(request, *args)
     return wrapper
 
-def requires_my_login(func):
-    @wraps(func)
-    def wrapper(request, *args):
-        print '>', request.user, args
-        if not settings.BYPASS_ADMIN_AUTH:
-            if not request.user:
-                next = urlencode({'next': request.build_absolute_uri()})
-                login_uri = reverse(index) + '?' + next
-                return HttpResponseRedirect(login_uri)
-            else:
-                user = User.objects.get(uniq=request.user)
-                if user.id != int(args[0]):
-                    next = urlencode({'next': request.build_absolute_uri()})
-                    login_uri = reverse(index) + '?' + next
-                    return HttpResponseRedirect(login_uri)
-        return func(request, *args)
-    return wrapper
-
-
 def requires_admin(func):
     @wraps(func)
     def wrapper(request, *args):
@@ -474,19 +455,19 @@ def users_create(request):
         user.save()
         return redirect(users_info, user.id)
 
-@requires_my_login
-def users_profile(request, user_id):
+@requires_login
+def users_profile(request):
     next = request.GET.get('next')
-    user = User.objects.get(id=user_id)
+    user = User.objects.get(uniq=request.user)
     states = [x[0] for x in User.ACCOUNT_STATE]
     return render_response('users_profile.html',
                             user=user,
                             states=states,
                             next=next)
 
-@requires_my_login
-def users_edit(request, user_id):
-    user = User.objects.get(id=user_id)
+@requires_login
+def users_edit(request):
+    user = User.objects.get(uniq=request.user)
     user.realname = request.POST.get('realname')
     user.affiliation = request.POST.get('affiliation')
     user.is_verified = True