import hashlib import os import uuid import jwt from flask import request, jsonify from db import db from models import User def hash_password(password): salt = uuid.uuid4().hex return hashlib.sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt def check_password(hashed_password, user_password): password, salt = hashed_password.split(':') return password == hashlib.sha256(salt.encode() + user_password.encode()).hexdigest() def get_token(): token = None if 'Authorization' in request.headers: token = request.headers['Authorization'].split(" ")[1] return token def extract_token_data(token): if token is not None: try: return jwt.decode(token, os.getenv('SECRET_KEY'), algorithms=["HS256"]) except: return None else: return None def get_username_from_token_data(token_data): if token_data is not None: return token_data['username'] else: return None def get_user_id_from_username(username): if username is not None: return db.session.query(User).filter_by(username=username).first().user_id else: return None def return_401(): return jsonify({"status": 401, "text": "Authorization token not provided or not valid"})