85 lines
2.4 KiB
Python
85 lines
2.4 KiB
Python
import aiohttp.web
|
|
import traceback
|
|
import urllib.parse
|
|
import os
|
|
import json
|
|
import asyncio
|
|
|
|
from model import Model
|
|
|
|
routes = aiohttp.web.RouteTableDef()
|
|
routes.static('/static', 'static')
|
|
|
|
@routes.post('/api/token{authtoken}/{method}')
|
|
async def handler(request: aiohttp.web.Request):
|
|
method = request.match_info.get('method', None)
|
|
token = request.match_info.get('authtoken', None)
|
|
model = request.app['model']
|
|
data = await request.json()
|
|
try:
|
|
assert method in model.ApiMethod.dict
|
|
value = await model.ApiMethod.dict[method](model, token, **data)
|
|
if value:
|
|
return aiohttp.web.json_response(value)
|
|
else:
|
|
return aiohttp.web.Response(status=200)
|
|
except Exception as e:
|
|
traceback.print_exc()
|
|
resp = {"error": e.args[0]}
|
|
return aiohttp.web.json_response(resp, status=400)
|
|
|
|
|
|
@routes.post('/api/{method}')
|
|
async def handler(request: aiohttp.web.Request):
|
|
method = request.match_info.get('method', None)
|
|
model = request.app['model']
|
|
data = await request.json()
|
|
try:
|
|
assert method in model.ApiMethod.dict
|
|
value = await model.ApiMethod.dict[method](model, **data)
|
|
if value:
|
|
return aiohttp.web.json_response(value)
|
|
else:
|
|
return aiohttp.web.Response(status=200)
|
|
except Exception as e:
|
|
traceback.print_exc()
|
|
resp = {"error": e.args[0]}
|
|
return aiohttp.web.json_response(resp, status=400)
|
|
|
|
@routes.get('/dealer/{usertoken}')
|
|
async def handler(request):
|
|
del request # unused
|
|
return aiohttp.web.FileResponse('user.html')
|
|
|
|
@routes.get('/dealerdealer/{usertoken}')
|
|
async def handler(request):
|
|
del request # unused
|
|
return aiohttp.web.FileResponse('admin.html')
|
|
|
|
@routes.get('/favicon.ico')
|
|
async def handler(request):
|
|
del request # unused
|
|
return aiohttp.web.FileResponse('static/coin.png')
|
|
|
|
|
|
@routes.get('/')
|
|
async def handler(request):
|
|
del request # unused
|
|
return aiohttp.web.FileResponse('index.html')
|
|
|
|
if __name__ == '__main__':
|
|
app = aiohttp.web.Application()
|
|
app.add_routes(routes)
|
|
data = {}
|
|
filename = "scoreboard.json"
|
|
if os.path.isfile(filename):
|
|
with open(filename) as f:
|
|
data = json.load(f)
|
|
app['model'] = Model(model = data)
|
|
|
|
async def on_shutdown(app):
|
|
app['model'].save()
|
|
|
|
app.on_shutdown.append(on_shutdown)
|
|
aiohttp.web.run_app(app, port=42042)
|