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