Qualys deploy: 2 dropdowns ActivationId Linux et Windows (separes)

This commit is contained in:
Pierre & Lumière 2026-04-15 13:04:34 +02:00
parent 0095f7914f
commit f59c6dcbdb
2 changed files with 30 additions and 12 deletions

View File

@ -933,9 +933,17 @@ async def qualys_deploy_page(request: Request, db=Depends(get_db)):
# Filtre les keys actives uniquement # Filtre les keys actives uniquement
active_keys = [k for k in api_keys if (k.get("status") or "").upper() == "ACTIVE"] 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 # Separe par OS (Qualys retourne le champ type: WINDOWS / LINUX / etc.)
default_activation = active_keys[0]["key"] if active_keys else \ keys_windows = [k for k in active_keys if "WIN" in (k.get("type") or "").upper()]
(get_secret(db, "qualys_activation_id") or "") keys_linux = [k for k in active_keys if "LINUX" in (k.get("type") or "").upper() or "LIN" in (k.get("type") or "").upper()]
# Defaults par OS : settings ou 1ere key de chaque type
default_act_win = get_secret(db, "qualys_activation_id_windows") or \
(keys_windows[0]["key"] if keys_windows else "")
default_act_lin = get_secret(db, "qualys_activation_id_linux") or \
(keys_linux[0]["key"] if keys_linux else "")
# Backward compat : si le settings legacy existe, l'utiliser pour Linux
default_activation = default_act_lin or get_secret(db, "qualys_activation_id") or ""
# Server URI deduit de l'URL Qualys (qualysapi.qualys.eu -> qagpublic.qg2) # Server URI deduit de l'URL Qualys (qualysapi.qualys.eu -> qagpublic.qg2)
qualys_url = get_secret(db, "qualys_url") or "" qualys_url = get_secret(db, "qualys_url") or ""
@ -955,7 +963,11 @@ async def qualys_deploy_page(request: Request, db=Depends(get_db)):
"packages": packages, "packages": packages,
"servers": servers, "servers": servers,
"activation_id": default_activation, "activation_id": default_activation,
"available_keys": active_keys, # pour le dropdown UI "activation_id_windows": default_act_win,
"activation_id_linux": default_act_lin,
"available_keys": active_keys,
"keys_windows": keys_windows,
"keys_linux": keys_linux,
"customer_id": get_secret(db, "qualys_customer_id") or "", "customer_id": get_secret(db, "qualys_customer_id") or "",
"server_uri": server_uri, "server_uri": server_uri,
"msg": request.query_params.get("msg", ""), "msg": request.query_params.get("msg", ""),

View File

@ -22,17 +22,23 @@
<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 {% if available_keys %}<span class="text-cyber-green">({{ available_keys|length }} dispo via API)</span>{% endif %}</label> <label class="text-xs text-gray-500 block mb-1">ActivationId Linux <span class="text-cyber-green">({{ keys_linux|length }})</span></label>
{% if available_keys %} {% if keys_linux %}
<select id="activation_id" class="w-full text-xs" style="font-family:monospace" onchange="document.getElementById('activation_id_input').value=this.value"> <select id="activation_id_linux" class="w-full text-xs" style="font-family:monospace">
{% for k in available_keys %} {% for k in keys_linux %}<option value="{{ k.key }}" {% if k.key == activation_id_linux %}selected{% endif %}>{{ k.key }} — {{ k.title or '' }} ({{ k.used }} uses)</option>{% endfor %}
<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> </select>
<input type="hidden" id="activation_id_input" value="{{ activation_id }}">
{% else %} {% 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_linux" value="{{ activation_id_linux }}" class="w-full text-xs" style="font-family:monospace">
{% endif %} {% endif %}
<label class="text-xs text-gray-500 block mb-1 mt-2">ActivationId Windows <span class="text-cyber-green">({{ keys_windows|length }})</span></label>
{% if keys_windows %}
<select id="activation_id_windows" class="w-full text-xs" style="font-family:monospace">
{% for k in keys_windows %}<option value="{{ k.key }}" {% if k.key == activation_id_windows %}selected{% endif %}>{{ k.key }} — {{ k.title or '' }} ({{ k.used }} uses)</option>{% endfor %}
</select>
{% else %}
<input type="text" id="activation_id_windows" value="{{ activation_id_windows }}" class="w-full text-xs" style="font-family:monospace">
{% endif %}
<input type="hidden" id="activation_id" value="{{ activation_id_linux }}">
</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>