def signin(req):
if any(map(lambda key: key not in req.json, ["login", "password"])):
logger.debug(f"Request is {req.json} but some arguments are missing.")
raise InvalidUsage("Missing argument")
user = await User.get_by_login(req.json["login"])
if user is None:
logger.debug(f"Request is {req.json} but user coundn't be found.")
raise NotFound("User not found")
if await accounts.is_frozen(user.id, req.ip):
logger.debug(f"Request is {req.json} but the account is frozen.")
raise InvalidUsage("Account frozen")
if not compare_digest(user.password, User.hashpwd(req.json["password"])):
logger.debug(f"Request is {req.json} but the password is invalid.")
unfreeze = await accounts.freeze(user.id, req.ip)
raise InvalidUsage("Invalid password. Account frozen until " + unfreeze.isoformat(sep=" ", timespec="seconds"))
await accounts.unfreeze(user.id, req.ip)
token = await accounts.register(user.id)
logger.info(f"User {user.name} connected. Token generated: {token}")
return json({"token": token, "id": user.id, "name": user.name})
评论列表
文章目录