42 lines
952 B
Python
42 lines
952 B
Python
import jwt
|
|
from hashlib import md5
|
|
|
|
JWT_SECRET_KEY = "my secret key"
|
|
JWT_ALGORITHM = "HS256"
|
|
|
|
JWT_AUTH_HEADER = "HTTP_AUTHORIZATION"
|
|
|
|
def password_to_hash(password):
|
|
return md5(password.encode('utf-8')).hexdigest()
|
|
|
|
def verify_password(password, hash):
|
|
return password_to_hash(password) == hash
|
|
|
|
def jwt_encode(user):
|
|
payload = {
|
|
"user_id" : user.id
|
|
}
|
|
|
|
token = jwt.encode(payload, JWT_SECRET_KEY, JWT_ALGORITHM)
|
|
|
|
if isinstance(token, bytes):
|
|
return token.decode('utf-8')
|
|
|
|
return token
|
|
|
|
def jwt_decode(token):
|
|
try:
|
|
payload = jwt.decode(token, JWT_SECRET_KEY, algorithms = [JWT_ALGORITHM])
|
|
except jwt.DecodeError:
|
|
raise Exception("Error decoding signature")
|
|
except jwt.InvalidTokenError:
|
|
raise Exception("Invalid token")
|
|
|
|
user_id = payload["user_id"]
|
|
return user_id
|
|
|
|
def authorize(request):
|
|
token = request.headers.get(JWT_AUTH_HEADER, '')
|
|
user_id = jwt_decode(token)
|
|
return user_id
|