root: add method to get install_id without django being loaded (#5755)

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens L 2023-05-25 18:52:21 +02:00 committed by GitHub
parent 1ce482911b
commit 5b0cc3672b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 4 deletions

View file

@ -2,16 +2,40 @@
from functools import lru_cache from functools import lru_cache
from uuid import uuid4 from uuid import uuid4
from django.conf import settings from psycopg2 import connect
from django.db import connection
from authentik.lib.config import CONFIG
@lru_cache @lru_cache
def get_install_id() -> str: def get_install_id() -> str:
"""Get install ID of this instance. The method is cached as the install ID is """Get install ID of this instance. The method is cached as the install ID is
not expected to change""" not expected to change"""
from django.conf import settings
from django.db import connection
if settings.TEST: if settings.TEST:
return str(uuid4()) return str(uuid4())
with connection.cursor() as cursor: with connection.cursor() as cursor:
cursor.execute("SELECT id FROM authentik_install_id LIMIT 1;") cursor.execute("SELECT id FROM authentik_install_id LIMIT 1;")
return cursor.fetchone()[0] return cursor.fetchone()[0]
@lru_cache
def get_install_id_raw():
"""Get install_id without django loaded, this is required for the startup when we get
the install_id but django isn't loaded yet and we can't use the function above."""
conn = connect(
dbname=CONFIG.y("postgresql.name"),
user=CONFIG.y("postgresql.user"),
password=CONFIG.y("postgresql.password"),
host=CONFIG.y("postgresql.host"),
port=int(CONFIG.y("postgresql.port")),
sslmode=CONFIG.y("postgresql.sslmode"),
sslrootcert=CONFIG.y("postgresql.sslrootcert"),
sslcert=CONFIG.y("postgresql.sslcert"),
sslkey=CONFIG.y("postgresql.sslkey"),
)
cursor = conn.cursor()
cursor.execute("SELECT id FROM authentik_install_id LIMIT 1;")
return cursor.fetchone()[0]

View file

@ -15,7 +15,7 @@ from authentik import get_full_version
from authentik.lib.config import CONFIG from authentik.lib.config import CONFIG
from authentik.lib.utils.http import get_http_session from authentik.lib.utils.http import get_http_session
from authentik.lib.utils.reflection import get_env from authentik.lib.utils.reflection import get_env
from authentik.root.install_id import get_install_id from authentik.root.install_id import get_install_id_raw
from lifecycle.worker import DjangoUvicornWorker from lifecycle.worker import DjangoUvicornWorker
if TYPE_CHECKING: if TYPE_CHECKING:
@ -149,7 +149,7 @@ if not CONFIG.y_bool("disable_startup_analytics", False):
), ),
}, },
headers={ headers={
"User-Agent": sha512(get_install_id().encode("ascii")).hexdigest()[:16], "User-Agent": sha512(get_install_id_raw().encode("ascii")).hexdigest()[:16],
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
timeout=5, timeout=5,