diff --git a/app/api/admin.py b/app/api/admin.py index 6521eed..d767d72 100644 --- a/app/api/admin.py +++ b/app/api/admin.py @@ -167,6 +167,7 @@ def _normalize_primary_key(v): # Devin ANALYSIS_0001 on PR #141 5f649a4 review. _URL_BEARING_FIELDS: tuple[tuple[str, ...], ...] = ( ("data_source", "keboola", "stack_url"), + ("marketplace", "curators_url"), ) @@ -257,6 +258,7 @@ _EDITABLE_SECTIONS: tuple[str, ...] = ( "corporate_memory", "materialize", "guardrails", + "marketplace", ) # "Danger-zone" sections — flipping these can lock operators out (auth.*) or @@ -811,6 +813,17 @@ _KNOWN_FIELDS: dict[str, dict[str, dict]] = { ), }, }, + "marketplace": { + "curators_url": { + "kind": "string", + "hint": ( + "URL the 'See all curators →' link on /marketplace points to " + "(e.g. an internal wiki page listing curators accountable for " + "the curated marketplace). Empty → the link is hidden. " + "Validated against private-IP allowlist on save (SSRF guard)." + ), + }, + }, } # Keys whose values must be redacted from the audit diff. We match diff --git a/app/web/router.py b/app/web/router.py index b791c8f..38a8b39 100644 --- a/app/web/router.py +++ b/app/web/router.py @@ -1921,9 +1921,12 @@ async def marketplace_listing( ): import json as _json from src.category_icons import all_paths + from app.instance_config import get_value + curators_url = (get_value("marketplace", "curators_url") or "").strip() ctx = _build_context( request, user=user, category_icons_json=_json.dumps(all_paths()), + curators_url=curators_url, ) return templates.TemplateResponse(request, "marketplace.html", ctx) diff --git a/app/web/templates/marketplace.html b/app/web/templates/marketplace.html index d18eba3..59ad880 100644 --- a/app/web/templates/marketplace.html +++ b/app/web/templates/marketplace.html @@ -518,7 +518,9 @@
Each plugin here has a named curator accountable for it.
Each plugin in this marketplace has a named curator and meets a baseline review bar (security, telemetry hygiene, documentation).
- See all curators → + {% if curators_url %} + See all curators → + {% endif %}