Revision c630fee6 snf-astakos-app/astakos/im/target/twitter.py
b/snf-astakos-app/astakos/im/target/twitter.py | ||
---|---|---|
31 | 31 |
# interpreted as representing official policies, either expressed |
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 |
import json |
|
35 |
|
|
34 | 36 |
from django.http import HttpResponseBadRequest |
35 | 37 |
from django.utils.translation import ugettext as _ |
36 | 38 |
from django.contrib import messages |
... | ... | |
51 | 53 |
from astakos.im.forms import LoginForm |
52 | 54 |
from astakos.im.activation_backends import get_backend, SimpleBackend |
53 | 55 |
from astakos.im import settings |
56 |
from astakos.im import auth_providers |
|
54 | 57 |
|
55 | 58 |
import astakos.im.messages as astakos_messages |
56 | 59 |
|
... | ... | |
113 | 116 |
access_token = dict(cgi.parse_qsl(content)) |
114 | 117 |
userid = access_token['user_id'] |
115 | 118 |
username = access_token.get('screen_name', userid) |
119 |
provider_info = {'screen_name': username} |
|
120 |
affiliation = 'Twitter.com' |
|
116 | 121 |
|
117 | 122 |
# an existing user accessed the view |
118 | 123 |
if request.user.is_authenticated(): |
... | ... | |
127 | 132 |
return HttpResponseRedirect(reverse('edit_profile')) |
128 | 133 |
|
129 | 134 |
user.add_auth_provider('twitter', identifier=userid, |
130 |
provider_info={'screen_name': username}) |
|
135 |
affiliation=affiliation, |
|
136 |
provider_info=provider_info) |
|
137 |
messages.success(request, 'Account assigned.') |
|
131 | 138 |
return HttpResponseRedirect(reverse('edit_profile')) |
132 | 139 |
|
133 | 140 |
try: |
... | ... | |
142 | 149 |
user, |
143 | 150 |
request.GET.get('next'), |
144 | 151 |
'renew' in request.GET) |
145 |
elif not user.activation_sent: |
|
152 |
elif not user.activation_sent or not user.email_verified:
|
|
146 | 153 |
message = _('Your request is pending activation') |
147 | 154 |
#TODO: use astakos_messages |
148 | 155 |
if not settings.MODERATION_ENABLED: |
... | ... | |
161 | 168 |
|
162 | 169 |
except AstakosUser.DoesNotExist, e: |
163 | 170 |
#TODO: use astakos_messages |
171 |
provider = auth_providers.get_provider('twitter') |
|
172 |
if not provider.is_available_for_create(): |
|
173 |
return HttpResponseRedirect(reverse('login')) |
|
174 |
|
|
164 | 175 |
# eppn not stored in astakos models, create pending profile |
165 | 176 |
user, created = PendingThirdPartyUser.objects.get_or_create( |
166 | 177 |
third_party_identifier=userid, |
167 | 178 |
provider='twitter', |
179 |
info=json.dumps(provider_info) |
|
168 | 180 |
) |
169 | 181 |
# update pending user |
170 |
user.affiliation = 'Twitter'
|
|
182 |
user.affiliation = affiliation
|
|
171 | 183 |
user.generate_token() |
172 | 184 |
user.save() |
173 | 185 |
|
174 | 186 |
extra_context['provider'] = 'twitter' |
175 | 187 |
extra_context['token'] = user.token |
176 |
extra_context['signup_url'] = reverse('twitter_signup', args=(user.token,)) |
|
188 |
extra_context['signup_url'] = reverse('signup') + \ |
|
189 |
"?third_party_token=%s" % user.token |
|
177 | 190 |
|
178 | 191 |
return render_response( |
179 | 192 |
template, |
180 | 193 |
context_instance=get_context(request, extra_context) |
181 | 194 |
) |
182 | 195 |
|
183 |
|
|
184 |
@requires_auth_provider('twitter', login=True, create=True) |
|
185 |
@require_http_methods(["GET"]) |
|
186 |
@requires_anonymous |
|
187 |
def signup( |
|
188 |
request, |
|
189 |
token, |
|
190 |
backend=None, |
|
191 |
on_creation_template='im/third_party_registration.html', |
|
192 |
extra_context={}): |
|
193 |
|
|
194 |
extra_context = extra_context or {} |
|
195 |
if not token: |
|
196 |
#TODO: use astakos_messages |
|
197 |
return HttpResponseBadRequest(_('Missing key parameter.')) |
|
198 |
|
|
199 |
pending = get_object_or_404(PendingThirdPartyUser, token=token) |
|
200 |
d = pending.__dict__ |
|
201 |
d.pop('_state', None) |
|
202 |
d.pop('id', None) |
|
203 |
d.pop('token', None) |
|
204 |
d.pop('created', None) |
|
205 |
user = AstakosUser(**d) |
|
206 |
|
|
207 |
try: |
|
208 |
backend = backend or get_backend(request) |
|
209 |
except ImproperlyConfigured, e: |
|
210 |
messages.error(request, e) |
|
211 |
else: |
|
212 |
extra_context['form'] = backend.get_signup_form( |
|
213 |
provider='twitter', |
|
214 |
instance=user |
|
215 |
) |
|
216 |
|
|
217 |
extra_context['provider'] = 'twitter' |
|
218 |
extra_context['third_party_token'] = token |
|
219 |
return render_response( |
|
220 |
on_creation_template, |
|
221 |
context_instance=get_context(request, extra_context) |
|
222 |
) |
|
223 |
|
Also available in: Unified diff