| import boto3
|
| import json
|
| import os
|
| from cryptography.fernet import Fernet
|
| from botocore.exceptions import NoCredentialsError, PartialCredentialsError
|
| from dotenv import load_dotenv
|
|
|
|
|
| load_dotenv()
|
|
|
| def get_secret(secret_name: str, region_name: str = "us-east-1"):
|
| """
|
| Retrieve and decrypt secret from AWS Secrets Manager.
|
| Loads AWS credentials from .env file.
|
| """
|
|
|
| try:
|
|
|
| session = boto3.session.Session(
|
| aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"),
|
| aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY"),
|
| aws_session_token=os.getenv("AWS_SESSION_TOKEN")
|
| )
|
|
|
| client = session.client("secretsmanager", region_name=region_name)
|
|
|
|
|
| response = client.get_secret_value(SecretId=secret_name)
|
|
|
| except NoCredentialsError:
|
| print("β AWS credentials not available. Please check your .env file.")
|
| return None
|
| except PartialCredentialsError:
|
| print("β Incomplete AWS credentials found in .env.")
|
| return None
|
| except Exception as e:
|
| print(f"β Error retrieving secret: {e}")
|
| return None
|
|
|
|
|
| if "SecretString" not in response:
|
| print("β SecretString missing in response.")
|
| return None
|
|
|
| secret_dict = json.loads(response["SecretString"])
|
|
|
|
|
| fernet_key = secret_dict.get("Fernet_Key")
|
| if not fernet_key:
|
| print("β Fernet_Key missing in secret.")
|
| return None
|
|
|
| cipher = Fernet(fernet_key)
|
|
|
|
|
| decrypted_data = {}
|
| for key, value in secret_dict.items():
|
| if key == "Fernet_Key":
|
| decrypted_data[key] = value
|
| else:
|
| try:
|
| decrypted_data[key] = cipher.decrypt(value.encode()).decode()
|
| except Exception as e:
|
| decrypted_data[key] = f"β οΈ Failed to decrypt ({e})"
|
|
|
|
|
| CONNECTIONS_HOST = decrypted_data.get("CONNECTIONS_HOST", "")
|
| CONNECTIONS_DB = decrypted_data.get("CONNECTIONS_DB", "")
|
| CONNECTIONS_USER = decrypted_data.get("CONNECTIONS_USER", "")
|
| CONNECTIONS_PASS = decrypted_data.get("CONNECTIONS_PASS", "")
|
| OPENAI_API_KEY = decrypted_data.get("OPENAI_API_KEY", "")
|
| OPENAI_MODEL_NAME = decrypted_data.get("OPENAI_MODEL_NAME", "")
|
| OPENAI_MODEL_TURBO = decrypted_data.get("OPENAI_MODEL_TURBO", "")
|
| REDIS_HOST = decrypted_data.get("REDIS_HOST", "")
|
| REDIS_PORT = decrypted_data.get("REDIS_PORT", "")
|
| REDIS_DB = decrypted_data.get("REDIS_DB", "")
|
| REDIS_PASSWORD = decrypted_data.get("REDIS_PASSWORD", "")
|
| REDIS_USER = decrypted_data.get("REDIS_USER", "")
|
| REDIS_URL = decrypted_data.get("REDIS_URL", "")
|
| QDRANT_HOST = decrypted_data.get("QDRANT_HOST", "")
|
| QDRANT_PORT = decrypted_data.get("QDRANT_PORT", "")
|
| QDRANT_COLLECTION_NAME = decrypted_data.get("QDRANT_COLLECTION_NAME", "")
|
| QDRANT_URL = decrypted_data.get("QDRANT_URL", "")
|
| QDRANT_API_KEY = decrypted_data.get("QDRANT_API_KEY", "")
|
|
|
| return (
|
| decrypted_data,
|
| CONNECTIONS_HOST,
|
| CONNECTIONS_DB,
|
| CONNECTIONS_USER,
|
| CONNECTIONS_PASS,
|
| OPENAI_API_KEY,
|
| OPENAI_MODEL_NAME,
|
| OPENAI_MODEL_TURBO,
|
| REDIS_HOST,
|
| REDIS_PORT,
|
| REDIS_DB,
|
| REDIS_PASSWORD,
|
| REDIS_USER,
|
| QDRANT_HOST,
|
| QDRANT_PORT,
|
| QDRANT_COLLECTION_NAME,
|
| QDRANT_URL,
|
| QDRANT_API_KEY,
|
| REDIS_URL,
|
| )
|
|
|
|
|
|
|
| secret_name = "Demo/MR/skeys"
|
| region_name = "us-east-1"
|
|
|
| secrets = get_secret(secret_name, region_name)
|
|
|
| if secrets:
|
| (
|
| decrypted_data,
|
| CONNECTIONS_HOST,
|
| CONNECTIONS_DB,
|
| CONNECTIONS_USER,
|
| CONNECTIONS_PASS,
|
| OPENAI_API_KEY,
|
| OPENAI_MODEL_NAME,
|
| OPENAI_MODEL_TURBO,
|
| REDIS_HOST,
|
| REDIS_PORT,
|
| REDIS_DB,
|
| REDIS_PASSWORD,
|
| REDIS_USER,
|
| QDRANT_HOST,
|
| QDRANT_PORT,
|
| QDRANT_COLLECTION_NAME,
|
| QDRANT_URL,
|
| QDRANT_API_KEY,
|
| REDIS_URL,
|
| ) = secrets
|
|
|
| print("\nβ
Successfully retrieved and decrypted secret!\n")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|