Skip to content

Commit 6d56d6c

Browse files
committed
final sample api code with jwt
0 parents  commit 6d56d6c

File tree

5 files changed

+80
-0
lines changed

5 files changed

+80
-0
lines changed

__pycache__/security.cpython-36.pyc

851 Bytes
Binary file not shown.

__pycache__/user.cpython-36.pyc

434 Bytes
Binary file not shown.

app.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
from flask import Flask,request
2+
from flask_restful import Resource, Api,reqparse
3+
from flask_jwt import JWT, jwt_required
4+
5+
from security import authenticate,identity
6+
7+
app = Flask(__name__)
8+
app.secret_key = 'sssshhh.....its a secret'
9+
api = Api(app)
10+
11+
jwt = JWT(app,authenticate,identity) # /auth
12+
13+
items = []
14+
15+
class Item(Resource):
16+
parser = reqparse.RequestParser()
17+
parser.add_argument('price',
18+
type=float,
19+
required=True,
20+
help="This field cannot be left blank"
21+
)
22+
@jwt_required()
23+
def get(self,name):
24+
item = next(filter(lambda x:x['name']==name,items),None)
25+
return {'item':item},200 if item else 404
26+
27+
def post(self,name):
28+
if next(filter(lambda x:x['name']==name,items),None) is not None:
29+
return {'message':'an item with name \'{}\' already exist'.format(name)},400
30+
data = Item.parser.parse_args()
31+
item = {'name':name,'price':data['price']}
32+
items.append(item)
33+
return item,201
34+
35+
def delete(self,name):
36+
global items
37+
items = list(filter(lambda item:item['name']!=name,items))
38+
return {'message':'Item deleted'}
39+
40+
def put(self,name):
41+
data = Item.parser.parse_args()
42+
item = next(filter(lambda item:item['name']==name,items),None)
43+
if item is None:
44+
item = {'name':name,'price':data['price']}
45+
items.append(item)
46+
else:
47+
item.update(data)
48+
return item
49+
50+
class ItemList(Resource):
51+
def get(self):
52+
return {'items':items}
53+
54+
api.add_resource(Item,'/item/<string:name>')
55+
api.add_resource(ItemList,'/items')
56+
57+
app.run(port=8080,debug=True)

security.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from werkzeug.security import safe_str_cmp
2+
from user import User
3+
4+
users = [
5+
User(1,"bob","asdf")
6+
]
7+
8+
username_mapping = {u.username:u for u in users}
9+
userid_mapping = {u.id:u for u in users}
10+
11+
def authenticate(username,password):
12+
user = username_mapping.get(username,None)
13+
if user and safe_str_cmp(user.password,password):
14+
return user
15+
16+
def identity(payload):
17+
userid = payload['identity']
18+
return userid_mapping.get(userid,None)

user.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class User:
2+
def __init__(self,_id,username,password):
3+
self.id = _id
4+
self.username = username
5+
self.password = password

0 commit comments

Comments
 (0)