Referentiel: boutons sync iTop (import/export) + messages status
This commit is contained in:
parent
acf20c5890
commit
f73ea25d5d
@ -476,3 +476,55 @@ def dns_delete(request: Request, dns_id: int, db=Depends(get_db)):
|
|||||||
db.execute(text("DELETE FROM domain_ltd_list WHERE id = :id"), {"id": dns_id})
|
db.execute(text("DELETE FROM domain_ltd_list WHERE id = :id"), {"id": dns_id})
|
||||||
db.commit()
|
db.commit()
|
||||||
return RedirectResponse(url="/referentiel?tab=dns&msg=deleted", status_code=303)
|
return RedirectResponse(url="/referentiel?tab=dns&msg=deleted", status_code=303)
|
||||||
|
|
||||||
|
|
||||||
|
# =========================================================
|
||||||
|
# SYNC iTop
|
||||||
|
# =========================================================
|
||||||
|
|
||||||
|
@router.post("/referentiel/itop/sync-from")
|
||||||
|
def itop_sync_from(request: Request, db=Depends(get_db)):
|
||||||
|
"""Importer serveurs et contacts depuis iTop"""
|
||||||
|
user = get_current_user(request)
|
||||||
|
if not user:
|
||||||
|
return RedirectResponse(url="/login")
|
||||||
|
perms = get_user_perms(db, user)
|
||||||
|
if not can_edit(perms, "settings"):
|
||||||
|
return RedirectResponse(url="/referentiel?tab=domains")
|
||||||
|
|
||||||
|
from ..services.secrets_service import get_secret
|
||||||
|
from ..services.itop_service import sync_from_itop
|
||||||
|
itop_url = get_secret(db, "itop_url")
|
||||||
|
itop_user = get_secret(db, "itop_user")
|
||||||
|
itop_pass = get_secret(db, "itop_pass")
|
||||||
|
|
||||||
|
if not itop_url or not itop_user:
|
||||||
|
return RedirectResponse(url="/referentiel?tab=domains&msg=itop_noconfig", status_code=303)
|
||||||
|
|
||||||
|
stats = sync_from_itop(db, itop_url, itop_user, itop_pass)
|
||||||
|
msg = f"itop_from_{stats['servers_created']}_{stats['servers_updated']}_{stats['contacts_created']}_{stats['contacts_updated']}"
|
||||||
|
return RedirectResponse(url=f"/referentiel?tab=domains&msg={msg}", status_code=303)
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/referentiel/itop/sync-to")
|
||||||
|
def itop_sync_to(request: Request, db=Depends(get_db)):
|
||||||
|
"""Exporter serveurs PatchCenter vers iTop"""
|
||||||
|
user = get_current_user(request)
|
||||||
|
if not user:
|
||||||
|
return RedirectResponse(url="/login")
|
||||||
|
perms = get_user_perms(db, user)
|
||||||
|
if not can_edit(perms, "settings"):
|
||||||
|
return RedirectResponse(url="/referentiel?tab=domains")
|
||||||
|
|
||||||
|
from ..services.secrets_service import get_secret
|
||||||
|
from ..services.itop_service import sync_to_itop
|
||||||
|
itop_url = get_secret(db, "itop_url")
|
||||||
|
itop_user = get_secret(db, "itop_user")
|
||||||
|
itop_pass = get_secret(db, "itop_pass")
|
||||||
|
|
||||||
|
if not itop_url or not itop_user:
|
||||||
|
return RedirectResponse(url="/referentiel?tab=domains&msg=itop_noconfig", status_code=303)
|
||||||
|
|
||||||
|
stats = sync_to_itop(db, itop_url, itop_user, itop_pass)
|
||||||
|
msg = f"itop_to_{stats['updated']}"
|
||||||
|
return RedirectResponse(url=f"/referentiel?tab=domains&msg={msg}", status_code=303)
|
||||||
|
|||||||
@ -48,6 +48,31 @@
|
|||||||
<!-- ONGLET DOMAINES -->
|
<!-- ONGLET DOMAINES -->
|
||||||
<!-- ============================================================ -->
|
<!-- ============================================================ -->
|
||||||
{% if tab == 'domains' %}
|
{% if tab == 'domains' %}
|
||||||
|
<!-- Sync iTop -->
|
||||||
|
{% if can_modify %}
|
||||||
|
<div class="card mb-4" style="padding:12px 16px; display:flex; align-items:center; gap:12px; flex-wrap:wrap;">
|
||||||
|
<span class="text-sm text-gray-400" style="margin-right:8px">Synchronisation iTop :</span>
|
||||||
|
<form method="POST" action="/referentiel/itop/sync-from" style="display:inline">
|
||||||
|
<button type="submit" class="btn-primary" style="padding:6px 16px;font-size:0.85rem"
|
||||||
|
onclick="this.disabled=true;this.textContent='Sync en cours...';this.form.submit()">
|
||||||
|
Importer depuis iTop
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
<form method="POST" action="/referentiel/itop/sync-to" style="display:inline">
|
||||||
|
<button type="submit" style="padding:6px 16px;font-size:0.85rem;background:#334155;color:#e2e8f0;border:1px solid #475569;border-radius:6px;cursor:pointer"
|
||||||
|
onclick="this.disabled=true;this.textContent='Export en cours...';this.form.submit()">
|
||||||
|
Exporter vers iTop
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
{% if 'itop_from' in request.query_params.get('msg','') %}
|
||||||
|
<span class="text-sm text-green-400">Import iTop OK</span>
|
||||||
|
{% elif 'itop_to' in request.query_params.get('msg','') %}
|
||||||
|
<span class="text-sm text-green-400">Export iTop OK</span>
|
||||||
|
{% elif request.query_params.get('msg') == 'itop_noconfig' %}
|
||||||
|
<span class="text-sm text-red-400">Configurer iTop dans Settings</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<table class="table-cyber w-full">
|
<table class="table-cyber w-full">
|
||||||
<thead><tr>
|
<thead><tr>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user