Esempio n. 1
0
def do_login():
    """Authenticate users of the web-UI"""
    if not admin_exists():
        return redirect('/create_admin')

    elif flask_login.current_user.is_authenticated:
        flash(gettext(u"Cannot access login page if you're already logged in"),
              "error")
        return redirect(url_for('general_routes.home'))

    form_login = forms_authentication.Login()

    # Check if the user is banned from logging in (too many incorrect attempts)
    if banned_from_login():
        flash(
            gettext(
                u"Too many failed login attempts. Please wait %(min)s "
                u"minutes before attempting to log in again",
                min=(int(LOGIN_BAN_SECONDS - session['ban_time_left']) / 60) +
                1), "info")
    else:
        if request.method == 'POST':
            username = form_login.username.data.lower()
            user_ip = request.environ.get('REMOTE_ADDR', 'unknown address')
            user = User.query.filter(func.lower(User.name) == username).first()

            if not user:
                login_log(username, 'NA', user_ip, 'NOUSER')
                failed_login()
            elif form_login.validate_on_submit():
                if User().check_password(
                        form_login.password.data,
                        user.password_hash) == user.password_hash:

                    login_log(username, user.roles.name, user_ip, 'LOGIN')

                    # flask-login user
                    login_user = User()
                    login_user.id = user.id
                    remember_me = True if form_login.remember.data else False
                    flask_login.login_user(login_user, remember=remember_me)

                    return redirect(url_for('general_routes.home'))
                else:
                    login_log(username, user.roles.name, user_ip, 'FAIL')
                    failed_login()
            else:
                login_log(username, 'NA', user_ip, 'FAIL')
                failed_login()

            return redirect('/login')

    return render_template(
        'login.html',
        form_login=form_login,
    )
Esempio n. 2
0
def remote_admin_login():
    """Authenticate Remote Admin login"""
    password_hash = request.form.get('password_hash', None)
    username = request.form.get('username', None)

    if username and password_hash:
        user = User.query.filter(func.lower(User.name) == username).first()
    else:
        user = None

    if user and user.password_hash == password_hash:
        login_user = User()
        login_user.id = user.id
        flask_login.login_user(login_user, remember=False)
        return "Logged in via Remote Admin"
Esempio n. 3
0
def login_keypad_code(code):
    """Check code from keypad."""
    if not admin_exists():
        return redirect('/create_admin')

    elif flask_login.current_user.is_authenticated:
        flash(gettext("Cannot access login page if you're already logged in"),
              "error")
        return redirect(url_for('routes_general.home'))

    # Check if the user is banned from logging in (too many incorrect attempts)
    if banned_from_login():
        flash(
            gettext(
                "Too many failed login attempts. Please wait %(min)s "
                "minutes before attempting to log in again",
                min=int(
                    (LOGIN_BAN_SECONDS - session['ban_time_left']) / 60) + 1),
            "info")
    else:
        user = User.query.filter(User.code == code).first()
        user_ip = request.environ.get('HTTP_X_FORWARDED_FOR',
                                      'unknown address')

        if not user:
            login_log(code, 'NA', user_ip, 'FAIL')
            failed_login()
            flash("Invalid Code", "error")
            time.sleep(2)
        else:
            role_name = Role.query.filter(Role.id == user.role_id).first().name
            login_log(user.name, role_name, user_ip, 'LOGIN')

            # flask-login user
            login_user = User()
            login_user.id = user.id
            remember_me = True
            flask_login.login_user(login_user, remember=remember_me)

            return redirect(url_for('routes_general.home'))

    return render_template('login_keypad.html',
                           dict_translation=TRANSLATIONS,
                           host=socket.gethostname())
