Revision 9d20fe23 snf-astakos-app/astakos/im/forms.py

b/snf-astakos-app/astakos/im/forms.py
271 271
            terms_link_html = '<a href="%s" target="_blank">%s</a>' \
272 272
                % (reverse('latest_terms'), _("the terms"))
273 273
            self.fields['has_signed_terms'].label = \
274
                    mark_safe("I agree with %s" % terms_link_html)
274
                mark_safe("I agree with %s" % terms_link_html)
275 275

  
276 276
    def clean_email(self):
277 277
        email = self.cleaned_data['email']
278 278
        if not email:
279 279
            raise forms.ValidationError(_(astakos_messages.REQUIRED_FIELD))
280 280
        if reserved_verified_email(email):
281
            provider = auth_providers.get_provider(self.request.REQUEST.get('provider', 'local'))
282
            extra_message = _(astakos_messages.EXISTING_EMAIL_THIRD_PARTY_NOTIFICATION) % \
283
                    (provider.get_title_display, reverse('edit_profile'))
281
            provider_id = self.request.REQUEST.get('provider', 'local')
282
            provider = auth_providers.get_provider(provider_id)
283
            extra_message = provider.get_add_to_existing_account_msg
284 284

  
285
            raise forms.ValidationError(_(astakos_messages.EMAIL_USED) + ' ' + \
286
                                        extra_message)
285
            raise forms.ValidationError(mark_safe(_(astakos_messages.EMAIL_USED) + ' ' +
286
                                        extra_message))
287 287
        return email
288 288

  
289 289
    def clean_has_signed_terms(self):
......
294 294

  
295 295
    def post_store_user(self, user, request):
296 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'))
300
        return user.add_pending_auth_provider(pending)
297
            token=request.POST.get('third_party_token'),
298
            third_party_identifier=
299
            self.cleaned_data.get('third_party_identifier'))
300
        provider = pending.get_provider(user)
301
        provider.add_to_user()
302
        pending.delete()
301 303

  
302 304
    def save(self, commit=True):
303 305
        user = super(ThirdPartyUserCreationForm, self).save(commit=False)
......
406 408
            try:
407 409
                user = AstakosUser.objects.get_by_identifier(username)
408 410
                if not user.has_auth_provider('local'):
409
                    provider = auth_providers.get_provider('local')
411
                    provider = auth_providers.get_provider('local', user)
410 412
                    raise forms.ValidationError(
411
                        _(provider.get_message('NOT_ACTIVE_FOR_USER')))
413
                        provider.get_login_disabled_msg)
412 414
            except AstakosUser.DoesNotExist:
413 415
                pass
414 416

  
......
418 420
            if self.user_cache is None:
419 421
                raise
420 422
            if not self.user_cache.is_active:
421
                raise forms.ValidationError(self.user_cache.get_inactive_message())
423
                msg = self.user_cache.get_inactive_message('local')
424
                raise forms.ValidationError(msg)
422 425
            if self.request:
423 426
                if not self.request.session.test_cookie_worked():
424 427
                    raise
......
505 508
    clean_email: to handle local auth provider checks
506 509
    """
507 510
    def clean_email(self):
508
        email = super(ExtendedPasswordResetForm, self).clean_email()
511
        # we override the default django auth clean_email to provide more
512
        # detailed messages in case of inactive users
513
        email = self.cleaned_data['email']
509 514
        try:
510 515
            user = AstakosUser.objects.get_by_identifier(email)
511

  
516
            self.users_cache = [user]
512 517
            if not user.is_active:
513
                raise forms.ValidationError(_(astakos_messages.ACCOUNT_INACTIVE))
518
                raise forms.ValidationError(user.get_inactive_message('local'))
514 519

  
520
            provider = auth_providers.get_provider('local', user)
515 521
            if not user.has_usable_password():
516
                provider = auth_providers.get_provider('local')
517
                available_providers = user.auth_providers.all()
518
                available_providers = ",".join(p.settings.get_title_display for p in \
519
                                                   available_providers)
520
                message = astakos_messages.UNUSABLE_PASSWORD % \
521
                    (provider.get_method_prompt_display, available_providers)
522
                raise forms.ValidationError(message)
522
                msg = provider.get_unusable_password_msg
523
                raise forms.ValidationError(msg)
523 524

  
524 525
            if not user.can_change_password():
525
                raise forms.ValidationError(_(astakos_messages.AUTH_PROVIDER_CANNOT_CHANGE_PASSWORD))
526
        except AstakosUser.DoesNotExist, e:
526
                msg = provider.get_cannot_change_password_msg
527
                raise forms.ValidationError(msg)
528

  
529
        except AstakosUser.DoesNotExist:
527 530
            raise forms.ValidationError(_(astakos_messages.EMAIL_UNKNOWN))
528 531
        return email
529 532

  
......
661 664
            self.user = AstakosUser.objects.get(id=self.user.id)
662 665
            if NEWPASSWD_INVALIDATE_TOKEN or self.cleaned_data.get('renew'):
663 666
                self.user.renew_token()
664
            #self.user.flush_sessions()
665
            if not self.user.has_auth_provider('local'):
666
                self.user.add_auth_provider('local', auth_backend='astakos')
667

  
668
            provider = auth_providers.get_provider('local', self.user)
669
            if provider.get_add_policy:
670
                provider.add_to_user()
667 671

  
668 672
        except BaseException, e:
669 673
            logger.exception(e)

Also available in: Unified diff