· 7 years ago · Feb 15, 2018, 02:28 PM
1class PasswordChangeAPI(MethodView):
2 """
3 Password change resource
4 """
5 @login_required
6 @exception_handler
7 def post(self):
8 post_data = request.get_json()
9 print(self.post.user)
10 user = self.post.user
11 old_password = post_data.get('old_password')
12 new_password = post_data.get('new_password')
13
14 if user and user.check_password(old_password) and new_password:
15 user.set_password(new_password)
16 db.session.commit()
17 response_object = {
18 'status': 'success',
19 'response_code': 'PASSWORD_CHANGED'
20 }
21 response = make_response(jsonify(response_object), 200)
22
23 else:
24 response_object = {
25 'status': 'fail',
26 'response_code': 'FAIL_PASSWORD'
27 }
28 response = make_response(jsonify(response_object), 400)
29
30 return response
31
32
33
34
35
36# decorators
37
38def exception_handler(func):
39 @wraps(func)
40 def wrapped_view(*args, **kwargs):
41 try:
42 print(args)
43 response = func(args, kwargs)
44 except Exception as e:
45 print(e)
46 response_object = {
47 'status': 'fail',
48 'response_code': 'SERVER_ERROR'
49 }
50 response = make_response(jsonify(response_object), 500)
51 return response
52
53 return response
54 return wrapped_view
55
56
57def login_required(func):
58 @wraps(func)
59 def wrapped_view(*args, **kwargs):
60 secret_key = current_app.config['SECRET_KEY']
61 try:
62 jw_token = jwt.decode(request.cookies.get('session'), secret_key, algorithms='HS512')
63 except jwt.ExpiredSignatureError:
64 response = make_response(jsonify({'status': 'fail', 'response_code': 'TOKEN_EXPIRED'}), 401)
65 return response
66
67 user = User.query.filter_by(
68 email=jw_token['email'],
69 username=jw_token['username'],
70 id=jw_token['id']
71 ).first()
72
73 if not user:
74 response_object = {
75 'status': 'fail',
76 'response_code': 'INVALID_TOKEN'
77 }
78 response = make_response(jsonify(response_object), 403)
79
80 else:
81 wrapped_view.user = user
82 print(args)
83 response = func(args, kwargs)
84
85 return response
86
87 return wrapped_view