from flask import current_app, Flask from flask_login import current_user, login_manager, UserMixin # Login manager wrapper class LoginManager(object): # Login user class User(UserMixin): def __init__(self, name: str, password: str, /): self.id = name self.password = password def __init__(self, app: Flask, /): # Setup basic authentication app.secret_key = app.config['AUTHENTICATION_KEY'].value manager = login_manager.LoginManager() manager.login_view = 'login.login' # type: ignore manager.init_app(app) # User loader with only one user @manager.user_loader def user_loader(*arg) -> LoginManager.User: return self.User( 'admin', app.config['AUTHENTICATION_PASSWORD'].value ) # If the password is unset, globally disable app.config['LOGIN_DISABLED'] = app.config['AUTHENTICATION_PASSWORD'].value == '' # noqa: E501 # Tells whether the user is authenticated, meaning: # - Authentication disabled # - or User is authenticated @staticmethod def is_authenticated() -> bool: return ( current_app.config['LOGIN_DISABLED'] or current_user.is_authenticated ) # Tells whether authentication is enabled @staticmethod def is_enabled() -> bool: return not current_app.config['LOGIN_DISABLED'] # Tells whether we need the user authenticated, meaning: # - Authentication enabled # - and User not authenticated @staticmethod def is_not_authenticated() -> bool: return ( not current_app.config['LOGIN_DISABLED'] and not current_user.is_authenticated )