core: Tidy contributor onboarding. - Fixes typos. - Fixes stale links. - Tidies Makefile so that Poetry env is optional for hygiene commands. - Remove mismatched YAML naming. - Uses shebang on Python scripts. - Document semver usage. - Redirect OpenAPI schema. Signed-off-by: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com>
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
"""This file needs to be run from the root of the project to correctly
 | 
						|
import authentik. This is done by the dockerfile."""
 | 
						|
from sys import exit as sysexit
 | 
						|
from time import sleep
 | 
						|
 | 
						|
from psycopg import OperationalError, connect
 | 
						|
from redis import Redis
 | 
						|
from redis.exceptions import RedisError
 | 
						|
 | 
						|
from authentik.lib.config import CONFIG, redis_url
 | 
						|
 | 
						|
CHECK_THRESHOLD = 30
 | 
						|
 | 
						|
 | 
						|
def check_postgres():
 | 
						|
    attempt = 0
 | 
						|
    while True:
 | 
						|
        if attempt >= CHECK_THRESHOLD:
 | 
						|
            sysexit(1)
 | 
						|
        try:
 | 
						|
            conn = connect(
 | 
						|
                dbname=CONFIG.refresh("postgresql.name"),
 | 
						|
                user=CONFIG.refresh("postgresql.user"),
 | 
						|
                password=CONFIG.refresh("postgresql.password"),
 | 
						|
                host=CONFIG.refresh("postgresql.host"),
 | 
						|
                port=CONFIG.get_int("postgresql.port"),
 | 
						|
                sslmode=CONFIG.get("postgresql.sslmode"),
 | 
						|
                sslrootcert=CONFIG.get("postgresql.sslrootcert"),
 | 
						|
                sslcert=CONFIG.get("postgresql.sslcert"),
 | 
						|
                sslkey=CONFIG.get("postgresql.sslkey"),
 | 
						|
            )
 | 
						|
            conn.cursor()
 | 
						|
            break
 | 
						|
        except OperationalError as exc:
 | 
						|
            sleep(1)
 | 
						|
            CONFIG.log("info", f"PostgreSQL connection failed, retrying... ({exc})")
 | 
						|
        finally:
 | 
						|
            attempt += 1
 | 
						|
    CONFIG.log("info", "PostgreSQL connection successful")
 | 
						|
 | 
						|
 | 
						|
def check_redis():
 | 
						|
    url = CONFIG.get("cache.url") or redis_url(CONFIG.get("redis.db"))
 | 
						|
    attempt = 0
 | 
						|
    while True:
 | 
						|
        if attempt >= CHECK_THRESHOLD:
 | 
						|
            sysexit(1)
 | 
						|
        try:
 | 
						|
            redis = Redis.from_url(url)
 | 
						|
            redis.ping()
 | 
						|
            break
 | 
						|
        except RedisError as exc:
 | 
						|
            sleep(1)
 | 
						|
            CONFIG.log("info", f"Redis Connection failed, retrying... ({exc})")
 | 
						|
        finally:
 | 
						|
            attempt += 1
 | 
						|
    CONFIG.log("info", "Redis Connection successful")
 | 
						|
 | 
						|
 | 
						|
def wait_for_db():
 | 
						|
    CONFIG.log("info", "Starting authentik bootstrap")
 | 
						|
    # Sanity check, ensure SECRET_KEY is set before we even check for database connectivity
 | 
						|
    if CONFIG.get("secret_key") is None or len(CONFIG.get("secret_key")) == 0:
 | 
						|
        CONFIG.log("info", "----------------------------------------------------------------------")
 | 
						|
        CONFIG.log(
 | 
						|
            "info", "Secret key missing, check https://docs.goauthentik.io/docs/install-config/"
 | 
						|
        )
 | 
						|
        CONFIG.log("info", "----------------------------------------------------------------------")
 | 
						|
        sysexit(1)
 | 
						|
    check_postgres()
 | 
						|
    check_redis()
 | 
						|
    CONFIG.log("info", "Finished authentik bootstrap")
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    wait_for_db()
 |