Ejemplo n.º 1
0
def check_registration_email(regform, email, registration=None, management=False):
    """Check whether an email address is suitable for registration.

    :param regform: The registration form
    :param email: The email address
    :param registration: The existing registration (in case of
                         modification)
    :param management: If it's a manager adding a new registration
    """
    email = email.lower().strip()
    user = get_user_by_email(email)
    email_registration = regform.get_registration(email=email)
    user_registration = regform.get_registration(user=user) if user else None
    if registration is not None:
        if email_registration and email_registration != registration:
            return dict(status='error', conflict='email-already-registered')
        elif user_registration and user_registration != registration:
            return dict(status='error', conflict='user-already-registered')
        elif user and registration.user and registration.user != user:
            return dict(status='warning' if management else 'error', conflict='email-other-user', user=user.full_name)
        elif not user and registration.user:
            return dict(status='warning' if management else 'error', conflict='email-no-user',
                        user=registration.user.full_name)
        elif user:
            return dict(status='ok', user=user.full_name, self=(not management and user == session.user),
                        same=(user == registration.user))
        email_err = validate_email_verbose(email)
        if email_err:
            return dict(status='error', conflict='email-invalid', email_error=email_err)
        if regform.require_user and (management or email != registration.email):
            return dict(status='warning' if management else 'error', conflict='no-user')
        else:
            return dict(status='ok', user=None)
    else:
        if email_registration:
            return dict(status='error', conflict='email-already-registered')
        elif user_registration:
            return dict(status='error', conflict='user-already-registered')
        elif user:
            return dict(status='ok', user=user.full_name, self=(not management and user == session.user), same=False)
        email_err = validate_email_verbose(email)
        if email_err:
            return dict(status='error', conflict='email-invalid', email_error=email_err)
        if regform.require_user:
            return dict(status='warning' if management else 'error', conflict='no-user')
        else:
            return dict(status='ok', user=None)
Ejemplo n.º 2
0
Archivo: util.py Proyecto: javfg/indico
def check_registration_email(regform,
                             email,
                             registration=None,
                             management=False):
    """Check whether an email address is suitable for registration.

    :param regform: The registration form
    :param email: The email address
    :param registration: The existing registration (in case of
                         modification)
    :param management: If it's a manager adding a new registration
    """
    email = email.lower().strip()
    user = get_user_by_email(email)
    email_registration = regform.get_registration(email=email)
    user_registration = regform.get_registration(user=user) if user else None
    extra_checks = values_from_signal(
        signals.event.before_check_registration_email.send(
            regform,
            email=email,
            registration=registration,
            management=management,
            user=user,
            user_registration=user_registration,
            email_registration=email_registration),
        as_list=True)
    if extra_checks:
        return sorted(
            extra_checks,
            key=lambda x: ['error', 'warning', 'ok'].index(x['status']))[0]
    if registration is not None:
        if email_registration and email_registration != registration:
            return dict(status='error', conflict='email-already-registered')
        elif user_registration and user_registration != registration:
            return dict(status='error', conflict='user-already-registered')
        elif user and registration.user and registration.user != user:
            return dict(status='warning' if management else 'error',
                        conflict='email-other-user',
                        user=user.full_name)
        elif not user and registration.user:
            return dict(status='warning' if management else 'error',
                        conflict='email-no-user',
                        user=registration.user.full_name)
        elif user:
            return dict(status='ok',
                        user=user.full_name,
                        self=(not management and user == session.user),
                        same=(user == registration.user))
        email_err = validate_email_verbose(email)
        if email_err:
            return dict(status='error',
                        conflict='email-invalid',
                        email_error=email_err)
        if regform.require_user and (management
                                     or email != registration.email):
            return dict(status='warning' if management else 'error',
                        conflict='no-user')
        else:
            return dict(status='ok', user=None)
    else:
        if email_registration:
            return dict(status='error', conflict='email-already-registered')
        elif user_registration:
            return dict(status='error', conflict='user-already-registered')
        elif user:
            return dict(status='ok',
                        user=user.full_name,
                        self=(not management and user == session.user),
                        same=False)
        email_err = validate_email_verbose(email)
        if email_err:
            return dict(status='error',
                        conflict='email-invalid',
                        email_error=email_err)
        if regform.require_user:
            return dict(status='warning' if management else 'error',
                        conflict='no-user')
        else:
            return dict(status='ok', user=None)