Merge pull request #421 from PR0M3TH3AN/codex/modify-start_server-to-accept-fingerprint

Add fingerprint support when starting API server
This commit is contained in:
thePR0M3TH3AN
2025-07-09 10:53:19 -04:00
committed by GitHub
3 changed files with 29 additions and 5 deletions

View File

@@ -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 = [

View File

@@ -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

View File

@@ -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"