Example #1
0
def _do_login_user(user, next, remember_me=False):

    # Check if user account has been disabled
    if not _call_or_get(user.is_active):
        return ajax_response(message='Ваша електронна адреса не була підтверджена.'
                                     'Перевірте вашу електронну скриньку на наявність листа.'
                                     'У цьому листі натисніть підтвердити електронну адресу. '
                                     'Якщо лист не прийшов перейдіть за '
                                     '<a href="%s">цим</a> посиланням.' % url_for('user.resend_confirm_email'))

    # Check if user has a confirmed email address
    user_manager = current_app.user_manager
    if user_manager.enable_email and user_manager.enable_confirm_email \
            and not current_app.user_manager.enable_login_without_confirm_email \
            and not user.has_confirmed_email():
        url = url_for('user.resend_confirm_email')
        return ajax_response(message='Ваша електронна адреса не була підтверджена.'
                                     'Перевірте вашу електронну скриньку на наявність листа.'
                                     'У цьому листі натисніть підтвердити електронну адресу. '
                                      'Якщо лист не прийшов перейдіть за '
                                      '<a href="%s">цим</a> посиланням.' % url_for('user.resend_confirm_email'))

    # Use Flask-Login to sign in user
    #print('login_user: remember_me=', remember_me)
    login_user(user, remember=remember_me)

    # Send user_logged_in signal
    signals.user_logged_in.send(current_app._get_current_object(), user=user)

    # # Prepare one-time system message
    # flash(_('You have signed in successfully.'), 'success')
    #
    # # Redirect to 'next' URL
    print(next)
    return
Example #2
0
def login():
    """ Prompt for username/email and password and sign the user in."""
    user_manager = current_app.user_manager
    db_adapter = user_manager.db_adapter
    data = request.form
    next = request.args.get('next', _endpoint_url(user_manager.after_login_endpoint))
    reg_next = request.args.get('reg_next', _endpoint_url(user_manager.after_register_endpoint))

    # Immediately redirect already logged in users

    if _call_or_get(current_user.is_authenticated) and user_manager.auto_login_at_login:
        return redirect(next)
    user = None
    user_email = None

    # user = user_manager.find_user_by_username(data.get('user_name'))
    user = db_query(User).filter(or_(User.email == data.get('user_name'),
                                     User.username == data.get('user_name'))).first()
    if not user:
        return ajax_response(message="Ви ввели невірний логін або пароль")
    else:
        if user.password:
            if not verify_password(user_manager, data.get('password'), user.password):
                user = None
                return ajax_response(message="Ви ввели невірний логін або пароль")
        else:
            return ajax_response(message="Ви ввели невірний логін або пароль")
    user_email = None
    session['login_via'] = request.host
    remember_me = True if data.get('remember_me') else False
    if user and db_adapter.UserEmailClass:
        user_email = db_adapter.find_first_object(db_adapter.UserEmailClass,
                                                  user_id=int(user.get_id()), is_primary=True, )
    if not user and user_manager.enable_email:
        user, user_email = user_manager.find_user_by_email(data.get('user_name'))
    if user:
        _do_login_user(user, request.referrer, remember_me=remember_me)
    return ajax_response(message="Ви були успішно залоговані", reload_page = True)
