Make secret files more ergonomic
Some checks failed
ci/woodpecker/push/check Pipeline failed

This commit is contained in:
PapaTutuWawa 2025-04-21 14:22:18 +02:00
parent 89d38f493b
commit 969921dd79

View File

@ -1,5 +1,5 @@
import os
from typing import Annotated, Self
from typing import Annotated, Self, cast
import logging
from pydantic import BaseModel, Field, model_validator
@ -20,7 +20,7 @@ class _ComponentConfig(BaseModel):
server: str
# The component's secret.
secret: str | None = Field(default=None)
secret_plain: str | None = Field(default=None, alias="secret")
# Optional file to read the secret from
secret_file: str | None = Field(default=None)
@ -35,6 +35,16 @@ class _ComponentConfig(BaseModel):
)
return self
@property
def secret(self) -> str:
"""
The component secret.
The backing may be None if secret_file is used instead. secret_plain is, however, replaced
with that file's contents during configuration loading.
"""
return cast(str, self.secret_plain)
class _Config(BaseModel):
# DB URI for sqlmodel
@ -61,7 +71,7 @@ def load_config() -> _Config:
if config.component.secret_file is not None:
log.info("Reading component secret from %s", config.component.secret_file)
with open(config.component.secret_file, "r", encoding="utf8") as f:
config.component.secret = f.read().strip().replace("\n", "")
config.component.secret_plain = f.read().strip().replace("\n", "")
return config