42 lines
972 B
Python
42 lines
972 B
Python
import base64
|
|
import secrets
|
|
import logging
|
|
|
|
import flask
|
|
import flask_login
|
|
import api.api as api
|
|
import database
|
|
|
|
app = flask.Flask(__name__)
|
|
app.secret_key = secrets.token_hex(16)
|
|
app.register_blueprint(api.api)
|
|
logging.basicConfig(
|
|
format="%(asctime)s [%(levelname)s] %(name)s:%(lineno)d - %(message)s",
|
|
level=logging.DEBUG
|
|
)
|
|
|
|
login_manager = flask_login.LoginManager()
|
|
login_manager.session_protection = "strong"
|
|
login_manager.init_app(app)
|
|
|
|
|
|
@login_manager.request_loader
|
|
def load_user(request: flask.Request) -> database.User | None:
|
|
api_key = request.headers.get('Authorization')
|
|
if api_key:
|
|
api_key = api_key.replace('Basic ', '', 1)
|
|
try:
|
|
api_key = base64.b64decode(api_key).decode()
|
|
except TypeError:
|
|
pass
|
|
|
|
username, password = api_key.split(':')
|
|
|
|
user = database.get_user(username, password)
|
|
return user
|
|
|
|
return None
|
|
|
|
if __name__ == "__main__":
|
|
app.run(debug=True)
|