deploy ui rebuild v2
CI / compose (push) Successful in 13m48s

This commit is contained in:
Marco0300
2026-09-04 14:16:29 +02:00
parent 28e1ac20a8
commit 9258bfd811
3 changed files with 10 additions and 4 deletions
+7 -2
View File
@@ -1367,7 +1367,12 @@ class ApiHandler(BaseHTTPRequestHandler):
except (TypeError,ValueError): policy={}
credential_exists = bool(db.execute("SELECT 1 FROM source_credentials WHERE source_id=? AND organization_id=? AND provider=? AND key_name=?", (raw["id"], org, "google_places", "api_key")).fetchone())
item.update({"available": bool(meta.get("available", False)), "optional": bool(meta.get("optional", False)),
"configured": bool(meta.get("available", False) and (config.get("csv") or config.get("rows") is not None or raw["approved"])),
# Older registered free-source rows may have approved=0
# even though their validated config is approved. Treat
# either signal as configured so the operator can test
# and enable the existing source instead of being sent
# back through setup.
"configured": bool(meta.get("available", False) and (config.get("csv") or config.get("rows") is not None or raw["approved"] or config.get("approved") is True)),
"credential_status": ("Configured" if credential_exists else "Required / not configured") if meta.get("requires_credentials") else "Not required",
"terms_status": "Provided" if policy.get("terms_url") or config.get("terms_url") else "Not reviewed",
"owner": policy.get("owner") or config.get("owner") or "Not assigned",
@@ -1431,7 +1436,7 @@ class ApiHandler(BaseHTTPRequestHandler):
adapter=adapter_for(source['source_code'] or source['kind'])
try: config=json.loads(source['config_json'] or '{}')
except (TypeError,ValueError): config={}
metadata=next((item for item in available_adapters() if item['source_code']==source['kind']), {})
metadata=next((item for item in available_adapters() if item['source_code']==(source['source_code'] or source['kind'])), {})
if not metadata.get('available', False): return self.send_json(409,{"error":"source_unavailable"})
validation=adapter.validate_config(config)
# A blank manual source is a deliberate staging point: the query or
+2 -1
View File
@@ -359,7 +359,8 @@ $('aiProviderForm').addEventListener('submit',saveAiProviderSettings);$('aiProvi
const actionButton = event.target.closest?.('[data-source-action="toggle"]');
if (!actionButton) return;
const source = sources.find(item => String(item.id) === String(actionButton.dataset.sourceId));
if (source && !source.configured && source.available) { event.preventDefault(); event.stopImmediatePropagation(); configureSourceFromUi(source, actionButton); }
const needsPromptConfig = ['public_website','dns','rdap','ct_logs'].includes(sourceType(source));
if (source && !source.configured && source.available && needsPromptConfig) { event.preventDefault(); event.stopImmediatePropagation(); configureSourceFromUi(source, actionButton); }
}, true);
document.querySelectorAll('.sidebar nav a, [data-scroll]').forEach(link => link.addEventListener('click', event => { const target = (link.getAttribute('href') || link.dataset.scroll || '').replace(/^#/, ''); const view = viewMap[target]; if (view) { event.preventDefault(); activateView(view); document.querySelector('.sidebar')?.classList.remove('open'); } }));
bootstrap();
+1 -1
View File
@@ -14,7 +14,7 @@
],
"integrity": {
"config.js": "sha256-95293871c068b38098cead4af5de4b17ee505a0b051b9379567a716dc5364490",
"app.js": "sha256-3bd0215c904f7a8b0ebce3b96c799944880a3ce123694e3680db4516b690e490",
"app.js": "sha256-b7455ddbfdc755bdd08b1713362ed097ab678fb2c47b425bf11595bdb97ba8b6",
"styles.css": "sha256-ba90290ab11e82a6b2639dfd70d1e74502c1cacb2b26cf1db92b45beb67ac03f",
"index.html": "sha256-f5d2ab03e5c676f8af8a9bfd201e6d4fb3bfb19ba10098e93eae5680122fa2cc",
"health.html": "sha256-c352a6f37aa24628cfc8d5709a70ff2d94181d192ed5fe00916cca9378a61d81",