1cfe1aff13
* root: initial rename * web: rename custom element prefix * root: rename external functions with pb_ prefix * root: fix formatting * root: replace domain with goauthentik.io * proxy: update path * root: rename remaining prefixes * flows: rename file extension * root: pbadmin -> akadmin * docs: fix image filenames * lifecycle: ignore migration files * ci: copy default config from current source before loading last tagged * *: new sentry dsn * tests: fix missing python3.9-dev package * root: add additional migrations for service accounts created by outposts * core: mark system-created service accounts with attribute * policies/expression: fix pb_ replacement not working * web: fix last linting errors, add lit-analyse * policies/expressions: fix lint errors * web: fix sidebar display on screens where not all items fit * proxy: attempt to fix proxy pipeline * proxy: use go env GOPATH to get gopath * lib: fix user_default naming inconsistency * docs: add upgrade docs * docs: update screenshots to use authentik * admin: fix create button on empty-state of outpost * web: fix modal submit not refreshing SiteShell and Table * web: fix height of app-card and height of generic icon * web: fix rendering of subtext * admin: fix version check error not being caught * web: fix worker count not being shown * docs: update screenshots * root: new icon * web: fix lint error * admin: fix linting error * root: migrate coverage config to pyproject
58 lines
1.6 KiB
Python
Executable file
58 lines
1.6 KiB
Python
Executable file
#!/usr/bin/env python
|
|
"""System Migration handler"""
|
|
from importlib.util import module_from_spec, spec_from_file_location
|
|
from inspect import getmembers, isclass
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
from psycopg2 import connect
|
|
from structlog import get_logger
|
|
|
|
from authentik.lib.config import CONFIG
|
|
|
|
LOGGER = get_logger()
|
|
|
|
|
|
class BaseMigration:
|
|
"""Base System Migration"""
|
|
|
|
cur: Any
|
|
con: Any
|
|
|
|
def __init__(self, cur: Any, con: Any):
|
|
self.cur = cur
|
|
self.con = con
|
|
|
|
def needs_migration(self) -> bool:
|
|
"""Return true if Migration needs to be run"""
|
|
return False
|
|
|
|
def run(self):
|
|
"""Run the actual migration"""
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
conn = connect(
|
|
dbname=CONFIG.y("postgresql.name"),
|
|
user=CONFIG.y("postgresql.user"),
|
|
password=CONFIG.y("postgresql.password"),
|
|
host=CONFIG.y("postgresql.host"),
|
|
)
|
|
curr = conn.cursor()
|
|
|
|
for migration in Path(__file__).parent.absolute().glob("system_migrations/*.py"):
|
|
spec = spec_from_file_location("lifecycle.system_migrations", migration)
|
|
mod = module_from_spec(spec)
|
|
# pyright: reportGeneralTypeIssues=false
|
|
spec.loader.exec_module(mod)
|
|
|
|
for name, sub in getmembers(mod, isclass):
|
|
if name != "Migration":
|
|
continue
|
|
migration = sub(curr, conn)
|
|
if migration.needs_migration():
|
|
LOGGER.info("Migration needs to be applied", migration=sub)
|
|
migration.run()
|
|
LOGGER.info("Migration finished applying", migration=sub)
|