From fdb7805d4033cc18979acf0e7e639d4631ecb383 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Wed, 6 Sep 2023 20:08:31 +0800 Subject: [PATCH] added non interactive login --- jpacrepo_uploader/config.py | 19 ++++++++++++++----- jpacrepo_uploader/uploader.py | 5 +++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/jpacrepo_uploader/config.py b/jpacrepo_uploader/config.py index faca6fc..efee6f9 100644 --- a/jpacrepo_uploader/config.py +++ b/jpacrepo_uploader/config.py @@ -14,6 +14,8 @@ class Config: server_url: str auth_server_url: str repo_folders: tuple[Path, ...] + client_id: str + client_secret: Optional[str] config_file_candidates = [ @@ -35,10 +37,11 @@ def load_configuration() -> Config: server_url: Optional[str] = None auth_server_url: Optional[str] = None repo_folders: list[Path] = [] + client_id: Optional[str] = None + client_secret: Optional[str] = None for config_file_maybe in config_file_candidates: def process_configuration(config_file: Path) -> None: - nonlocal server_url - nonlocal auth_server_url + nonlocal server_url, auth_server_url, client_id, client_secret config = RawConfigParser() with open(config_file, 'r') as lines: config.read_file(chain((f'[{main_section}]',), lines)) @@ -48,9 +51,15 @@ def load_configuration() -> Config: .if_present(repo_folders.append)) server_url = config.get(main_section, 'ServerURL', fallback=server_url) auth_server_url = config.get(main_section, 'AuthServerURL', fallback=auth_server_url) + client_id = config.get(main_section, 'ClientId', fallback=client_id) + client_secret = config.get(main_section, 'ClientSecret', fallback=client_secret) config_file_maybe.if_present(process_configuration) - return Config(server_url or 'https://woggioni.net/jpacrepo/', - auth_server_url or 'https://woggioni.net/auth/realms/woggioni.net', - tuple(repo_folders) or (Path('/var/cache/pacman/pkg'),) + return Config(server_url=server_url or 'https://woggioni.net/jpacrepo/', + auth_server_url=auth_server_url or 'https://woggioni.net/auth/realms/woggioni.net', + repo_folders=tuple(repo_folders) or (Path('/var/cache/pacman/pkg'),), + client_id=client_id or 'jpacrepo-client', + client_secret=Maybe.of_nullable(client_secret) + .map(lambda v: v.format(**environ)) + .or_else(None) ) diff --git a/jpacrepo_uploader/uploader.py b/jpacrepo_uploader/uploader.py index a4b008a..7cf81d4 100644 --- a/jpacrepo_uploader/uploader.py +++ b/jpacrepo_uploader/uploader.py @@ -140,8 +140,9 @@ class JpacrepoClient: def authenticate(self) -> None: token = oidc_client.login( provider_config=self.provider_config, - client_id='jpacrepo-client', - interactive=True, + client_id=self.config.client_id, + interactive=not bool(self.config.client_secret), + client_secret=self.config.client_secret, redirect_uri=DEFAULT_REDIRECT_URI) self.token = token self.token_expiry = (token.created_at or int(time())) + (token.expires_in or 10)