-
Notifications
You must be signed in to change notification settings - Fork 0
/
api.py
83 lines (65 loc) · 2.41 KB
/
api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import hug
import uuid
from db import Token, Message, Score, User
import peewee
import fake_chatbot as chatbot
from falcon import HTTP_404, HTTP_409, HTTP_422, HTTPError
from playhouse.shortcuts import model_to_dict
import hashlib
@hug.directive()
def token(request=None, **kwargs):
return request and request.headers and request.headers['AUTHORIZATION']
@hug.authentication.token
def token_authentication(token):
try:
Token.get(Token.token == token)
return True
except peewee.DoesNotExist:
return False
@hug.get()
def get_new_token():
token = uuid.uuid4().hex
Token.create(token=token)
return {'token': token}
@hug.post()
def registration(login: hug.types.text, password: hug.types.text):
if len(password) >= 6:
password = hashlib.sha1(password.encode()).hexdigest()
else:
raise HTTPError(HTTP_422)
token = uuid.uuid4().hex
token = Token.create(token=token)
try:
User.create(**locals())
except peewee.IntegrityError:
token.delete()
raise HTTPError(HTTP_409)
return {'status': 'ok'}
@hug.get()
def get_token(login: hug.types.text, password: hug.types.text):
try:
user = User.get(login=login,
password=hashlib.sha1(password.encode()).hexdigest())
return {'token': user.token.token}
except User.DoesNotExist:
raise HTTPError(HTTP_404)
@hug.post(requires=token_authentication)
def send_message(hug_token, message: hug.types.text):
msg = Message.create(content=message, token=Token.get(Token.token == hug_token))
return model_to_dict(chatbot.process_question(msg))
@hug.get(requires=token_authentication)
def receive_message(hug_token, after_msg_id: hug.types.number):
token = Token.get(Token.token == hug_token)
return Message.select().where(Message.token == token, Message.reply_to != None, Message.id > after_msg_id).dicts()
@hug.post(requires=token_authentication)
def score_message(hug_token, message_id: hug.types.number, score: hug.types.number):
try:
msg = Message.get(Message.token == Token.get(Token.token == hug_token),
Message.id == message_id,
Message.reply_to != None)
Score.create(message=msg, value=score)
return {"status": "ok"}
except Message.DoesNotExist:
raise HTTPError(HTTP_404)
except peewee.IntegrityError:
raise HTTPError(HTTP_409)