-
Notifications
You must be signed in to change notification settings - Fork 0
/
apimodels.py
76 lines (55 loc) · 2.22 KB
/
apimodels.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
from flask_restful import Resource
from flask import request, jsonify
from modelserializers import UserModelSerializer
from custommodels import UserModel
from decorators import jwt_required
class Authentication(Resource):
@jwt_required
def get(self, user):
return jsonify({'error':'Method not allowed.'})
def post(self):
data = request.get_json()
if not data:
return jsonify({'error':'No data was sent with the request.'})
email = data.get('email')
password = data.get('password')
for var, param in [(email, 'email'), (password, 'password')]:
if not var:
return jsonify({'error': f'Missing { param } field.'})
user = UserModel.fetch(email=email)
if user:
if user.check_password(password):
session_token = user.generate_session_token()
return jsonify({'success': True, 'token': session_token, 'expires':3600})
return jsonify({'error':'Authentication failed.'})
return jsonify({'error':'Email is not registered.'})
@jwt_required
def put(self, user):
return jsonify({'success':'New token.', 'token': user.generate_session_token()})
@jwt_required
def delete(self, user):
user.delete_token()
return jsonify({'success':'Logged out.'})
class UserResource(Resource):
def get(self):
return jsonify({'usersRegistered':len(UserModel.query.all())})
def post(self):
data = request.get_json()
if not data:
return jsonify({'error':'No data was sent with the request.'})
name = data.get('name')
email = data.get('email')
password = data.get('password')
for var, param in [(name, 'name'), (email, 'email'), (password, 'password')]:
if not var:
return jsonify({'error': f'Missing { param } field.'})
user_exists = UserModel.fetch(email=email)
if user_exists:
return jsonify({'error':'Email is already registered.'})
UserModel(name, email, password)
new_user = UserModel.fetch(email=email)
return jsonify({'success': True, 'message':'User created.', 'user': UserModelSerializer(exclude=['password', 'token']).dump(new_user)})
def put(self):
return jsonify({'error':'Method not allowed.'})
def delete(self):
return jsonify({'error':'Method not allowed.'})