This commit is contained in:
1
src/utils/__init__.py
Normal file
1
src/utils/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .aes_encrypt import AESCrypto
|
||||
57
src/utils/aes_encrypt.py
Normal file
57
src/utils/aes_encrypt.py
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
"""
|
||||
AES Encryption methods
|
||||
"""
|
||||
|
||||
__author__ = '@tormakris'
|
||||
__copyright__ = "Copyright 2020, onSpot Team"
|
||||
__module_name__ = "aes_encrypt"
|
||||
__version__text__ = "1"
|
||||
|
||||
import base64
|
||||
import pickle
|
||||
|
||||
from Crypto.Cipher import AES
|
||||
|
||||
from flaskaddons.fred import flaskred
|
||||
|
||||
|
||||
class AESCrypto:
|
||||
def __init__(self, encoded_secret_key: str, padding_character: bytes = '{'.encode('ascii')):
|
||||
self.padding_character = padding_character
|
||||
self.encoded_secret_key = encoded_secret_key
|
||||
|
||||
def encrypt_message(self, private_msg: str) -> tuple:
|
||||
secret_key = base64.b64decode(self.encoded_secret_key)
|
||||
cipher = AES.new(secret_key, AES.MODE_EAX)
|
||||
ciphertext, tag = cipher.encrypt_and_digest(private_msg.encode('UTF-8'))
|
||||
return cipher.nonce, ciphertext, tag
|
||||
|
||||
def decrypt_message(self, nonce: bytes, encoded_encrypted_msg: bytes, tag: bytes) -> str:
|
||||
secret_key = base64.b64decode(self.encoded_secret_key)
|
||||
cipher = AES.new(secret_key, AES.MODE_EAX, nonce)
|
||||
msg = cipher.decrypt_and_verify(encoded_encrypted_msg, tag).decode('UTF-8')
|
||||
return msg
|
||||
|
||||
|
||||
class EncryptedUserRedis:
|
||||
|
||||
def __init__(self, encoded_secret_key: str):
|
||||
self.aes = AESCrypto(encoded_secret_key)
|
||||
|
||||
def store(self, user: dict) -> None:
|
||||
nonce, ciphertext, tag = self.aes.encrypt_message(user['password'])
|
||||
user['nonce'] = nonce
|
||||
user['ciphertext'] = ciphertext
|
||||
user['tag'] = tag
|
||||
user.pop('password', None)
|
||||
flaskred.set(user['name'], pickle.dumps(user))
|
||||
|
||||
def load(self, username: str) -> dict:
|
||||
encrypteddict = pickle.loads(flaskred.get(username))
|
||||
|
||||
plaindict = {"name": encrypteddict['name'],
|
||||
"password": self.aes.decrypt_message(encrypteddict['nonce'], encrypteddict['ciphertext'],
|
||||
encrypteddict['tag'])}
|
||||
return plaindict
|
||||
28
src/utils/config.py
Normal file
28
src/utils/config.py
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
|
||||
"""
|
||||
Configuration
|
||||
"""
|
||||
|
||||
|
||||
__author__ = "@tormakris"
|
||||
__copyright__ = "Copyright 2020, onSpot Team"
|
||||
__module_name__ = "config"
|
||||
__version__text__ = "1"
|
||||
|
||||
|
||||
PORT = os.environ.get("ONSPOT_PORT", 8080)
|
||||
DEBUG = os.environ.get("ONSPOT_DEBUG", True)
|
||||
ALLOWED_ORIGINS = os.environ.get('ALLOWED_ORIGINS', '*')
|
||||
|
||||
SENTRY_DSN = os.environ.get("SENTRY_DSN")
|
||||
RELEASE_ID = os.environ.get("RELEASE_ID", "test")
|
||||
RELEASEMODE = os.environ.get("ONSPOT_RELEASEMODE", "dev")
|
||||
|
||||
REDIS_URL = os.getenv("ONSPOT_REDIS_URL")
|
||||
|
||||
ENCODED_SECRET_KEY = os.getenv("ONSPOT_ENCODED_SECRET_KEY")
|
||||
|
||||
SPOTIFY_CLIENT_ID = os.getenv("ONSPOT_SPOTIFY_CLIENT_ID")
|
||||
SPOTIFY_CLIENT_SECRET = os.getenv("ONSPOT_SPOTIFY_CLIENT_SECRET")
|
||||
30
src/utils/errorhandlers.py
Normal file
30
src/utils/errorhandlers.py
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import musicbrainzngs
|
||||
|
||||
"""
|
||||
Flask error handler functions
|
||||
"""
|
||||
|
||||
__author__ = '@tormakris'
|
||||
__copyright__ = "Copyright 2020, onSpot Team"
|
||||
__module_name__ = "errorhandlers"
|
||||
__version__text__ = "1"
|
||||
|
||||
|
||||
def get_standard_error_handler(code: int):
|
||||
def error_handler(err):
|
||||
musicbrainzngs.auth(None, None)
|
||||
return {"msg": str(err)}, code
|
||||
|
||||
return error_handler
|
||||
|
||||
|
||||
# function to register all handlers
|
||||
|
||||
|
||||
def register_all_error_handlers(app):
|
||||
error_codes_to_override = [404, 403, 401, 405, 400, 409, 422]
|
||||
|
||||
for code in error_codes_to_override:
|
||||
app.register_error_handler(code, get_standard_error_handler(code))
|
||||
Reference in New Issue
Block a user