Esempio n. 4
0
def login_password():
    """Authenticate users of the web-UI."""
    if not admin_exists():
        return redirect('/create_admin')
    elif flask_login.current_user.is_authenticated:
        flash(gettext("Cannot access login page if you're already logged in"),
              "error")
        return redirect(url_for('routes_general.home'))

    form_login = forms_authentication.Login()

    # Check if the user is banned from logging in (too many incorrect attempts)
    if banned_from_login():
        flash(
            gettext(
                "Too many failed login attempts. Please wait %(min)s "
                "minutes before attempting to log in again",
                min=int(
                    (LOGIN_BAN_SECONDS - session['ban_time_left']) / 60) + 1),
            "info")
    else:
        if request.method == 'POST':
            username = form_login.username.data.lower()
            user_ip = request.environ.get('HTTP_X_FORWARDED_FOR',
                                          'unknown address')
            user = User.query.filter(func.lower(User.name) == username).first()

            if not user:
                login_log(username, 'NA', user_ip, 'NOUSER')
                failed_login()
            elif form_login.validate_on_submit():
                matched_hash = User().check_password(form_login.password.data,
                                                     user.password_hash)

                # Encode stored password hash if it's a str
                password_hash = user.password_hash
                if isinstance(user.password_hash, str):
                    password_hash = user.password_hash.encode('utf-8')

                if matched_hash == password_hash:
                    user = User.query.filter(User.name == username).first()
                    role_name = Role.query.filter(
                        Role.id == user.role_id).first().name
                    login_log(username, role_name, user_ip, 'LOGIN')

                    # flask-login user
                    login_user = User()
                    login_user.id = user.id
                    remember_me = True if form_login.remember.data else False
                    flask_login.login_user(login_user, remember=remember_me)

                    return redirect(url_for('routes_general.home'))
                else:
                    user = User.query.filter(User.name == username).first()
                    role_name = Role.query.filter(
                        Role.id == user.role_id).first().name
                    login_log(username, role_name, user_ip, 'FAIL')
                    failed_login()
            else:
                login_log(username, 'NA', user_ip, 'FAIL')
                failed_login()

            return redirect('/login')

    return render_template('login_password.html',
                           dict_translation=TRANSLATIONS,
                           form_login=form_login,
                           host=socket.gethostname())
def do_login():
    """Authenticate users of the web-UI"""
    if not admin_exists():
        return redirect('/create_admin')

    elif flask_login.current_user.is_authenticated:
        flash(gettext(u"Cannot access login page if you're already logged in"),
              "error")
        return redirect(url_for('general_routes.home'))

    form = flaskforms.Login()
    form_notice = flaskforms.InstallNotice()

    misc = Misc.query.first()
    dismiss_notification = misc.dismiss_notification
    stats_opt_out = misc.stats_opt_out

    # Check if the user is banned from logging in (too many incorrect attempts)
    if banned_from_login():
        flash(gettext(
            u"Too many failed login attempts. Please wait %(min)s "
            u"minutes before attempting to log in again",
            min=(int(LOGIN_BAN_SECONDS - session['ban_time_left']) / 60) + 1),
                "info")
    else:
        if request.method == 'POST':
            username = form.username.data.lower()
            user_ip = request.environ.get('REMOTE_ADDR', 'unknown address')
            form_name = request.form['form-name']
            if form_name == 'acknowledge':
                try:
                    mod_misc = Misc.query.first()
                    mod_misc.dismiss_notification = 1
                    db.session.commit()
                except Exception as except_msg:
                    flash(gettext(u"Acknowledgement unable to be saved: "
                                  u"%(err)s", err=except_msg), "error")
            elif form_name == 'login' and form.validate_on_submit():
                user = User.query.filter(
                    User.name == username).first()
                if not user:
                    login_log(username, 'NA', user_ip, 'NOUSER')
                    failed_login()
                elif User().check_password(
                        form.password.data,
                        user.password_hash) == user.password_hash:

                    login_log(username, user.roles.name, user_ip, 'LOGIN')

                    # flask-login user
                    login_user = User()
                    login_user.id = user.id
                    remember_me = True if form.remember.data else False
                    flask_login.login_user(login_user, remember=remember_me)

                    return redirect(url_for('general_routes.home'))
                else:
                    login_log(username, user.roles.name, user_ip, 'FAIL')
                    failed_login()
            else:
                login_log(username, 'NA', user_ip, 'FAIL')
                failed_login()

            return redirect('/login')

    return render_template('login.html',
                           form=form,
                           formNotice=form_notice,
                           dismiss_notification=dismiss_notification,
                           stats_opt_out=stats_opt_out)