Revision ef20ea07 snf-astakos-app/astakos/im/target/local.py
b/snf-astakos-app/astakos/im/target/local.py | ||
---|---|---|
39 | 39 |
from django.utils.translation import ugettext as _ |
40 | 40 |
from django.views.decorators.csrf import csrf_exempt |
41 | 41 |
from django.views.decorators.http import require_http_methods |
42 |
from django.core.urlresolvers import reverse |
|
42 | 43 |
|
43 | 44 |
from astakos.im.util import prepare_response, get_query |
44 | 45 |
from astakos.im.views import requires_anonymous |
45 |
from astakos.im.models import AstakosUser |
|
46 |
from astakos.im.models import AstakosUser, PendingThirdPartyUser
|
|
46 | 47 |
from astakos.im.forms import LoginForm |
47 | 48 |
from astakos.im.settings import RATELIMIT_RETRIES_ALLOWED |
49 |
from astakos.im.settings import ENABLE_LOCAL_ACCOUNT_MIGRATION |
|
48 | 50 |
|
49 | 51 |
from ratelimit.decorators import ratelimit |
50 | 52 |
|
... | ... | |
62 | 64 |
was_limited = getattr(request, 'limited', False) |
63 | 65 |
form = LoginForm(data=request.POST, was_limited=was_limited, request=request) |
64 | 66 |
next = get_query(request).get('next', '') |
67 |
username = get_query(request).get('key') |
|
68 |
|
|
65 | 69 |
if not form.is_valid(): |
66 |
return render_to_response(on_failure, |
|
67 |
{'login_form':form, |
|
68 |
'next':next}, |
|
69 |
context_instance=RequestContext(request)) |
|
70 |
return render_to_response( |
|
71 |
on_failure, |
|
72 |
{'login_form':form, |
|
73 |
'next':next, |
|
74 |
'key':username}, |
|
75 |
context_instance=RequestContext(request) |
|
76 |
) |
|
70 | 77 |
# get the user from the cash |
71 | 78 |
user = form.user_cache |
72 | 79 |
|
... | ... | |
74 | 81 |
if not user: |
75 | 82 |
message = _('Cannot authenticate account') |
76 | 83 |
elif not user.is_active: |
77 |
message = _('Inactive account') |
|
84 |
if user.sent_activation: |
|
85 |
message = _('Your request is pending activation') |
|
86 |
else: |
|
87 |
message = _('You have not followed the activation link') |
|
78 | 88 |
if message: |
79 | 89 |
messages.add_message(request, messages.ERROR, message) |
80 | 90 |
return render_to_response(on_failure, |
81 | 91 |
{'form':form}, |
82 | 92 |
context_instance=RequestContext(request)) |
83 | 93 |
|
84 |
return prepare_response(request, user, next) |
|
94 |
# hook for switching account to use third party authentication |
|
95 |
if ENABLE_LOCAL_ACCOUNT_MIGRATION and username: |
|
96 |
try: |
|
97 |
new = PendingThirdPartyUser.objects.get( |
|
98 |
username=username) |
|
99 |
except: |
|
100 |
messages.error( |
|
101 |
request, |
|
102 |
_('Account failed to switch to %(provider)s' % locals()) |
|
103 |
) |
|
104 |
return render_to_response( |
|
105 |
on_failure, |
|
106 |
{'login_form':form, |
|
107 |
'next':next}, |
|
108 |
context_instance=RequestContext(request) |
|
109 |
) |
|
110 |
else: |
|
111 |
user.provider = new.provider |
|
112 |
user.third_party_identifier = new.third_party_identifier |
|
113 |
user.save() |
|
114 |
new.delete() |
|
115 |
messages.success( |
|
116 |
request, |
|
117 |
_('Account successfully switched to %(provider)s' % user.__dict__) |
|
118 |
) |
|
119 |
return prepare_response(request, user, next) |
Also available in: Unified diff