Revision e7cb4085 snf-astakos-app/astakos/im/forms.py
b/snf-astakos-app/astakos/im/forms.py | ||
---|---|---|
87 | 87 |
r'^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$', |
88 | 88 |
re.IGNORECASE) |
89 | 89 |
|
90 |
|
|
90 | 91 |
class StoreUserMixin(object): |
91 | 92 |
|
92 |
def store_user(self, user, request): |
|
93 |
def store_user(self, user, request=None):
|
|
93 | 94 |
""" |
94 | 95 |
WARNING: this should be wrapped inside a transactional view/method. |
95 | 96 |
""" |
... | ... | |
128 | 129 |
Changes the order of fields, and removes the username field. |
129 | 130 |
""" |
130 | 131 |
request = kwargs.pop('request', None) |
132 |
provider = kwargs.pop('provider', 'local') |
|
133 |
|
|
134 |
# we only use LocalUserCreationForm for local provider |
|
135 |
if not provider == 'local': |
|
136 |
raise Exception('Invalid provider') |
|
137 |
|
|
131 | 138 |
if request: |
132 | 139 |
self.ip = request.META.get('REMOTE_ADDR', |
133 |
request.META.get('HTTP_X_REAL_IP', None)) |
|
140 |
request.META.get('HTTP_X_REAL_IP', |
|
141 |
None)) |
|
134 | 142 |
|
135 | 143 |
super(LocalUserCreationForm, self).__init__(*args, **kwargs) |
136 | 144 |
self.fields.keyOrder = ['email', 'first_name', 'last_name', |
... | ... | |
181 | 189 |
if not check.is_valid: |
182 | 190 |
raise forms.ValidationError(_(astakos_messages.CAPTCHA_VALIDATION_ERR)) |
183 | 191 |
|
184 |
def post_store_user(self, user, request): |
|
192 |
def post_store_user(self, user, request=None):
|
|
185 | 193 |
""" |
186 | 194 |
Interface method for descendant backends to be able to do stuff within |
187 | 195 |
the transaction enabled by store_user. |
... | ... | |
195 | 203 |
save behavior is complete. |
196 | 204 |
""" |
197 | 205 |
user = super(LocalUserCreationForm, self).save(commit=False) |
206 |
user.date_signed_terms = datetime.now() |
|
198 | 207 |
user.renew_token() |
199 | 208 |
if commit: |
200 | 209 |
user.save() |
201 |
logger.log(LOGGING_LEVEL, 'Created user %s' % user.email)
|
|
210 |
logger.info('Created user %s', user.log_display)
|
|
202 | 211 |
return user |
203 | 212 |
|
204 | 213 |
|
... | ... | |
231 | 240 |
|
232 | 241 |
|
233 | 242 |
class ThirdPartyUserCreationForm(forms.ModelForm, StoreUserMixin): |
234 |
id = forms.CharField( |
|
235 |
widget=forms.HiddenInput(), |
|
236 |
label='', |
|
237 |
required=False |
|
238 |
) |
|
239 |
third_party_identifier = forms.CharField( |
|
240 |
widget=forms.HiddenInput(), |
|
241 |
label='' |
|
242 |
) |
|
243 | 243 |
email = forms.EmailField( |
244 | 244 |
label='Contact email', |
245 |
help_text = 'This is needed for contact purposes. ' \
|
|
246 |
'It doesn't need to be the same with the one you ' \
|
|
245 |
help_text='This is needed for contact purposes. '
|
|
246 |
'It doesn't need to be the same with the one you ' |
|
247 | 247 |
'provided to login previously. ' |
248 | 248 |
) |
249 | 249 |
|
250 | 250 |
class Meta: |
251 | 251 |
model = AstakosUser |
252 |
fields = ['id', 'email', 'third_party_identifier', |
|
253 |
'first_name', 'last_name', 'has_signed_terms'] |
|
252 |
fields = ['email', 'first_name', 'last_name', 'has_signed_terms'] |
|
254 | 253 |
|
255 | 254 |
def __init__(self, *args, **kwargs): |
256 | 255 |
""" |
257 | 256 |
Changes the order of fields, and removes the username field. |
258 | 257 |
""" |
259 |
self.request = kwargs.get('request', None) |
|
260 |
if self.request: |
|
261 |
kwargs.pop('request') |
|
258 |
|
|
259 |
self.provider = kwargs.pop('provider', None) |
|
260 |
if not self.provider or self.provider == 'local': |
|
261 |
raise Exception('Invalid provider, %r' % self.provider) |
|
262 |
|
|
263 |
# ThirdPartyUserCreationForm should always get instantiated with |
|
264 |
# a third_party_token value |
|
265 |
self.third_party_token = kwargs.pop('third_party_token', None) |
|
266 |
if not self.third_party_token: |
|
267 |
raise Exception('ThirdPartyUserCreationForm' |
|
268 |
' requires third_party_token') |
|
262 | 269 |
|
263 | 270 |
super(ThirdPartyUserCreationForm, self).__init__(*args, **kwargs) |
264 | 271 |
|
... | ... | |
278 | 285 |
if not email: |
279 | 286 |
raise forms.ValidationError(_(astakos_messages.REQUIRED_FIELD)) |
280 | 287 |
if reserved_verified_email(email): |
281 |
provider_id = self.request.REQUEST.get('provider', 'local')
|
|
288 |
provider_id = self.provider
|
|
282 | 289 |
provider = auth_providers.get_provider(provider_id) |
283 | 290 |
extra_message = provider.get_add_to_existing_account_msg |
284 | 291 |
|
285 |
raise forms.ValidationError(mark_safe(_(astakos_messages.EMAIL_USED) + ' ' +
|
|
286 |
extra_message))
|
|
292 |
raise forms.ValidationError(mark_safe( |
|
293 |
_(astakos_messages.EMAIL_USED) + ' ' + extra_message))
|
|
287 | 294 |
return email |
288 | 295 |
|
289 | 296 |
def clean_has_signed_terms(self): |
... | ... | |
292 | 299 |
raise forms.ValidationError(_(astakos_messages.SIGN_TERMS)) |
293 | 300 |
return has_signed_terms |
294 | 301 |
|
295 |
def post_store_user(self, user, request):
|
|
296 |
pending = PendingThirdPartyUser.objects.get(
|
|
297 |
token=request.POST.get('third_party_token'), |
|
298 |
third_party_identifier=
|
|
299 |
self.cleaned_data.get('third_party_identifier'))
|
|
302 |
def _get_pending_user(self):
|
|
303 |
return PendingThirdPartyUser.objects.get(token=self.third_party_token)
|
|
304 |
|
|
305 |
def post_store_user(self, user, request=None):
|
|
306 |
pending = self._get_pending_user()
|
|
300 | 307 |
provider = pending.get_provider(user) |
301 | 308 |
provider.add_to_user() |
302 | 309 |
pending.delete() |
... | ... | |
305 | 312 |
user = super(ThirdPartyUserCreationForm, self).save(commit=False) |
306 | 313 |
user.set_unusable_password() |
307 | 314 |
user.renew_token() |
315 |
user.date_signed_terms = datetime.now() |
|
308 | 316 |
if commit: |
309 | 317 |
user.save() |
310 |
logger.log(LOGGING_LEVEL, 'Created user %s' % user.email)
|
|
318 |
logger.info('Created user %s' % user.log_display)
|
|
311 | 319 |
return user |
312 | 320 |
|
313 | 321 |
|
... | ... | |
409 | 417 |
user = AstakosUser.objects.get_by_identifier(username) |
410 | 418 |
if not user.has_auth_provider('local'): |
411 | 419 |
provider = auth_providers.get_provider('local', user) |
412 |
raise forms.ValidationError(
|
|
413 |
provider.get_login_disabled_msg)
|
|
420 |
msg = provider.get_login_disabled_msg
|
|
421 |
raise forms.ValidationError(mark_safe(msg))
|
|
414 | 422 |
except AstakosUser.DoesNotExist: |
415 | 423 |
pass |
416 | 424 |
|
... | ... | |
515 | 523 |
user = AstakosUser.objects.get_by_identifier(email) |
516 | 524 |
self.users_cache = [user] |
517 | 525 |
if not user.is_active: |
518 |
raise forms.ValidationError(user.get_inactive_message('local')) |
|
526 |
msg = mark_safe(user.get_inactive_message('local')) |
|
527 |
raise forms.ValidationError(msg) |
|
519 | 528 |
|
520 | 529 |
provider = auth_providers.get_provider('local', user) |
521 | 530 |
if not user.has_usable_password(): |
522 | 531 |
msg = provider.get_unusable_password_msg |
523 |
raise forms.ValidationError(msg)
|
|
532 |
raise forms.ValidationError(mark_safe(msg))
|
|
524 | 533 |
|
525 | 534 |
if not user.can_change_password(): |
526 | 535 |
msg = provider.get_cannot_change_password_msg |
527 |
raise forms.ValidationError(msg)
|
|
536 |
raise forms.ValidationError(mark_safe(msg))
|
|
528 | 537 |
|
529 | 538 |
except AstakosUser.DoesNotExist: |
530 | 539 |
raise forms.ValidationError(_(astakos_messages.EMAIL_UNKNOWN)) |
... | ... | |
597 | 606 |
raise forms.ValidationError(_(astakos_messages.SIGN_TERMS)) |
598 | 607 |
return has_signed_terms |
599 | 608 |
|
609 |
def save(self, commit=True): |
|
610 |
user = super(SignApprovalTermsForm, self).save(commit) |
|
611 |
user.date_signed_terms = datetime.now() |
|
612 |
if commit: |
|
613 |
user.save() |
|
614 |
return user |
|
615 |
|
|
600 | 616 |
|
601 | 617 |
class InvitationForm(forms.ModelForm): |
602 | 618 |
|
Also available in: Unified diff