flaggenschnapp/main_old.py
psychophoniac 73da285d46 C
initial crA
2021-05-03 21:19:33 +02:00

86 lines
2.5 KiB
Python

import uvicorn
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.errors import RateLimitExceeded
from slowapi.util import get_remote_address
from starlette.applications import Starlette
from starlette.requests import Request
from starlette.responses import (
PlainTextResponse, RedirectResponse,
FileResponse,
)
fibo_count = 42
def fib(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
fibo_row = list(fib(fibo_count))
fibo_path = '/' + '/'.join(map(str, fibo_row))
maze_link = '/maze'
treasure_link = f'{fibo_path}/treasure'
print(f'treasure path is: {treasure_link}')
# treasure_link = f'/treasure'
app = Starlette(debug=True)
limiter = Limiter(key_func=get_remote_address)
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
@app.route('/maze/hint')
async def hint(request):
message = '\tHere is your hint:\n\n' \
'\ta+b is to a as a is to b.\n\n' \
'\tThe answer to all questions is, quote:\n' \
'\t\t\"[...] the sort of number that you could ' \
'without any fear introduce to your parents\"' \
'\n'
return PlainTextResponse(message)
@app.route('/maze')
async def entrance(request):
message = '\tWelcome to the maze.\n' \
'\tYou will not succeed through brute force.\n' \
'\tYou will not succeed by trying.\n' \
'\tYou will succeed by following the path of which ' \
'pleases the eye until ' \
'the point that is the answer to all questions.\n\n' \
'\tThose who disobey the rules will be left with some time ' \
'to reflect upon themselves.\n\n' \
'\tIf you need a hint, visit /maze/hint\n\n'
return PlainTextResponse(message)
@app.route(treasure_link)
async def treasure(request):
uvicorn.config.logger.info(f'client found the treasure: {request.client}')
file_path = './data/data.dat'
return FileResponse(path=file_path)
@app.route('/')
async def welcome(request):
message = 'There is a MAZE hidden around here somewhere.\n' \
'Go and find it.\n'
return PlainTextResponse(message)
@app.route('/{full_path:path}')
@limiter.limit('60/minute')
async def miss(request: Request):
full_path = request.path_params['full_path']
uvicorn.config.logger.debug(f'client miss: /{full_path}')
return RedirectResponse(url='/')
uvicorn.run(app, host="0.0.0.0", port=5000, log_level='debug')