Files
wevads-platform/public/architecture-old.php

755 lines
39 KiB
PHP

<?php
// Architecture WEVAL - Documentation Exhaustive
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Architecture WEVAL - Documentation</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
:root{--bg:#0a0a1a;--card:#1a1a2e;--border:#333;--primary:#00d4ff;--success:#22c55e;--warning:#f59e0b;--danger:#ef4444;--purple:#8b5cf6;--text:#e0e0e0}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Segoe UI',system-ui,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;padding:20px}
.header{text-align:center;margin-bottom:30px;padding:20px;background:linear-gradient(135deg,#1e293b,#334155);border-radius:12px;border:1px solid var(--border)}
.header h1{color:var(--primary);font-size:28px;margin-bottom:10px}
.header p{color:#888;font-size:14px}
.tabs{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap;justify-content:center}
.tab{padding:12px 24px;background:var(--card);border:1px solid var(--border);border-radius:8px;cursor:pointer;color:#888;transition:all 0.3s}
.tab:hover{border-color:var(--primary);color:var(--primary)}
.tab.active{background:var(--primary);color:#000;border-color:var(--primary);font-weight:600}
.content{display:none}
.content.active{display:block}
.schema-container{background:var(--card);border-radius:12px;padding:30px;border:1px solid var(--border);overflow-x:auto}
.back-btn{position:fixed;top:20px;left:20px;background:var(--primary);color:#000;padding:10px 20px;border-radius:8px;text-decoration:none;font-weight:600;z-index:100}
.back-btn:hover{background:#00b8d4}
/* Architecture Visuelle */
.arch-visual{display:flex;flex-direction:column;align-items:center;gap:30px;padding:20px}
.arch-level{display:flex;gap:20px;justify-content:center;flex-wrap:wrap;width:100%}
.arch-box{background:linear-gradient(135deg,#1e293b,#2d3748);border:2px solid var(--border);border-radius:12px;padding:20px;min-width:180px;max-width:220px;text-align:center;transition:all 0.3s}
.arch-box:hover{transform:translateY(-5px);border-color:var(--primary);box-shadow:0 10px 30px rgba(0,212,255,0.2)}
.arch-box.primary{border-color:var(--primary);background:linear-gradient(135deg,#0d2137,#1a3a5c)}
.arch-box.success{border-color:var(--success);background:linear-gradient(135deg,#0d2517,#1a3c2a)}
.arch-box.warning{border-color:var(--warning);background:linear-gradient(135deg,#2d1f0d,#3c2a1a)}
.arch-box.danger{border-color:var(--danger);background:linear-gradient(135deg,#2d0d0d,#3c1a1a)}
.arch-box.purple{border-color:var(--purple);background:linear-gradient(135deg,#1d0d2d,#2a1a3c)}
.arch-box i{font-size:32px;margin-bottom:10px;display:block}
.arch-box h4{font-size:14px;margin-bottom:8px;color:#fff}
.arch-box p{font-size:11px;color:#888;line-height:1.4}
.arch-box ul{list-style:none;font-size:10px;text-align:left;margin-top:10px;color:#aaa}
.arch-box ul li{padding:3px 0;border-bottom:1px solid #333}
.arch-box ul li:last-child{border:none}
.connector{display:flex;flex-direction:column;align-items:center;color:#444}
.connector-v{width:2px;height:40px;background:linear-gradient(to bottom,var(--primary),transparent)}
.connector-h{height:2px;width:100%;max-width:600px;background:linear-gradient(to right,transparent,var(--primary),transparent);margin:10px 0}
.connector-arrows{display:flex;justify-content:space-around;width:100%;max-width:800px}
.connector-arrows span{color:var(--primary);font-size:20px}
/* Tables */
.db-table{width:100%;border-collapse:collapse;margin:20px 0;font-size:12px}
.db-table th{background:var(--primary);color:#000;padding:12px;text-align:left}
.db-table td{padding:10px;border-bottom:1px solid var(--border)}
.db-table tr:hover{background:#1a1a2e}
/* Flow boxes */
.flow-section{margin:30px 0;padding:20px;background:#0d1117;border-radius:12px;border:1px solid var(--border)}
.flow-section h4{color:var(--warning);margin-bottom:20px;font-size:16px;text-align:center}
.flow-row{display:flex;align-items:center;justify-content:center;gap:15px;flex-wrap:wrap;margin:15px 0}
.flow-box{background:var(--card);padding:15px 20px;border-radius:10px;font-size:12px;border:2px solid var(--border);min-width:140px;text-align:center}
.flow-box.page{border-color:var(--primary);color:var(--primary)}
.flow-box.script{border-color:var(--success);color:var(--success)}
.flow-box.db{border-color:var(--purple);color:var(--purple)}
.flow-box.api{border-color:var(--danger);color:var(--danger)}
.flow-box.server{border-color:var(--warning);color:var(--warning)}
.flow-box i{display:block;font-size:20px;margin-bottom:5px}
.flow-arrow{color:var(--primary);font-size:24px}
/* Cards row */
.cards-row{display:flex;gap:20px;margin:20px 0;flex-wrap:wrap;justify-content:center}
.info-card{background:#0d1117;border:1px solid var(--border);border-radius:10px;padding:20px;flex:1;min-width:250px;max-width:350px}
.info-card h5{color:var(--primary);margin-bottom:15px;font-size:14px;display:flex;align-items:center;gap:8px}
.info-card ul{list-style:none;font-size:12px}
.info-card li{padding:8px 0;border-bottom:1px solid #222;display:flex;justify-content:space-between}
.info-card li:last-child{border:none}
.tag{padding:3px 8px;border-radius:10px;font-size:10px;font-weight:600}
.tag-php{background:#777bb4;color:#fff}
.tag-py{background:#3776ab;color:#fff}
.tag-ps{background:#012456;color:#fff}
.section-title{text-align:center;color:var(--primary);font-size:20px;margin:30px 0 20px;display:flex;align-items:center;justify-content:center;gap:10px}
.section-title::before,.section-title::after{content:'';height:1px;width:50px;background:linear-gradient(to right,transparent,var(--primary))}
.section-title::after{background:linear-gradient(to left,transparent,var(--primary))}
</style>
</head>
<body>
<a href="office-workflow.php" class="back-btn"><i class="fas fa-arrow-left"></i> Retour</a>
<div class="header">
<h1><i class="fas fa-project-diagram"></i> Architecture WEVAL</h1>
<p>Documentation exhaustive du système de gestion Office 365 & Domaines</p>
<p style="margin-top:10px;font-size:12px;color:#666">Serveur: 95.216.167.89 | Base: PostgreSQL adx_system | Port: 5821</p>
</div>
<div class="tabs">
<div class="tab active" onclick="showTab('overview')"><i class="fas fa-eye"></i> Vue Globale</div>
<div class="tab" onclick="showTab('screens')"><i class="fas fa-desktop"></i> Écrans</div>
<div class="tab" onclick="showTab('database')"><i class="fas fa-database"></i> Base de Données</div>
<div class="tab" onclick="showTab('workflow')"><i class="fas fa-cogs"></i> Workflow O365</div>
<div class="tab" onclick="showTab('domains')"><i class="fas fa-globe"></i> Gestion Domaines</div>
<div class="tab" onclick="showTab('scripts')"><i class="fas fa-code"></i> Scripts</div>
<div class="tab" onclick="showTab('servers')"><i class="fas fa-server"></i> Serveurs</div>
</div>
<!-- TAB: VUE GLOBALE -->
<div id="overview" class="content active">
<div class="schema-container">
<h3 class="section-title">🏗️ Architecture Globale WEVAL</h3>
<div class="arch-visual">
<!-- Niveau 1: Application principale -->
<div class="arch-level">
<div class="arch-box primary" style="min-width:300px;max-width:400px">
<i class="fas fa-envelope" style="color:var(--primary)"></i>
<h4>WEVAL - Email Marketing Platform</h4>
<p>Serveur: 95.216.167.89:5821</p>
</div>
</div>
<div class="connector">
<div class="connector-v"></div>
</div>
<!-- Niveau 2: Composants internes -->
<div class="connector-h"></div>
<div class="connector-arrows">
<span>▼</span>
<span>▼</span>
<span>▼</span>
</div>
<div class="arch-level">
<div class="arch-box primary">
<i class="fas fa-desktop" style="color:var(--primary)"></i>
<h4>📱 Interfaces Web</h4>
<p>Pages PHP</p>
<ul>
<li>office-workflow.php</li>
<li>domains-management.php</li>
<li>freedns-config.php</li>
<li>system-tools.php</li>
<li>office-accounts-edit.php</li>
</ul>
</div>
<div class="arch-box purple">
<i class="fas fa-database" style="color:var(--purple)"></i>
<h4>🗄️ Base de Données</h4>
<p>PostgreSQL</p>
<ul>
<li>admin.office_accounts</li>
<li>admin.domains_pool</li>
<li>admin.office_backdoors</li>
<li>admin.cloudflare_zones</li>
</ul>
</div>
<div class="arch-box success">
<i class="fas fa-code" style="color:var(--success)"></i>
<h4>⚙️ Scripts & Tools</h4>
<p>Python / PowerShell</p>
<ul>
<li>setup_domain_full.py</li>
<li>freedns.py</li>
<li>add_domain_o365.py</li>
<li>*.ps1 scripts</li>
</ul>
</div>
</div>
<div class="connector">
<div class="connector-v"></div>
</div>
<!-- Niveau 3: Services externes -->
<div class="connector-h"></div>
<div class="connector-arrows">
<span>▼</span>
<span>▼</span>
<span>▼</span>
</div>
<div class="arch-level">
<div class="arch-box warning">
<i class="fab fa-cloudflare" style="color:var(--warning)"></i>
<h4>☁️ Cloudflare</h4>
<p>DNS Provider</p>
<ul>
<li>Create DNS records</li>
<li>MX, SPF, TXT</li>
<li>Autodiscover</li>
</ul>
</div>
<div class="arch-box danger">
<i class="fab fa-microsoft" style="color:var(--danger)"></i>
<h4>🔷 Microsoft APIs</h4>
<p>Graph / Azure / O365</p>
<ul>
<li>Add/Verify Domains</li>
<li>Exchange Config</li>
<li>Anti-Spam Rules</li>
<li>Connectors</li>
</ul>
</div>
<div class="arch-box success">
<i class="fas fa-server" style="color:var(--success)"></i>
<h4>🖥️ Serveur FreeDNS</h4>
<p>151.80.235.110</p>
<ul>
<li>Fichiers .well-known</li>
<li>HTTP Verification</li>
<li>Tracking /op /cl</li>
</ul>
</div>
</div>
</div>
<!-- Légende -->
<div style="margin-top:40px;display:flex;gap:15px;justify-content:center;flex-wrap:wrap">
<span style="display:flex;align-items:center;gap:5px;font-size:12px"><span style="width:15px;height:15px;background:var(--primary);border-radius:3px"></span> Interfaces PHP</span>
<span style="display:flex;align-items:center;gap:5px;font-size:12px"><span style="width:15px;height:15px;background:var(--purple);border-radius:3px"></span> Base de données</span>
<span style="display:flex;align-items:center;gap:5px;font-size:12px"><span style="width:15px;height:15px;background:var(--success);border-radius:3px"></span> Scripts</span>
<span style="display:flex;align-items:center;gap:5px;font-size:12px"><span style="width:15px;height:15px;background:var(--warning);border-radius:3px"></span> Cloudflare</span>
<span style="display:flex;align-items:center;gap:5px;font-size:12px"><span style="width:15px;height:15px;background:var(--danger);border-radius:3px"></span> Microsoft</span>
</div>
</div>
</div>
<!-- TAB: ÉCRANS -->
<div id="screens" class="content">
<div class="schema-container">
<h3 class="section-title">📱 Cartographie des Écrans</h3>
<div class="cards-row">
<div class="info-card">
<h5><i class="fas fa-cogs" style="color:var(--warning)"></i> office-workflow.php</h5>
<ul>
<li>Process complet O365 <span class="tag tag-php">PHP</span></li>
<li>Steps 2-13 automatisés</li>
<li>Console VNC intégrée</li>
<li>Gestion backdoors</li>
</ul>
<p style="margin-top:10px;padding:8px;background:#1a1a2e;border-radius:6px;font-size:10px;color:var(--primary)">
<strong>TABLES:</strong> office_accounts, office_backdoors, domains_pool
</p>
</div>
<div class="info-card">
<h5><i class="fas fa-globe" style="color:var(--success)"></i> domains-management.php</h5>
<ul>
<li>Pool domaines global <span class="tag tag-php">PHP</span></li>
<li>Stats FREE/ASSIGNED</li>
<li>Actions Libérer/Supprimer</li>
<li>Filtres par provider</li>
</ul>
<p style="margin-top:10px;padding:8px;background:#1a1a2e;border-radius:6px;font-size:10px;color:var(--primary)">
<strong>TABLES:</strong> domains_pool, office_accounts
</p>
</div>
<div class="info-card">
<h5><i class="fas fa-server" style="color:var(--purple)"></i> freedns-config.php</h5>
<ul>
<li>Universal Domain Manager <span class="tag tag-php">PHP</span></li>
<li>Config serveur SSH</li>
<li>Assigner domaines O365</li>
<li>Tests SSH/HTTP</li>
</ul>
<p style="margin-top:10px;padding:8px;background:#1a1a2e;border-radius:6px;font-size:10px;color:var(--warning)">
<strong>SERVEUR:</strong> 151.80.235.110
</p>
</div>
</div>
<div class="cards-row">
<div class="info-card">
<h5><i class="fas fa-user-cog" style="color:var(--danger)"></i> office-accounts-edit.php</h5>
<ul>
<li>Détails compte O365 <span class="tag tag-php">PHP</span></li>
<li>Credentials (pwd, app_id)</li>
<li>Domaines assignés</li>
<li>Historique passwords</li>
</ul>
</div>
<div class="info-card">
<h5><i class="fas fa-tools" style="color:var(--primary)"></i> system-tools.php</h5>
<ul>
<li>Dépendances système <span class="tag tag-php">PHP</span></li>
<li>PowerShell modules</li>
<li>Python packages</li>
<li>Installation auto</li>
</ul>
</div>
<div class="info-card">
<h5><i class="fas fa-list" style="color:var(--warning)"></i> office-management.php</h5>
<ul>
<li>Liste comptes O365 <span class="tag tag-php">PHP</span></li>
<li>Filtres par status</li>
<li>Actions batch</li>
<li>Export données</li>
</ul>
</div>
</div>
<!-- Navigation entre écrans -->
<div class="flow-section">
<h4><i class="fas fa-sitemap"></i> Navigation entre écrans</h4>
<div class="flow-row">
<div class="flow-box page">
<i class="fas fa-home"></i>
index.php
</div>
</div>
<div class="flow-row">
<span class="flow-arrow">↓</span>
</div>
<div class="flow-row">
<div class="flow-box page">
<i class="fas fa-list"></i>
office-management
</div>
<span class="flow-arrow">↔</span>
<div class="flow-box page">
<i class="fas fa-globe"></i>
domains-management
</div>
<span class="flow-arrow">↔</span>
<div class="flow-box page">
<i class="fas fa-tools"></i>
system-tools
</div>
</div>
<div class="flow-row">
<span class="flow-arrow">↓</span>
<span style="width:150px"></span>
<span class="flow-arrow">↓</span>
</div>
<div class="flow-row">
<div class="flow-box page">
<i class="fas fa-cogs"></i>
office-workflow
</div>
<span style="width:50px"></span>
<div class="flow-box page">
<i class="fas fa-server"></i>
freedns-config
</div>
</div>
<div class="flow-row">
<span class="flow-arrow">↓</span>
</div>
<div class="flow-row">
<div class="flow-box page">
<i class="fas fa-user-edit"></i>
office-accounts-edit
</div>
</div>
</div>
</div>
</div>
<!-- TAB: DATABASE -->
<div id="database" class="content">
<div class="schema-container">
<h3 class="section-title">🗄️ Structure Base de Données</h3>
<div style="background:#0d1117;padding:15px;border-radius:8px;margin-bottom:20px;text-align:center">
<code style="color:var(--success);font-size:14px">Database: adx_system | Schema: admin | Host: localhost:5432 | User: admin</code>
</div>
<h4 style="color:var(--warning);margin:20px 0 15px;text-align:center">📋 admin.office_accounts</h4>
<table class="db-table">
<tr><th>Colonne</th><th>Type</th><th>Description</th><th>Utilisé par</th></tr>
<tr><td><strong>id</strong></td><td>SERIAL PK</td><td>Identifiant unique</td><td>Tous les écrans</td></tr>
<tr><td><strong>name</strong></td><td>VARCHAR</td><td>Nom du compte</td><td>Affichage listes</td></tr>
<tr><td><strong>admin_email</strong></td><td>VARCHAR</td><td>Email admin O365</td><td>Auth, Scripts</td></tr>
<tr><td><strong>admin_password</strong></td><td>VARCHAR</td><td>Mot de passe actuel</td><td>Auth, Step 4</td></tr>
<tr><td><strong>old_passwords</strong></td><td>JSONB</td><td>Historique (5 derniers)</td><td>Step 4, Edit</td></tr>
<tr><td><strong>app_id</strong></td><td>VARCHAR</td><td>Azure App Client ID</td><td>Steps 6,7,9 API</td></tr>
<tr><td><strong>app_secret</strong></td><td>VARCHAR</td><td>Azure App Secret</td><td>Steps 6,7,9 API</td></tr>
<tr><td><strong>tenant_id</strong></td><td>VARCHAR</td><td>Azure Tenant ID</td><td>Steps 6,7,9 API</td></tr>
<tr><td><strong>status</strong></td><td>VARCHAR</td><td>Active/Blocked/MFA/Ready</td><td>Filtres, Workflow</td></tr>
<tr><td><strong>current_step</strong></td><td>INTEGER</td><td>Dernière étape exécutée</td><td>Workflow progress</td></tr>
<tr><td><strong>domains_list</strong></td><td>JSONB</td><td>Liste domaines assignés</td><td>Edit, Workflow</td></tr>
</table>
<h4 style="color:var(--warning);margin:30px 0 15px;text-align:center">📋 admin.domains_pool</h4>
<table class="db-table">
<tr><th>Colonne</th><th>Type</th><th>Description</th><th>Utilisé par</th></tr>
<tr><td><strong>id</strong></td><td>SERIAL PK</td><td>Identifiant unique</td><td>Tous</td></tr>
<tr><td><strong>domain</strong></td><td>VARCHAR UNIQUE</td><td>Nom de domaine complet</td><td>Affichage, API</td></tr>
<tr><td><strong>provider</strong></td><td>VARCHAR</td><td>cloudflare/office365/freedns</td><td>Filtres, Logique</td></tr>
<tr><td><strong>zone_id</strong></td><td>VARCHAR</td><td>ID zone Cloudflare</td><td>Step 7 CF API</td></tr>
<tr><td><strong>status</strong></td><td>VARCHAR</td><td>FREE/ASSIGNED/PENDING</td><td>Filtres, Stats</td></tr>
<tr><td><strong>office_account_id</strong></td><td>INTEGER FK</td><td>Lien vers office_accounts</td><td>Assignation</td></tr>
<tr><td><strong>verification_status</strong></td><td>VARCHAR</td><td>VERIFIED/PENDING/FAILED</td><td>Stats, Workflow</td></tr>
<tr><td><strong>dns_records</strong></td><td>JSONB</td><td>{mx:bool, spf:bool, auto:bool}</td><td>Affichage badges</td></tr>
</table>
<h4 style="color:var(--warning);margin:30px 0 15px;text-align:center">📋 admin.office_backdoors & admin.cloudflare_zones</h4>
<div class="cards-row">
<div class="info-card">
<h5><i class="fas fa-user-secret" style="color:var(--danger)"></i> office_backdoors</h5>
<ul>
<li>id <span style="color:#666">SERIAL PK</span></li>
<li>account_id <span style="color:#666">FK → office_accounts</span></li>
<li>email <span style="color:#666">VARCHAR</span></li>
<li>password <span style="color:#666">VARCHAR</span></li>
<li>status <span style="color:#666">Active/Blocked</span></li>
</ul>
</div>
<div class="info-card">
<h5><i class="fab fa-cloudflare" style="color:var(--warning)"></i> cloudflare_zones</h5>
<ul>
<li>id <span style="color:#666">SERIAL PK</span></li>
<li>zone_id <span style="color:#666">VARCHAR</span></li>
<li>zone_name <span style="color:#666">VARCHAR</span></li>
<li>api_key <span style="color:#666">VARCHAR</span></li>
<li>email <span style="color:#666">VARCHAR</span></li>
</ul>
</div>
</div>
</div>
</div>
<!-- TAB: WORKFLOW -->
<div id="workflow" class="content">
<div class="schema-container">
<h3 class="section-title">⚙️ Workflow Office 365 - Steps 2-13</h3>
<!-- Phase 1 -->
<div class="flow-section">
<h4 style="color:var(--primary)">📋 PHASE 1: Préparation du Compte</h4>
<div class="flow-row">
<div class="flow-box" style="border-color:#f6ad55">
<i class="fas fa-shield-alt" style="color:#f6ad55"></i>
<strong>Step 2</strong><br>
<small>Check MFA</small><br>
<span class="tag tag-ps">PowerShell</span>
</div>
<span class="flow-arrow">→</span>
<div class="flow-box" style="border-color:#fc8181">
<i class="fas fa-unlock" style="color:#fc8181"></i>
<strong>Step 3</strong><br>
<small>Remove MFA</small><br>
<span class="tag" style="background:#ef4444">MANUEL</span>
</div>
<span class="flow-arrow">→</span>
<div class="flow-box" style="border-color:#68d391">
<i class="fas fa-key" style="color:#68d391"></i>
<strong>Step 4</strong><br>
<small>Change Password</small><br>
<span class="tag tag-ps">PowerShell</span>
</div>
<span class="flow-arrow">→</span>
<div class="flow-box" style="border-color:#63b3ed">
<i class="fas fa-id-card" style="color:#63b3ed"></i>
<strong>Step 5</strong><br>
<small>Azure App</small><br>
<span class="tag tag-ps">PowerShell</span>
</div>
</div>
</div>
<!-- Phase 2 -->
<div class="flow-section">
<h4 style="color:var(--success)">🌐 PHASE 2: Gestion des Domaines</h4>
<div class="flow-row">
<div class="flow-box" style="border-color:#b794f4">
<i class="fas fa-list" style="color:#b794f4"></i>
<strong>Step 6</strong><br>
<small>Check Domains</small><br>
<span class="tag tag-ps">PowerShell</span>
</div>
<span class="flow-arrow">→</span>
<div class="flow-box" style="border-color:#f48120">
<i class="fab fa-cloudflare" style="color:#f48120"></i>
<strong>Step 7</strong><br>
<small>CF Domains</small><br>
<span class="tag tag-py">Python</span>
</div>
<span class="flow-arrow">→</span>
<div class="flow-box" style="border-color:#48bb78">
<i class="fas fa-globe" style="color:#48bb78"></i>
<strong>Step 8</strong><br>
<small>FreeDNS</small><br>
<span class="tag tag-py">Python</span>
</div>
<span class="flow-arrow">→</span>
<div class="flow-box" style="border-color:#4fd1c5">
<i class="fas fa-plus-circle" style="color:#4fd1c5"></i>
<strong>Step 9</strong><br>
<small>Add to O365</small><br>
<span class="tag tag-py">Python</span>
</div>
</div>
</div>
<!-- Phase 3 -->
<div class="flow-section">
<h4 style="color:var(--danger)">📧 PHASE 3: Configuration Exchange</h4>
<div class="flow-row">
<div class="flow-box" style="border-color:#ed8936">
<i class="fas fa-exchange-alt" style="color:#ed8936"></i>
<strong>Step 10</strong><br>
<small>Config Exchange</small><br>
<span class="tag tag-ps">PowerShell</span>
</div>
<span class="flow-arrow">→</span>
<div class="flow-box" style="border-color:#e53e3e">
<i class="fas fa-ban" style="color:#e53e3e"></i>
<strong>Step 11</strong><br>
<small>Anti-Spam</small><br>
<span class="tag tag-ps">PowerShell</span>
</div>
<span class="flow-arrow">→</span>
<div class="flow-box" style="border-color:#9f7aea">
<i class="fas fa-plug" style="color:#9f7aea"></i>
<strong>Step 12</strong><br>
<small>Connector</small><br>
<span class="tag tag-ps">PowerShell</span>
</div>
<span class="flow-arrow">→</span>
<div class="flow-box" style="border-color:#38b2ac">
<i class="fas fa-check-double" style="color:#38b2ac"></i>
<strong>Step 13</strong><br>
<small>Finalisation</small><br>
<span class="tag" style="background:#22c55e;color:#000">READY</span>
</div>
</div>
</div>
<div style="margin-top:20px;display:flex;gap:15px;justify-content:center;flex-wrap:wrap">
<span style="background:#6366f1;padding:8px 15px;border-radius:20px;font-size:12px">💻 PowerShell - Steps 2,4,5,6,10,11,12</span>
<span style="background:#3776ab;padding:8px 15px;border-radius:20px;font-size:12px">🐍 Python - Steps 7,8,9</span>
<span style="background:#ef4444;padding:8px 15px;border-radius:20px;font-size:12px">🖐️ Manuel VNC - Step 3</span>
</div>
</div>
</div>
<!-- TAB: DOMAINS -->
<div id="domains" class="content">
<div class="schema-container">
<h3 class="section-title">🌐 Gestion des Domaines - Flux</h3>
<div class="flow-section">
<h4><i class="fab fa-cloudflare" style="color:#f48120"></i> Flux Cloudflare (Step 7)</h4>
<div class="flow-row">
<div class="flow-box page"><i class="fas fa-desktop"></i>office-workflow</div>
<span class="flow-arrow">→</span>
<div class="flow-box script"><i class="fab fa-python"></i>setup_domain_full.py</div>
<span class="flow-arrow">→</span>
<div class="flow-box api"><i class="fab fa-cloudflare"></i>Cloudflare API</div>
<span class="flow-arrow">→</span>
<div class="flow-box api"><i class="fab fa-microsoft"></i>O365 Graph</div>
<span class="flow-arrow">→</span>
<div class="flow-box db"><i class="fas fa-database"></i>domains_pool</div>
</div>
</div>
<div class="flow-section">
<h4><i class="fas fa-globe" style="color:#48bb78"></i> Flux FreeDNS / Universal (freedns-config.php)</h4>
<div class="flow-row">
<div class="flow-box page"><i class="fas fa-desktop"></i>freedns-config</div>
<span class="flow-arrow">→</span>
<div class="flow-box script"><i class="fab fa-python"></i>add_domain_universal.py</div>
<span class="flow-arrow">→</span>
<div class="flow-box api"><i class="fab fa-microsoft"></i>O365 Graph</div>
<span class="flow-arrow">→</span>
<div class="flow-box server"><i class="fas fa-server"></i>151.80.235.110</div>
<span class="flow-arrow">→</span>
<div class="flow-box db"><i class="fas fa-database"></i>domains_pool</div>
</div>
</div>
<div class="flow-section">
<h4><i class="fas fa-trash" style="color:#ef4444"></i> Flux Suppression (domains-management.php)</h4>
<div class="flow-row">
<div class="flow-box page"><i class="fas fa-desktop"></i>domains-management</div>
<span class="flow-arrow">→</span>
<div class="flow-box api"><i class="fab fa-microsoft"></i>O365 DELETE</div>
<span class="flow-arrow">→</span>
<div class="flow-box db"><i class="fas fa-database"></i>status=FREE</div>
<span class="flow-arrow">→</span>
<div class="flow-box db"><i class="fas fa-user"></i>domains_list</div>
</div>
</div>
<h4 style="color:var(--warning);margin:30px 0 15px;text-align:center">📊 États des Domaines</h4>
<div style="display:flex;gap:20px;justify-content:center;flex-wrap:wrap">
<div style="background:#22c55e;padding:15px 25px;border-radius:10px;text-align:center;color:#000">
<strong>FREE</strong><br><small>Disponible</small>
</div>
<div style="background:#f59e0b;padding:15px 25px;border-radius:10px;text-align:center;color:#000">
<strong>ASSIGNED</strong><br><small>Lié à un compte</small>
</div>
<div style="background:#6366f1;padding:15px 25px;border-radius:10px;text-align:center">
<strong>PENDING</strong><br><small>En attente</small>
</div>
<div style="background:#22c55e;padding:15px 25px;border-radius:10px;text-align:center;color:#000">
<strong>VERIFIED</strong><br><small>Vérifié Microsoft</small>
</div>
</div>
</div>
</div>
<!-- TAB: SCRIPTS -->
<div id="scripts" class="content">
<div class="schema-container">
<h3 class="section-title">📜 Scripts & Fichiers</h3>
<div class="cards-row">
<div class="info-card">
<h5><i class="fab fa-python" style="color:#3776ab"></i> Scripts Python</h5>
<ul>
<li>setup_domain_full.py <span class="tag tag-py">Step 7</span></li>
<li>freedns.py <span class="tag tag-py">Step 8</span></li>
<li>add_domain_office.py <span class="tag tag-py">Step 9</span></li>
<li>add_domain_o365_universal.py <span class="tag tag-py">Universal</span></li>
<li>sync_o365_domains.py <span class="tag tag-py">Sync</span></li>
</ul>
<p style="margin-top:15px;padding:10px;background:#1a1a2e;border-radius:6px;font-size:11px;color:var(--success)">
📁 /opt/wevads/scripts/office365/
</p>
</div>
<div class="info-card">
<h5><i class="fab fa-microsoft" style="color:#012456"></i> Scripts PowerShell</h5>
<ul>
<li>check_office_blocked.ps1 <span class="tag tag-ps">Step 2</span></li>
<li>remove_mfa.ps1 <span class="tag tag-ps">Step 3</span></li>
<li>change_password.ps1 <span class="tag tag-ps">Step 4</span></li>
<li>Add_cred.ps1 <span class="tag tag-ps">Step 5</span></li>
<li>check_domains.ps1 <span class="tag tag-ps">Step 6</span></li>
<li>config_anti_spam.ps1 <span class="tag tag-ps">Step 11</span></li>
<li>add_connector.ps1 <span class="tag tag-ps">Step 12</span></li>
</ul>
<p style="margin-top:15px;padding:10px;background:#1a1a2e;border-radius:6px;font-size:11px;color:var(--primary)">
📁 /opt/wevads/scripts/office365/
</p>
</div>
<div class="info-card">
<h5><i class="fas fa-file-code" style="color:var(--warning)"></i> Fichiers Config</h5>
<ul>
<li>cloudflare_config.json</li>
<li>freedns_config.json</li>
<li>domains_to_assign.json</li>
<li>khalil.csv <span style="color:#666">(temp)</span></li>
<li>current_account_id.txt <span style="color:#666">(temp)</span></li>
</ul>
<p style="margin-top:15px;padding:10px;background:#1a1a2e;border-radius:6px;font-size:11px;color:var(--warning)">
📁 /opt/wevads/storage/office365/
</p>
</div>
</div>
</div>
</div>
<!-- TAB: SERVERS -->
<div id="servers" class="content">
<div class="schema-container">
<h3 class="section-title">🖥️ Infrastructure Serveurs</h3>
<div class="arch-visual">
<div class="arch-level">
<div class="arch-box primary" style="min-width:300px">
<i class="fas fa-server" style="color:var(--primary)"></i>
<h4>Serveur Principal</h4>
<p style="font-size:16px;color:var(--primary);margin:10px 0">95.216.167.89</p>
<ul>
<li>Apache (Port 5821)</li>
<li>PostgreSQL (Port 5432)</li>
<li>VNC/noVNC (5900/6080)</li>
<li>Xvfb (Display :99)</li>
</ul>
<p style="margin-top:10px;color:#888;font-size:11px">WEVAL • FMGAPP • BCGAPP</p>
</div>
<div style="display:flex;align-items:center;font-size:40px;color:var(--primary)">⟷</div>
<div class="arch-box success" style="min-width:300px">
<i class="fas fa-satellite-dish" style="color:var(--success)"></i>
<h4>Serveur Tracking/Verif</h4>
<p style="font-size:16px;color:var(--success);margin:10px 0">151.80.235.110</p>
<ul>
<li>Nginx (Port 80/443)</li>
<li>SSH (Port 22)</li>
<li>Tracking /op /cl</li>
<li>/.well-known/</li>
</ul>
<p style="margin-top:10px;color:#888;font-size:11px">User: ubuntu • /var/www/html</p>
</div>
</div>
<div class="connector-h" style="max-width:400px"></div>
<div class="arch-level">
<div class="arch-box warning">
<i class="fab fa-cloudflare" style="color:var(--warning)"></i>
<h4>Cloudflare</h4>
<p>DNS Management</p>
<ul>
<li>Subdomains</li>
<li>MX, SPF, TXT</li>
</ul>
</div>
<div class="arch-box danger">
<i class="fab fa-microsoft" style="color:var(--danger)"></i>
<h4>Microsoft APIs</h4>
<p>Graph • Azure • Exchange</p>
<ul>
<li>Domains</li>
<li>Mail Config</li>
</ul>
</div>
</div>
</div>
<h4 style="color:var(--warning);margin:30px 0 15px;text-align:center">🔗 Ports & Connexions</h4>
<table class="db-table">
<tr><th>Service</th><th>Port</th><th>Protocole</th><th>Usage</th></tr>
<tr><td>WEVAL Web</td><td>5821</td><td>HTTP</td><td>Interface principale</td></tr>
<tr><td>PostgreSQL</td><td>5432</td><td>TCP</td><td>Base de données</td></tr>
<tr><td>VNC</td><td>5900</td><td>TCP</td><td>Bureau virtuel</td></tr>
<tr><td>noVNC</td><td>6080</td><td>WebSocket</td><td>VNC navigateur</td></tr>
<tr><td>Tracking HTTP</td><td>80</td><td>HTTP</td><td>Liens tracking</td></tr>
<tr><td>Tracking HTTPS</td><td>443</td><td>HTTPS</td><td>Liens tracking SSL</td></tr>
<tr><td>SSH FreeDNS</td><td>22</td><td>SSH</td><td>Upload fichiers</td></tr>
</table>
</div>
</div>
<script>
function showTab(tabId) {
document.querySelectorAll('.content').forEach(c => c.classList.remove('active'));
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
document.getElementById(tabId).classList.add('active');
event.target.closest('.tab').classList.add('active');
}
</script>
<?php include("includes/chatbot-widget.php"); ?>
</body>
</html>