Revision dd5f8f4d snf-astakos-app/astakos/im/target/google.py

b/snf-astakos-app/astakos/im/target/google.py
45 45

  
46 46
from urlparse import urlunsplit, urlsplit
47 47

  
48
from astakos.im.util import prepare_response, get_context
48
from astakos.im.util import prepare_response, get_context, login_url
49 49
from astakos.im.views import requires_anonymous, render_response, \
50 50
        requires_auth_provider
51 51
from astakos.im.settings import ENABLE_LOCAL_ACCOUNT_MIGRATION, BASEURL
......
54 54
from astakos.im.activation_backends import get_backend, SimpleBackend
55 55
from astakos.im import settings
56 56
from astakos.im import auth_providers
57
from astakos.im.target import add_pending_auth_provider, get_pending_key, \
58
    handle_third_party_signup
57 59

  
58 60
import logging
59 61
import time
......
97 99
    if force_login:
98 100
        params['approval_prompt'] = 'force'
99 101

  
102
    if request.GET.get('key', None):
103
        request.session['pending_key'] = request.GET.get('key')
104

  
100 105
    url = "%s?%s" % (authenticate_url, urllib.urlencode(params))
101 106
    return HttpResponseRedirect(url)
102 107

  
......
143 148
    provider_info = access_token_data
144 149
    affiliation = 'Google.com'
145 150

  
151
    third_party_key = get_pending_key(request)
152

  
146 153
    # an existing user accessed the view
147 154
    if request.user.is_authenticated():
148 155
        if request.user.has_auth_provider('google', identifier=userid):
......
172 179
            # authenticate user
173 180
            response = prepare_response(request,
174 181
                                    user,
182
                                    userid,
175 183
                                    request.GET.get('next'),
176 184
                                    'renew' in request.GET)
177 185
            messages.success(request, _(astakos_messages.LOGIN_SUCCESS))
186
            add_pending_auth_provider(request, third_party_key)
178 187
            response.set_cookie('astakos_last_login_method', 'google')
179 188
            return response
180 189
        else:
181 190
            message = user.get_inactive_message()
182 191
            messages.error(request, message)
183
            return HttpResponseRedirect(reverse('login'))
192
            return HttpResponseRedirect(login_url(request))
184 193

  
185 194
    except AstakosUser.DoesNotExist, e:
186
        provider = auth_providers.get_provider('google')
187
        if not provider.is_available_for_create():
188
            messages.error(request,
189
                           _(astakos_messages.AUTH_PROVIDER_INVALID_LOGIN))
190
            return HttpResponseRedirect(reverse('login'))
191

  
192
        # eppn not stored in astakos models, create pending profile
193
        user, created = PendingThirdPartyUser.objects.get_or_create(
194
            third_party_identifier=userid,
195
            provider='google',
196
        )
197
        # update pending user
198
        user.affiliation = affiliation
199
        user.info = json.dumps(provider_info)
200
        user.generate_token()
201
        user.save()
202

  
203
        extra_context['provider'] = 'google'
204
        extra_context['provider_title'] = provider.get_title_display
205
        extra_context['token'] = user.token
206
        extra_context['signup_url'] = reverse('signup') + \
207
                                    "?third_party_token=%s" % user.token
208
        extra_context['add_url'] = reverse('index') + \
209
                                    "?key=%s#other-login-methods" % user.token
210
        extra_context['can_create'] = provider.is_available_for_create()
211
        extra_context['can_add'] = provider.is_available_for_add()
212

  
213

  
214
        return render_response(
215
            template,
216
            context_instance=get_context(request, extra_context)
217
        )
218

  
195
        user_info = {'affiliation': affiliation}
196
        return handle_third_party_signup(request, userid, 'google',
197
                                         third_party_key,
198
                                         provider_info,
199
                                         user_info,
200
                                         template,
201
                                         extra_context)
219 202

  

Also available in: Unified diff