Refactor main.py, Fix model, update user.html,
This commit is contained in:
parent
f0b30fdd7d
commit
fe8635ea93
66
main.py
66
main.py
@ -7,50 +7,14 @@ import json
|
||||
from model import Model
|
||||
|
||||
routes = aiohttp.web.RouteTableDef()
|
||||
|
||||
routes.static('/static', 'static')
|
||||
|
||||
admintoken = "ae33fd8cc4fdcb1ff50ba42ff48046a7"
|
||||
|
||||
CLIENT_REGEX = r'/{client:[a-zA-Z0-9]{16}}'
|
||||
|
||||
|
||||
def get_client(request: aiohttp.web.Request):
|
||||
client = request.match_info.get("client", None)
|
||||
model = request.app['model']
|
||||
|
||||
if not client:
|
||||
print('[get_client] client is not set, wtf')
|
||||
raise aiohttp.web.HTTPBadRequest()
|
||||
|
||||
if not model.exists_client(client):
|
||||
#print(f'[get_client] model does not know {client=}')
|
||||
raise aiohttp.web.HTTPBadRequest()
|
||||
|
||||
return client
|
||||
|
||||
|
||||
@routes.get(CLIENT_REGEX)
|
||||
async def handler(request: aiohttp.web.Request):
|
||||
# this handler prevents people missing trailing slashes
|
||||
client = get_client(request)
|
||||
raise aiohttp.web.HTTPFound(f"{client}/")
|
||||
|
||||
|
||||
@routes.get(CLIENT_REGEX + '/')
|
||||
async def handler(request: aiohttp.web.Request):
|
||||
client = get_client(request)
|
||||
#print(f"{client=} accessed")
|
||||
return aiohttp.web.FileResponse('ui.html')
|
||||
|
||||
@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)
|
||||
@ -59,22 +23,15 @@ async def handler(request: aiohttp.web.Request):
|
||||
else:
|
||||
return aiohttp.web.Response(status=200)
|
||||
except Exception as e:
|
||||
del e # unused?
|
||||
traceback.print_exc()
|
||||
return aiohttp.web.Response(status=400)
|
||||
#finally:
|
||||
# await model.send_state(client)
|
||||
|
||||
|
||||
@routes.post('/api/{method}')
|
||||
async def handler(request: aiohttp.web.Request):
|
||||
#client = get_client(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)
|
||||
@ -83,17 +40,8 @@ async def handler(request: aiohttp.web.Request):
|
||||
else:
|
||||
return aiohttp.web.Response(status=200)
|
||||
except Exception as e:
|
||||
del e # unused?
|
||||
traceback.print_exc()
|
||||
return aiohttp.web.Response(status=400)
|
||||
#finally:
|
||||
# await model.send_state(client)
|
||||
|
||||
@routes.get(f"/api/{admintoken}")
|
||||
async def handler(request: aiohttp.web.Request):
|
||||
model = request.app['model']
|
||||
return aiohttp.web.json_response(model.model)
|
||||
|
||||
|
||||
@routes.get('/dealer/{usertoken}')
|
||||
async def handler(request):
|
||||
@ -105,28 +53,14 @@ async def handler(request):
|
||||
del request # unused
|
||||
return aiohttp.web.FileResponse('index.html')
|
||||
|
||||
|
||||
@routes.get('/register/{username:.+}')
|
||||
async def handler(request):
|
||||
model = request.app['model']
|
||||
username = request.match_info.get('username', 'Joe')
|
||||
username = urllib.parse.unquote(username)
|
||||
|
||||
client = model.create_client(username)
|
||||
raise aiohttp.web.HTTPFound(f"/{client}/")
|
||||
|
||||
|
||||
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)
|
||||
|
||||
aiohttp.web.run_app(app, port=42042)
|
||||
app['model'].save()
|
||||
|
2
model.py
2
model.py
@ -77,7 +77,7 @@ class Model(object):
|
||||
@ApiMethod
|
||||
async def get_user(self, authtoken):
|
||||
user = self.verify_user(authtoken)
|
||||
return {"user":user.name}
|
||||
return user.to_json()
|
||||
|
||||
@ApiMethod
|
||||
async def set_score(self, authtoken, newscore):
|
||||
|
19
user.html
19
user.html
@ -23,6 +23,9 @@
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
}
|
||||
input {
|
||||
width: 8rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
@ -36,26 +39,20 @@
|
||||
<table id="thetable">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Current Washing Coins:</td>
|
||||
<td>Sold Washing Coins</td>
|
||||
<td id="currentcoins">42</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Maximally Available:</td>
|
||||
<td>69</td>
|
||||
<td>Maximum Available</td>
|
||||
<td id="maxcoins">69</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="biceps">
|
||||
<div>
|
||||
<button>Click me</button>
|
||||
</div>
|
||||
<div>
|
||||
<input type="number" value = "42" >
|
||||
<button>Click me</button>
|
||||
</div>
|
||||
<div>
|
||||
<button>Click me</button>
|
||||
<input type="number" value = "1" >
|
||||
<button id="sell">Sell</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user