Source code for app.config

"""Configuration settings for the Mail List Shield application.

This module defines the Flask application configuration class and
initializes shared resources like the S3 client and timezone.
"""

from decouple import config, Csv
import pytz
import boto3

import os


# Timezone used in this app
[docs] appTimezoneStr = config("TIMEZONE")
[docs] appTimezone = pytz.timezone(appTimezoneStr)
# S3 resource to be imported in other modules # Use s3.meta.client if client object is needed
[docs] s3 = boto3.resource( "s3", endpoint_url=config("S3_ENDPOINT"), aws_access_key_id=config("S3_KEY"), aws_secret_access_key=config("S3_SECRET"), )
# Flask app configuration
[docs] class Config: """Configuration class for the Flask application. This class contains the configuration for the Flask application, including database connection, email settings. Most of these are read from environment variables using the `decouple` library. """ # Grabs the folder where the script runs
[docs] BASEDIR = os.path.abspath(os.path.dirname(__file__))
# Enable protection against Cross-site Request Forgery
[docs] CSRF_ENABLED = True
# Application Details
[docs] APP_NAME = config("APP_NAME")
[docs] APP_ROOT_URL = config("APP_ROOT_URL", "https://localhost:5000/")
[docs] TIMEZONE = config("TIMEZONE")
[docs] FLASK_DEBUG = config("FLASK_DEBUG", cast=bool)
# Self signed certificates for local development # Only used when FLASK_DEBUG is True if FLASK_DEBUG:
[docs] FLASK_RUN_CERT = config("FLASK_RUN_CERT")
FLASK_RUN_KEY = config("FLASK_RUN_KEY") # Database
[docs] SQLALCHEMY_DATABASE_URI = config( "DATABASE_CONNECTION_STRING", default=f"sqlite:///{os.path.join(os.path.dirname(BASEDIR), 'database.db')}", )
[docs] SECRET_KEY = config("DATABASE_SECRET_KEY")
[docs] SQLALCHEMY_ENGINE_OPTIONS = { "pool_size": 10, "pool_recycle": 60, # To handle disconnects as described here: https://docs.sqlalchemy.org/en/14/core/pooling.html#pool-disconnects "pool_pre_ping": True, }
[docs] SQLALCHEMY_TRACK_MODIFICATIONS = False
# Object Storage
[docs] S3_BUCKET_NAME = config("S3_BUCKET_NAME")
[docs] S3_ENDPOINT = config("S3_ENDPOINT")
[docs] S3_KEY = config("S3_KEY")
[docs] S3_SECRET = config("S3_SECRET")
# Email
[docs] MAIL_FROM = config("MAIL_FROM")
[docs] MAIL_SERVER = config("MAIL_SERVER")
[docs] MAIL_PORT = config("MAIL_PORT", cast=int)
[docs] MAIL_USE_TLS = config("MAIL_USE_TLS", cast=bool)
[docs] MAIL_USE_SSL = config("MAIL_USE_SSL", cast=bool)
[docs] MAIL_USERNAME = config("MAIL_USERNAME")
[docs] MAIL_PASSWORD = config("MAIL_PASSWORD")
[docs] MAIL_DEBUG = config("MAIL_DEBUG", cast=bool)
# OAuth
[docs] GOOGLE_CLIENT_ID = config("GOOGLE_CLIENT_ID")
[docs] GOOGLE_CLIENT_SECRET = config("GOOGLE_CLIENT_SECRET")
# Recaptcha v2 credentials
[docs] RECAPTCHA_SITE_KEY = config("RECAPTCHA_SITE_KEY")
[docs] RECAPTCHA_SECRET_KEY = config("RECAPTCHA_SECRET_KEY")
# Stripe
[docs] STRIPE_PUBLISHABLE_KEY = config("STRIPE_PUBLISHABLE_KEY")
[docs] STRIPE_SECRET_KEY = config("STRIPE_SECRET_KEY")
[docs] STRIPE_WEBHOOK_SECRET = config("STRIPE_WEBHOOK_SECRET")
[docs] STRIPE_PRODUCT_ID_FOR_CREDITS = config("STRIPE_PRODUCT_ID_FOR_CREDITS")
[docs] STRIPE_CREDIT_UNIT_COST = config("STRIPE_CREDIT_UNIT_COST", cast=int)
# Mail List Shield Config
[docs] MLS_WORKERS = config("MLS_WORKERS", cast=Csv())
[docs] MLS_WORKER_API_KEY = config("MLS_WORKER_API_KEY")
[docs] MLS_FREE_CREDITS_FOR_NEW_ACCOUNTS = config( "MLS_FREE_CREDITS_FOR_NEW_ACCOUNTS", cast=int )
# Worker to be used for the next validation
[docs] NEXT_WORKER = 0