diff --git a/transporte/config.cfg.example b/transporte/config.cfg.example index 15b7ac0b0fd16059502fa1e9af69ddd4f5e2ee89..97025eeecb4d165e27dc0a5d52cd3bc51dd6ba92 100644 --- a/transporte/config.cfg.example +++ b/transporte/config.cfg.example @@ -7,6 +7,12 @@ UPLOAD_DIR = 'uploads' SQLALCHEMY_DATABASE_URI = 'sqlite:///app.db' SQLALCHEMY_TRACK_MODIFICATIONS = False +#The passwords in this list need to be unique. +#Login via /login/password/<password> +SPECIAL_HELPDESK_ACCOUNTS = [{ + 'email': 'mail@exmaple.com', + 'password': 'secret' +}] # mail server config MAIL_SERVER = 'SMTP_HOST' diff --git a/transporte/views.py b/transporte/views.py index 40a12de8c2ed82c941353a994bcd9ca239d94436..f0f86623cd5dda69c19a950377e686535e247241 100644 --- a/transporte/views.py +++ b/transporte/views.py @@ -50,6 +50,17 @@ def index(): return render_template('layout.html', todo=todo) +def get_user(email): + user = User.query.filter(User.login == email).first() + + if user is None: + # create user + user = User(login=email) + db.session.add(user) + db.session.commit() + + return user + @app.route('/login', methods=['GET', 'POST']) # @limiter.limit('10/hour') def login(): @@ -68,13 +79,7 @@ def login(): return render_template('login.html', loginform=loginform) - user = User.query.filter(User.login == email).first() - - if user is None: - # create user - user = User(login=email) - db.session.add(user) - db.session.commit() + user = get_user(email) # create token user.mail_token() @@ -96,6 +101,25 @@ def login_with_token(token): flash('Invalid or expired token!') return redirect(url_for('login')) +@app.route('/login/password/<password>') +def login_with_password(password): + accounts_with_this_pw = [ account['email'] for account in app.config['SPECIAL_HELPDESK_ACCOUNTS'] if account['password'] == password ] + + if len(accounts_with_this_pw) == 0: + return redirect(url_for('login')) + elif len(accounts_with_this_pw) > 1: + app.logger.warn("Multiple sepcial helpdesk accounts with the same password are not supported!") + return redirect(url_for('login')) + + user = get_user(accounts_with_this_pw[0]) + + if user: + login_user(user) + + return redirect(url_for('index')) + else: + flash('Invalid or expired token!') + return redirect(url_for('login')) @app.route('/logout') @login_required