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