Skip to content
Snippets Groups Projects
Select Git revision
  • b2d90f142b6c8026c2420ebc5fc9eeb330e775a8
  • main default
  • full_migration
  • v1.0.9 protected
  • v1.0.8 protected
  • v1.0.7 protected
  • v1.0.6 protected
  • v1.0.5 protected
  • v1.0.4 protected
  • v1.0.3 protected
  • v1.0.2 protected
  • v1.0.1 protected
  • v1.0 protected
13 results

api_example_config.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    api_example_config.py 4.31 KiB
    # Defaults for development, do not use in production!
    DEBUG = True
    
    # Name of this instance
    API_SERVER_NAME = "dev"
    
    # Prefix which is prepended to paths (which are saved in the database) before they are provided by the api
    # Must include the last /
    FILE_PATH_PREFIX = "https://video.fsmpi.rwth-aachen.de/files/"
    
    # Used for all cookies
    # While the frontend and api are on different subdomains, that still counts as 'same-site'
    COOKIES_SAMESITE = "strict"
    COOKIES_SECURE = False
    COOKIES_DOMAIN = ""
    
    # These are flask's options for the session cookie
    SESSION_COOKIE_SAMESITE = COOKIES_SAMESITE
    SESSION_COOKIE_SECURE = COOKIES_SECURE
    SESSION_COOKIE_DOMAIN = COOKIES_DOMAIN
    
    # Used by flask to sign the cookies
    SECRET_KEY = "something random"
    
    # Scheduler should only be disabled for unit tests
    DISABLE_SCHEDULER = False
    
    DB_DATA = "../config/db_example_data.sql"
    DB_CONNECTIONS = {
        # Maximum amount of concurrent open connections
        "max_count": 10,
        # How many connections should be readonly. Only relevant if readonly cannot be set per transaction (only applies to
        #   sqlite right now)
        "readonly_percent": 0.75,
        # Maximum time to wait for a free connection (An API request will probably fail if this times out)
        "max_wait_time_sec": 10,
        # Maximum amount of transaction requests which may wait concurrently. More incoming requests will fail immediately
        "max_waiting_count": 25,
        # Maximum amount of attempts for a read transaction if there are conflicts between the transactions
        "max_read_attempts": 2,
        # Maximum amount of attempts for a write transaction if there are conflicts between the transactions
        "max_write_attempts": 2
    }
    
    # DB_ENGINE = "mysql"
    MYSQL = {
        "host": "10.0.0.101",
        "port": 43045,
        "user": "video",
        "password": "video",
        "database": "video_ag_test",
        #  "unix_socket": "/var/run/mysqld/mysqld.sock"
    }
    
    #  DB_ENGINE = "postgres"
    POSTGRES = {
        "host": "10.0.0.101",
        "port": 5432,
        "user": "videoag",
        "password": "",
        "database": "videoag"
    }
    
    DB_ENGINE = "sqlite"
    SQLITE = {
        "file": "db.sqlite",
        "schema": "../config/db_schema_sqlite.sql",
        "init_schema": True,
        "init_data": True
    }
    
    # This is host based. It uses a simple counter. For example for a window size of one hour, every hour the specified
    #   amount of requests can be made
    # Limits are checked and updated in the order specified. Short limits should be checked first (Otherwise the
    #   longer limit is used up by request which have been blocked by the shorter limit)
    # id is used in diagnostics
    API_GLOBAL_RATE_LIMIT = [
        {
            "id": "short",
            "window_size_seconds": 60,
            "max_request_count": 60
        },
        {
            "id": "long",
            "window_size_seconds": 60 * 60,
            "max_request_count": 600
        }
    ]
    
    # Works the same as global but used for authentication requests
    API_AUTH_RATE_LIMIT = [
        {
            "id": "short",
            "window_size_seconds": 10 * 60,
            "max_request_count": 8
        },
        {
            "id": "long",
            "window_size_seconds": 4 * 60 * 60,
            "max_request_count": 24
        }
    ]
    
    # Absolute limit. If there are already 32 chapters (visible or not visible), no more suggestions are accepted
    API_CHAPTER_SUGGESTIONS_LIMIT_PER_LECTURE = 32
    # This is NOT host based but globally. It uses a sliding window. For example for a window size of 24 hours, no more than
    # the specified amount of requests can be made in last 24 hours. The interval size specifies how often the window 'slides'
    API_CHAPTER_SUGGESTIONS_RATE_LIMIT = {
        "window_size_seconds": 24 * 60 * 60,
        "interval_size_seconds": 10 * 60,
        "max_request_count": 600
    }
    
    DEFAULT_CACHE_CONTROL_MAX_AGE_SECONDS = 5 * 60
    
    API_DIAGNOSTICS_HISTORY_SIZE_MINUTES = 7 * 24 * 60
    API_DIAGNOSTICS_INTERVAL_SIZE_MINUTES = 30
    
    LIVE_CONFIG_UPDATE_INTERVAL_SECONDS = 60
    
    #  LDAP_HOST = "auth.fsmpi.rwth-aachen.de"
    LDAP_PORT = 636
    LDAP_GROUPS = ["fachschaft"]
    
    #  RWTH_API_KEY = ""
    
    RWTH_IP_RANGES = ["134.130.0.0/16", "137.226.0.0/16", "134.61.0.0/16", "192.35.229.0/24", "2a00:8a60::/32"]
    FSMPI_IP_RANGES = ["137.226.35.192/29", "137.226.75.0/27", "137.226.127.32/27", "137.226.231.192/26", "134.130.102.0/26", "127.0.0.1/32"]
    INTERNAL_IP_RANGES = ["127.0.0.0/8", "192.168.155.0/24", "fd78:4d90:6fe4::/48"]
    
    # Only for debugging. In percent, from 0 to 100. With this you need luck to make a request
    #  API_ROULETTE_MODE = 0