mirror of
https://github.com/hackspace-marburg/flaggenschnapp.git
synced 2025-12-24 17:31:02 +01:00
98 lines
3.0 KiB
Python
98 lines
3.0 KiB
Python
import logging
|
|
import os
|
|
|
|
from starlette.applications import Starlette
|
|
from starlette.middleware.authentication import AuthenticationMiddleware
|
|
from starlette.requests import Request
|
|
from starlette.responses import PlainTextResponse, Response
|
|
from starlette.routing import Route
|
|
from starlette.testclient import TestClient
|
|
|
|
import authentication
|
|
import config
|
|
import riddle1
|
|
import riddle2
|
|
import riddle3
|
|
import riddle4
|
|
import routes
|
|
import user
|
|
from routes import ROUTE_ROOT
|
|
|
|
|
|
class API(Starlette):
|
|
def __init__(self,
|
|
host=None,
|
|
port=None,
|
|
api_proto=None,
|
|
log_level=None,
|
|
base_path=None,
|
|
treasure_path=None,
|
|
user_data_path=None,
|
|
winner_mail_address=None,
|
|
):
|
|
|
|
api_routes = (
|
|
Route(routes.ROUTE_ROOT, root),
|
|
Route(
|
|
path=f'{routes.ROUTE_USER}/{{username}}',
|
|
endpoint=user.query,
|
|
methods=['GET'],
|
|
),
|
|
*user.ROUTES,
|
|
*riddle1.ROUTES,
|
|
*riddle2.ROUTES,
|
|
*riddle3.ROUTES,
|
|
*riddle4.ROUTES,
|
|
)
|
|
|
|
super(API, self).__init__(routes=api_routes)
|
|
log = logging.getLogger('init')
|
|
|
|
self.add_middleware(
|
|
AuthenticationMiddleware,
|
|
backend=authentication.BasicAuthBackend()
|
|
)
|
|
|
|
if host is None:
|
|
config.HOST = os.environ.get('HOST', '0.0.0.0')
|
|
if port is None:
|
|
config.PORT = int(os.environ.get('PORT', 5000))
|
|
if api_proto is None:
|
|
config.API_PROTO = os.environ.get('API_PROTO', 'http')
|
|
if log_level is None:
|
|
config.LOG_LEVEL = logging.getLevelName(
|
|
os.environ.get('LOG_LEVEL', 'DEBUG')
|
|
)
|
|
if base_path is None:
|
|
config.BASE_PATH = os.environ.get('BASE_PATH', '/tmp')
|
|
|
|
os.makedirs(config.BASE_PATH, exist_ok=True)
|
|
|
|
if treasure_path is None:
|
|
config.TREASURE_PATH = os.environ.get(
|
|
'TREASURE_PATH', f'{config.BASE_PATH}/treasure'
|
|
)
|
|
if user_data_path is None:
|
|
config.USER_DATA_PATH = os.environ.get(
|
|
'USER_DATA_PATH', f'{config.BASE_PATH}/users/'
|
|
)
|
|
if winner_mail_address is None:
|
|
config.WINNER_MAIL_ADDRESS = os.environ.get(
|
|
'WINNER_MAIL_ADDRESS', 'gewinnspiel@example.com' # TODO
|
|
)
|
|
|
|
if not os.path.exists(config.TREASURE_PATH):
|
|
# TODO
|
|
treasure_text = 'Dies ist der treasure text!'
|
|
log.info(f'creating treasure file: {config.TREASURE_PATH}')
|
|
with open(config.TREASURE_PATH, 'w+') as fh:
|
|
fh.write(treasure_text)
|
|
|
|
os.makedirs(config.USER_DATA_PATH, exist_ok=True)
|
|
|
|
|
|
async def root(request: Request):
|
|
msg = "Hi, this is the flaggenschnapp riddle API.\n" \
|
|
f'If you want to register, go to {routes.ROUTE_REGISTER}\n'
|
|
return PlainTextResponse(msg)
|