tuiHoneyPot

front and back end of my TUI honeypot
Log | Files | Refs | README

crypto.py (1759B)


      1 import hashlib
      2 import secrets
      3 import jwt
      4 import datetime
      5 import os
      6 import logging
      7 
      8 from html import escape
      9 from blueprints.utils import database
     10 from functools import wraps
     11 from flask import request, jsonify, abort, session
     12 from dotenv import load_dotenv
     13 
     14 load_dotenv()
     15 
     16 jwt_secret = os.getenv("JWT_SECRET")
     17 
     18 
     19 def hash_string(string):
     20     sha3 = hashlib.sha3_512()
     21     sha3.update(string.encode('utf-8'))
     22 
     23     return sha3.hexdigest()
     24 
     25 
     26 def verify_hash(hash1, hash2):
     27     return secrets.compare_digest(hash1, hash2)
     28 
     29 
     30 def create_jwt(name):
     31     return jwt.encode({
     32         "username": escape(name),
     33         "isAdmin": 1 if database.is_admin(name) else 0,
     34         "exp": datetime.datetime.utcnow() + datetime.timedelta(hours=1)
     35     }, jwt_secret, algorithm="HS512")
     36 
     37 
     38 def decode_jwt(token):
     39     try:
     40         return jwt.decode(token, jwt_secret, algorithms=["HS512"])
     41     except jwt.ExpiredSignatureError:
     42         return None
     43     except jwt.InvalidTokenError:
     44         return None
     45 
     46 
     47 def require_token(f):
     48     @wraps(f)
     49     def decorated_function(*args, **kwargs):
     50         token = session.get('jwt-token', None)
     51 
     52         if not token:
     53             logging.warning("No JWT token provided")
     54             return abort(403)
     55 
     56         try:
     57             data = jwt.decode(token, jwt_secret, algorithms=['HS512'])
     58         except jwt.ExpiredSignatureError:
     59             logging.info("JWT token has expired")
     60             return jsonify({'message': 'Token has expired'}), 401
     61         except jwt.InvalidTokenError:
     62             logging.warning("Invalid JWT token provided")
     63             return abort(403)
     64 
     65         # You can access the token payload in the route function using data
     66         kwargs['jwt_data'] = data
     67 
     68         return f(*args, **kwargs)
     69 
     70     return decorated_function
     71