From 39f49b27fe8e686d2a847053d391f599617888c0 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:49:02 -0400 Subject: [PATCH] Allow selecting fingerprint for API server --- src/seedpass/api.py | 12 ++++++++++-- src/seedpass/cli.py | 6 +++--- src/tests/test_typer_cli.py | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/seedpass/api.py b/src/seedpass/api.py index fbe1537..a2bd4ee 100644 --- a/src/seedpass/api.py +++ b/src/seedpass/api.py @@ -25,10 +25,18 @@ def _check_token(auth: str | None) -> None: raise HTTPException(status_code=401, detail="Unauthorized") -def start_server() -> str: - """Initialize global state and return the API token.""" +def start_server(fingerprint: str | None = None) -> str: + """Initialize global state and return the API token. + + Parameters + ---------- + fingerprint: + Optional seed profile fingerprint to select before starting the server. + """ global _pm, _token _pm = PasswordManager() + if fingerprint: + _pm.select_fingerprint(fingerprint) _token = secrets.token_urlsafe(16) print(f"API token: {_token}") origins = [ diff --git a/src/seedpass/cli.py b/src/seedpass/cli.py index 2d13342..2d43115 100644 --- a/src/seedpass/cli.py +++ b/src/seedpass/cli.py @@ -183,15 +183,15 @@ def generate_password(ctx: typer.Context, length: int = 24) -> None: @api_app.command("start") -def api_start(host: str = "127.0.0.1", port: int = 8000) -> None: +def api_start(ctx: typer.Context, host: str = "127.0.0.1", port: int = 8000) -> None: """Start the SeedPass API server.""" - token = api_module.start_server() + token = api_module.start_server(ctx.obj.get("fingerprint")) typer.echo(f"API token: {token}") uvicorn.run(api_module.app, host=host, port=port) @api_app.command("stop") -def api_stop(host: str = "127.0.0.1", port: int = 8000) -> None: +def api_stop(ctx: typer.Context, host: str = "127.0.0.1", port: int = 8000) -> None: """Stop the SeedPass API server.""" import requests diff --git a/src/tests/test_typer_cli.py b/src/tests/test_typer_cli.py index aa7139c..b3f7d72 100644 --- a/src/tests/test_typer_cli.py +++ b/src/tests/test_typer_cli.py @@ -149,3 +149,19 @@ def test_generate_password(monkeypatch): assert result.exit_code == 0 assert called.get("length") == 12 assert "secretpw" in result.stdout + + +def test_api_start_passes_fingerprint(monkeypatch): + """Ensure the API start command forwards the selected fingerprint.""" + called = {} + + def fake_start(fp=None): + called["fp"] = fp + return "tok" + + monkeypatch.setattr(cli.api_module, "start_server", fake_start) + monkeypatch.setattr(cli, "uvicorn", SimpleNamespace(run=lambda *a, **k: None)) + + result = runner.invoke(app, ["--fingerprint", "abc", "api", "start"]) + assert result.exit_code == 0 + assert called.get("fp") == "abc"