1+
2+ import jwt
3+ import bcrypt
4+ import datetime
15from http import HTTPStatus
26from flask import jsonify
37from flask import make_response
8+ from flask import request
49from app .users .models import Users , UsersSchema
510from sqlalchemy .exc import SQLAlchemyError
611from flask_restplus import Api , Namespace , fields , reqparse , Resource
712from app .constants import STATUS_CODE
813from app .constants import GET , POST , PATCH , DELETE
914from app .api .database import DB
15+ from app .api .auth_type import BASIC_AUTH , ACCESS_TOKEN , SECERET_KEY
1016
11- API = Namespace ('Users' ,description = "User's REST API" )
17+ API = Namespace ('Users' , description = "User's REST API" )
1218
1319USERS_SCHEMA = UsersSchema ()
1420
15- @API .route ('<int:user_id>' )
21+
22+ @API .route ('/<int:user_id>' )
1623@API .param ('user_id' , 'The user identifier' )
1724class UserItem (Resource ):
1825 parser = reqparse .RequestParser ()
19- parser .add_argument ('name' , required = True , type = str , help = "user's name" , location = 'json' )
20- parser .add_argument ('email' , required = True , type = str , help = "user's email" , location = 'json' )
21- parser .add_argument ('password' , required = True , type = str , help = "password" , location = 'json' )
26+ parser .add_argument ('name' , required = True , type = str ,
27+ help = "user's name" , location = 'json' )
28+ parser .add_argument ('email' , required = True , type = str ,
29+ help = "user's email" , location = 'json' )
30+ parser .add_argument ('password' , required = True , type = str ,
31+ help = "password" , location = 'json' )
2232
2333 user_field = API .model ('Users' , {
2434 'name' : fields .String ,
@@ -29,6 +39,7 @@ class UserItem(Resource):
2939 @API .doc (responses = GET )
3040 def get (self , user_id ):
3141 user = Users .query .get_or_404 (user_id )
42+ Users .session .close ()
3243 user = USERS_SCHEMA .dump (user ).data
3344 return user
3445
@@ -48,19 +59,22 @@ def delete(self, user_id):
4859 return response
4960
5061
51- @API .route ('' )
62+ @API .route ('s ' )
5263class UsersList (Resource ):
5364 parser = reqparse .RequestParser ()
54- parser .add_argument ('name' , required = True , type = str , help = "user's name" , location = 'json' )
55- parser .add_argument ('email' , required = True , type = str , help = "user's email" , location = 'json' )
56- parser .add_argument ('password' , required = True , type = str , help = "password" , location = 'json' )
65+ parser .add_argument ('name' , required = True , type = str ,
66+ help = "user's name" , location = 'json' )
67+ parser .add_argument ('email' , required = True , type = str ,
68+ help = "user's email" , location = 'json' )
69+ parser .add_argument ('password' , required = True , type = str ,
70+ help = "password" , location = 'json' )
5771
5872 user_field = API .model ('Users' , {
5973 'name' : fields .String ,
6074 'email' : fields .String ,
6175 'password' : fields .String
6276 })
63-
77+ @ API . doc ( responses = GET , security = ACCESS_TOKEN )
6478 def get (self ):
6579 users_query = Users .query .all ()
6680 results = USERS_SCHEMA .dump (users_query , many = True ).data
@@ -82,30 +96,40 @@ def post(self):
8296 code = HTTPStatus .INTERNAL_SERVER_ERROR
8397 return make_response (body , code .value )
8498
99+
85100@API .route ('/auth' )
86101class GetUser (Resource ):
87102 parser = reqparse .RequestParser ()
88- parser .add_argument ('name' , required = True , type = str , help = "user's name" , location = 'json' )
89- parser .add_argument ('password' , required = True , type = str , help = "user's password" , location = 'json' )
103+ parser .add_argument ('name' , required = True , type = str ,
104+ help = "user's name" , location = 'json' )
105+ parser .add_argument ('password' , required = True , type = str ,
106+ help = "user's password" , location = 'json' )
90107
91108 user_field = API .model ('Auth' , {
92109 'name' : fields .String ,
93110 'password' : fields .String
94111 })
95112
113+ @API .doc (responses = POST , security = ACCESS_TOKEN )
96114 @API .expect (user_field )
97115 def post (self ):
98116 args = self .parser .parse_args ()
99117 try :
100- user = Users .query .filter (Users .name == args ['name' ], Users .password == args ['password' ]).first ()
101- body = jsonify ({"user" : USERS_SCHEMA .dump (user ).data })
118+ #, Users.password == args['password']
119+ user = Users .query .filter (Users .name == args ['name' ]).first ()
120+ if bcrypt .checkpw (args ['password' ].encode ("UTF-8" ), user .password .encode ("UTF-8" )):
121+ #여기서 이제 토큰 발급해서 보내주기
122+ payload = {
123+ "exp" : str (datetime .date .today ())
124+ }
125+ token = jwt .encode (payload , SECERET_KEY , "HS256" )
126+ body = jsonify ({"access_token" : token .decode ("UTF-8" ), "user" : USERS_SCHEMA .dump (user ).data })
102127 if user :
103128 code = HTTPStatus .OK
104129 else :
105130 code = HTTPStatus .NOT_FOUND
106131 except SQLAlchemyError as err :
107132 message = str (err )
108- body = jsonify ({"message" : message })
133+ body = jsonify ({"message" : message })
109134 code = HTTPStatus .INTERNAL_SERVER_ERROR
110135 return make_response (body , code .value )
111-
0 commit comments