Qualys deploy: dropdown ActivationId depuis API + ServerUri auto-deduit URL Qualys

This commit is contained in:
Pierre & Lumière 2026-04-15 12:53:18 +02:00
parent 935c8003b4
commit 2972baca1f
2 changed files with 38 additions and 4 deletions

View File

@ -924,14 +924,39 @@ async def qualys_deploy_page(request: Request, db=Depends(get_db)):
if s.get("last_checkin"): if s.get("last_checkin"):
s["last_checkin"] = str(s["last_checkin"])[:19] s["last_checkin"] = str(s["last_checkin"])[:19]
# Recupere les activation keys actives via API Qualys (force refresh)
from ..services.qualys_service import get_activation_keys
try:
api_keys = get_activation_keys(db, force_refresh=True) or []
except Exception:
api_keys = []
# Filtre les keys actives uniquement
active_keys = [k for k in api_keys if (k.get("status") or "").upper() == "ACTIVE"]
# Activation par defaut : 1er active de l'API si dispo, sinon secret stocke
default_activation = active_keys[0]["key"] if active_keys else \
(get_secret(db, "qualys_activation_id") or "")
# Server URI deduit de l'URL Qualys (qualysapi.qualys.eu -> qagpublic.qg2)
qualys_url = get_secret(db, "qualys_url") or ""
server_uri = get_secret(db, "qualys_server_uri")
if not server_uri:
if "qg2" in qualys_url or "qualys.eu" in qualys_url:
server_uri = "https://qagpublic.qg2.apps.qualys.eu/CloudAgent/"
elif "qg3" in qualys_url:
server_uri = "https://qagpublic.qg3.apps.qualys.eu/CloudAgent/"
else:
server_uri = "https://qagpublic.qg2.apps.qualys.eu/CloudAgent/"
ctx = base_context(request, db, user) ctx = base_context(request, db, user)
ctx.update({ ctx.update({
"app_name": APP_NAME, "app_name": APP_NAME,
"packages": packages, "packages": packages,
"servers": servers, "servers": servers,
"activation_id": get_secret(db, "qualys_activation_id") or "081a9a12-ca97-4de1-828c-c6ad918ce77e", "activation_id": default_activation,
"customer_id": get_secret(db, "qualys_customer_id") or "a2e3271b-c2a1-ec6b-8324-8f51948783d4", "available_keys": active_keys, # pour le dropdown UI
"server_uri": get_secret(db, "qualys_server_uri") or "https://qagpublic.qg2.apps.qualys.eu/CloudAgent/", "customer_id": get_secret(db, "qualys_customer_id") or "",
"server_uri": server_uri,
"msg": request.query_params.get("msg", ""), "msg": request.query_params.get("msg", ""),
}) })
return templates.TemplateResponse("qualys_deploy.html", ctx) return templates.TemplateResponse("qualys_deploy.html", ctx)

View File

@ -22,8 +22,17 @@
<h3 class="text-sm font-bold text-cyber-accent mb-3">Configuration de l'agent</h3> <h3 class="text-sm font-bold text-cyber-accent mb-3">Configuration de l'agent</h3>
<div class="grid grid-cols-1 md:grid-cols-3 gap-3"> <div class="grid grid-cols-1 md:grid-cols-3 gap-3">
<div> <div>
<label class="text-xs text-gray-500 block mb-1">ActivationId</label> <label class="text-xs text-gray-500 block mb-1">ActivationId {% if available_keys %}<span class="text-cyber-green">({{ available_keys|length }} dispo via API)</span>{% endif %}</label>
{% if available_keys %}
<select id="activation_id" class="w-full text-xs" style="font-family:monospace" onchange="document.getElementById('activation_id_input').value=this.value">
{% for k in available_keys %}
<option value="{{ k.key }}" {% if k.key == activation_id %}selected{% endif %}>{{ k.key }} — {{ k.title or k.type or '' }} ({{ k.used }} uses)</option>
{% endfor %}
</select>
<input type="hidden" id="activation_id_input" value="{{ activation_id }}">
{% else %}
<input type="text" id="activation_id" value="{{ activation_id }}" class="w-full text-xs" style="font-family:monospace"> <input type="text" id="activation_id" value="{{ activation_id }}" class="w-full text-xs" style="font-family:monospace">
{% endif %}
</div> </div>
<div> <div>
<label class="text-xs text-gray-500 block mb-1">CustomerId</label> <label class="text-xs text-gray-500 block mb-1">CustomerId</label>