Revision c8d89a3c snf-astakos-app/astakos/im/target/google.py
b/snf-astakos-app/astakos/im/target/google.py | ||
---|---|---|
55 | 55 |
from astakos.im import settings |
56 | 56 |
from astakos.im import auth_providers |
57 | 57 |
from astakos.im.target import add_pending_auth_provider, get_pending_key, \ |
58 |
handle_third_party_signup |
|
58 |
handle_third_party_signup, handle_third_party_login
|
|
59 | 59 |
|
60 | 60 |
import logging |
61 | 61 |
import time |
... | ... | |
156 | 156 |
provider_info = access_token_data |
157 | 157 |
affiliation = 'Google.com' |
158 | 158 |
|
159 |
third_party_key = get_pending_key(request) |
|
160 |
|
|
161 |
# an existing user accessed the view |
|
162 |
if request.user.is_authenticated(): |
|
163 |
if request.user.has_auth_provider('google', identifier=userid): |
|
164 |
return HttpResponseRedirect(reverse('edit_profile')) |
|
165 |
|
|
166 |
# automatically add eppn provider to user |
|
167 |
user = request.user |
|
168 |
if not request.user.can_add_auth_provider('google', |
|
169 |
identifier=userid): |
|
170 |
# TODO: handle existing uuid message separately |
|
171 |
messages.error(request, _(astakos_messages.AUTH_PROVIDER_ADD_FAILED) + |
|
172 |
u' ' + _(astakos_messages.AUTH_PROVIDER_ADD_EXISTS)) |
|
173 |
return HttpResponseRedirect(reverse('edit_profile')) |
|
174 |
|
|
175 |
user.add_auth_provider('google', identifier=userid, |
|
176 |
affiliation=affiliation, |
|
177 |
provider_info=provider_info) |
|
178 |
messages.success(request, astakos_messages.AUTH_PROVIDER_ADDED) |
|
179 |
return HttpResponseRedirect(reverse('edit_profile')) |
|
180 |
|
|
181 | 159 |
try: |
182 |
# astakos user exists ? |
|
183 |
user = AstakosUser.objects.get_auth_provider_user( |
|
184 |
'google', |
|
185 |
identifier=userid |
|
186 |
) |
|
187 |
if user.is_active: |
|
188 |
# authenticate user |
|
189 |
response = prepare_response(request, |
|
190 |
user, |
|
191 |
next_url, |
|
192 |
'renew' in request.GET) |
|
193 |
|
|
194 |
provider = auth_providers.get_provider('google') |
|
195 |
messages.success(request, _(astakos_messages.LOGIN_SUCCESS) % |
|
196 |
_(provider.get_login_message_display)) |
|
197 |
add_pending_auth_provider(request, third_party_key) |
|
198 |
response.set_cookie('astakos_last_login_method', 'google') |
|
199 |
return response |
|
200 |
else: |
|
201 |
message = user.get_inactive_message() |
|
202 |
messages.error(request, message) |
|
203 |
return HttpResponseRedirect(login_url(request)) |
|
204 |
|
|
160 |
return handle_third_party_login(request, 'google', userid, |
|
161 |
provider_info, affiliation) |
|
205 | 162 |
except AstakosUser.DoesNotExist, e: |
163 |
third_party_key = get_pending_key(request) |
|
206 | 164 |
user_info = {'affiliation': affiliation} |
207 | 165 |
return handle_third_party_signup(request, userid, 'google', |
208 | 166 |
third_party_key, |
Also available in: Unified diff