trade.app.backend/generalApp/utilities.py

122 lines
3.2 KiB
Python

from hmac import compare_digest as checkHash
from django.http import HttpResponse
from threading import Thread
import threading
import requests
import crypt
import json
import jwt
# Session / Token Methods
tokenKey = 'U0VDUkVUX1BBU1NfQ0hFQ0s#!@#SDS!#'
tokens = []
def createSession(request, userDict):
newToken = createToken(userDict)
tokens.append(newToken)
return newToken
def createToken(userDict):
return jwt.encode( { 'payload': userDict }, tokenKey, algorithm = 'HS256' ).decode('UTF-8')
def checkSession(request, privilige):
token = tryGetTokenFromRequest(request)
for currentToken in tokens:
if token == currentToken:
if decodeToken(currentToken)['payload']['privilige'] >= privilige:
return True
else:
return False
return False
def tryGetTokenFromRequest(request):
try:
return jsonLoad(request)['token']
except:
pass
def decodeToken(token):
return jwt.decode( token, tokenKey, algorithms = ['HS256'] )
def checkUserPermission(modelDict, request):
def UserIsAdmin(token):
return decodeToken(token)['payload']['privilige'] == 3
def UserIsModer(token):
return decodeToken(token)['payload']['privilige'] == 2
def checkUserChanges(modelDict, token):
return decodeToken(token)['payload']['id'] == modelDict['user_id']
def checkUser(modelDict, token):
return decodeToken(token)['payload']['id'] == modelDict['id']
def modelIsNotUser(modelDict):
return 'user_id' in modelDict
def modelIsUser(modelDict):
return 'login' in modelDict
def checkCheats(modelDict, token):
if 'privilige' in modelDict:
if modelDict['privilige'] != decodeToken(token)['payload']['privilige']:
return True
else:
return False
else:
return False
token = tryGetTokenFromRequest(request)
if modelIsNotUser(modelDict):
if UserIsAdmin(token):
return True
elif UserIsModer(token):
return True
elif checkUserChanges(modelDict, token):
return True
else:
return False
elif modelIsUser(modelDict):
if UserIsAdmin(token):
return True
elif checkCheats(modelDict, token):
return False
elif checkUser(modelDict, token):
return True
else:
return False
def deleteSession(request):
token = jsonLoad(request)['token']
try:
tokens.remove(token)
return HttpResponse("Session Has Been Deleted")
except:
return HttpResponse("Session Delete Error")
# Security Hash / Crypt Methods
def createPassHash(password):
return crypt.crypt(password)
def checkPassHash(password, hashedPass):
return checkHash(hashedPass, crypt.crypt(password, hashedPass))
# Thread Method
def newThread(function):
def decorator(*args, **kwargs):
thread = Thread(target = function, args = args, kwargs = kwargs)
thread.daemon = True
thread.start()
return decorator
# JSON Load Method
def jsonLoad(self):
return json.loads(self.body.decode('utf-8'))