Example #3
0
def register():
    """ Display registration form and create new User."""

    user_manager = current_app.user_manager
    db_adapter = user_manager.db_adapter
    # info = Info(username=request.form.get('username'), email=request.form.get('email'),
    #             password=request.form.get('password'))
    # info.save()

    # next = request.args.get('next', _endpoint_url(user_manager.after_login_endpoint))
    reg_next = request.args.get('reg_next', _endpoint_url(user_manager.after_register_endpoint))
    # invite token used to determine validity of registeree
    invite_token = request.values.get("token")

    # require invite without a token should disallow the user from registering
    # if user_manager.require_invitation and not invite_token:
    #     flash("Registration is invite only", "error")
    #     return redirect(url_for('user.login'))

    user_invite = None
    # if invite_token and db_adapter.UserInvitationClass:
    #     user_invite = db_adapter.find_first_object(db_adapter.UserInvitationClass, token=invite_token)

    if request.method == 'POST':
        # Create a User object using Form fields that have a corresponding User field
        User = db_adapter.UserClass
        user_class_fields = User.__dict__
        user_fields = {}

        # Create a UserEmail object using Form fields that have a corresponding UserEmail field
        if db_adapter.UserEmailClass:
            UserEmail = db_adapter.UserEmailClass
            user_email_class_fields = UserEmail.__dict__
            user_email_fields = {}

        # Create a UserAuth object using Form fields that have a corresponding UserAuth field
        if db_adapter.UserAuthClass:
            UserAuth = db_adapter.UserAuthClass
            user_auth_class_fields = UserAuth.__dict__
            user_auth_fields = {}

        # Enable user account
        if db_adapter.UserProfileClass:
            if hasattr(db_adapter.UserProfileClass, 'active'):
                user_auth_fields['active'] = True
            elif hasattr(db_adapter.UserProfileClass, 'is_enabled'):
                user_auth_fields['is_enabled'] = True
            else:
                user_auth_fields['is_active'] = True
        else:
            if hasattr(db_adapter.UserClass, 'active'):
                user_fields['active'] = True
            elif hasattr(db_adapter.UserClass, 'is_enabled'):
                user_fields['is_enabled'] = True
            else:
                user_fields['is_active'] = True
        data = request.form
        # For all form fields
        print(request.args)
        user_fields['registered_via'] = 'api-tvprogram.rhcloud.com'
        for field_name, field_value in data.items():
            # Hash password field
            if field_name == 'password':
                if len(field_value) < 7:
                    return ajax_response(message='Пароль повинен містити не менше семи символів')
                hashed_password = user_manager.hash_password(field_value)
                if db_adapter.UserAuthClass:
                    user_auth_fields['password'] = hashed_password
                else:
                    user_fields['password'] = hashed_password
            # Store corresponding Form fields into the User object and/or UserProfile object
            else:
                if field_name in user_class_fields:
                    user_fields[field_name] = field_value
                if db_adapter.UserEmailClass:
                    if field_name in user_email_class_fields:
                        user_email_fields[field_name] = field_value
                if db_adapter.UserAuthClass:
                    if field_name in user_auth_class_fields:
                        user_auth_fields[field_name] = field_value

        # Add User record using named arguments 'user_fields'
        user = db_adapter.add_object(User, **user_fields)
        if db_adapter.UserProfileClass:
            user_profile = user

        # Add UserEmail record using named arguments 'user_email_fields'
        if db_adapter.UserEmailClass:
            user_email = db_adapter.add_object(UserEmail, user=user, is_primary=True, **user_email_fields)
        else:
            user_email = None

        # Add UserAuth record using named arguments 'user_auth_fields'
        if db_adapter.UserAuthClass:
            user_auth = db_adapter.add_object(UserAuth, **user_auth_fields)
            if db_adapter.UserProfileClass:
                user = user_auth
            else:
                user.user_auth = user_auth

        require_email_confirmation = True
        if user_invite:
            if user_invite.email == data.get('email'):
                require_email_confirmation = False
                db_adapter.update_object(user, confirmed_at=datetime.datetime.utcnow())

        try:
            db_adapter.commit()
        except IntegrityError as e:
            if e.message.find('email') != -1:
                return ajax_response(message='Така електронна адреса вже зареєстрована на нашому сайті')
            elif e.message.find('username') != -1:
                return ajax_response(message='Юзер з таким ніком вже зареєстрований на нашому сайті.'
                                             'Виберіть інший нік')

        # Send 'registered' email and delete new User object if send fails
        if user_manager.send_registered_email:
            try:
                # Send 'registered' email
                _send_registered_email(user, user_email, require_email_confirmation)

            except Exception as e:
                # delete new User object if send  fails
                db_adapter.delete_object(user)
                db_adapter.commit()
                raise

        # Send user_registered signal
        signals.user_registered.send(current_app._get_current_object(), user=user,
                                     user_invite=user_invite)

        # Redirect if USER_ENABLE_CONFIRM_EMAIL is set
        if user_manager.enable_confirm_email and require_email_confirmation:
            next = request.args.get('next', _endpoint_url(user_manager.after_register_endpoint))
            return ajax_response(message='На вашу електронну адресу був відправленний лист з підтвердженням реєстрації.'
                                         'Перейдіть на вашу поштову скриньку, щоб завершити реєстрацію на нашому '
                                         'сайті.<h5><a href="{mail_url}" target="_blank">Перейти</a></h5>"Якщо лист не прийшов '
                                         'перейдіть за <a href="{resend_email}">цим</a> посиланням і ми '
                                         'відправимо лист ще раз'.format(
                                          mail_url='http://'+data.get('email').split('@')[-1]+'/mail',
                                          resend_email=url_for('user.resend_confirm_email')),
                                 alert='На вашу електронну адресу був відправленний лист з підтвердженням реєстрації.'
                                       'Перейдіть на вашу поштову скриньку, щоб завершити реєстрацію на нашому сайті.')

        # Auto-login after register or redirect to login page
        next = request.args.get('next', _endpoint_url(user_manager.after_confirm_endpoint))
        if user_manager.auto_login_after_register:
            return _do_login_user(user, reg_next)                     # auto-login
        else:
            return ajax_response(message='На вашу електронну адресу був відправленний лист з підтвердженням реєстрації.'
                                         'Перейдіть на вашу поштову скриньку, щоб завершити реєстрацію на нашому '
                                         'сайті.<h5><a href="{mail_url}">Перейти</a></h5>"Якщо лист не прийшов '
                                         'перейдіть за <a href="{resend_email}" target="_blank">цим</a> посиланням і ми '
                                         'відправимо лист ще раз'.format(
                                          mail_url='http://'+data.get('email').split('@')[-1]+'/mail',
                                          resend_email=url_for('user.resend_confirm_email')),
                                 alert='На вашу електронну адресу був відправленний лист з підтвердженням реєстрації.'
                                       'Перейдіть на вашу поштову скриньку, щоб завершити реєстрацію на нашому сайті')

    # Process GET or invalid POST
    return redirect(request.referrer)