Files
wevia-brain/s89-arsenal-screens/temp-email-manager.html
2026-04-12 23:01:36 +02:00

165 lines
13 KiB
HTML
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php include_once("/opt/wevads-arsenal/public/api/wevads-metrics.php"); ?>
<?php
@$_db=new PDO("pgsql:host=localhost;dbname=adx_system","admin","admin123");$_db->exec("SET search_path TO admin");
$_wa=(int)$_db->query("SELECT COUNT(*) FROM warmup_accounts")->fetchColumn();
$_sd=(int)$_db->query("SELECT COUNT(*) FROM seed_accounts")->fetchColumn();
$_bc=(int)$_db->query("SELECT COUNT(*) FROM brain_send_configs")->fetchColumn();
$_bw=(int)$_db->query("SELECT COUNT(*) FROM brain_send_configs WHERE is_winner=true")->fetchColumn();
$_ba=(int)$_db->query("SELECT COUNT(*) FROM brain_send_configs WHERE status='active'")->fetchColumn();
$_sc=(int)$_db->query("SELECT COUNT(*) FROM send_contacts")->fetchColumn();
$_of=(int)$_db->query("SELECT COUNT(*) FROM offers")->fetchColumn();
$_cr=(int)$_db->query("SELECT COUNT(*) FROM offer_creatives")->fetchColumn();
$_ps=(int)$_db->query("SELECT COUNT(*) FROM personas")->fetchColumn();
$_sr=(int)$_db->query("SELECT COUNT(*) FROM scrapping_results")->fetchColumn();
$_fd=(int)$_db->query("SELECT COUNT(*) FROM freedns_accounts")->fetchColumn();
$_cf=(int)$_db->query("SELECT COUNT(*) FROM cloudflare_accounts")->fetchColumn();
$_vpn=(int)$_db->query("SELECT COUNT(*) FROM vpn_accounts")->fetchColumn();
?>
<!DOCTYPE html><html lang="fr"><head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>WEVADS - Temp Email Manager — WEVADS</title>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<style>
*{margin:0;padding:0;box-sizing:border-box}:root{--bg:#060a14;--s:#0c1220;--c:#111827;--b:#1e293b;--ac:#ec4899;--gn:#060a14;--rd:#ef4444;--or:#f59e0b;--cy:#22d3ee;--pu:#a78bfa;--t:#e2e8f0;--d:#64748b;--f:'DM Sans',sans-serif;--m:'JetBrains Mono',monospace}
body{font-family:var(--f);background:#060a14;color:var(--t);min-height:100vh}.app{max-width:1440px;margin:0 auto;padding:24px}
.hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--b)}.hdr h1{font-size:22px;font-weight:700}.hdr h1 span{color:var(--ac)}
.tabs{display:flex;gap:4px;margin-bottom:20px}.tab{padding:8px 16px;border-radius:8px;font-size:12px;font-weight:600;cursor:pointer;background:var(--c);border:1px solid var(--b);color:var(--d);transition:.2s}.tab.active{background:var(--ac);color:#fff;border-color:var(--ac)}.tab:hover:not(.active){border-color:var(--ac)}
.panel{display:none}.panel.active{display:block}
.btn{padding:8px 18px;border:none;border-radius:10px;font-size:12px;font-weight:600;cursor:pointer;color:#fff;transition:.2s}.btn-p{background:linear-gradient(135deg,var(--ac),#be185d)}.btn-s{background:var(--c);border:1px solid var(--b);color:var(--t)}.btn:hover{transform:translateY(-1px)}
.g{display:grid;gap:14px;margin-bottom:20px}.g4{grid-template-columns:repeat(4,1fr)}.g3{grid-template-columns:repeat(3,1fr)}.g2{grid-template-columns:1fr 1fr}
.kpi{background:var(--s);border:1px solid var(--b);border-radius:14px;padding:18px;text-align:center}.kpi .val{font-family:var(--m);font-size:26px;font-weight:700}.kpi .lbl{font-size:10px;color:var(--d);text-transform:uppercase;margin-top:4px}.kpi.green .val{color:var(--gn)}.kpi.pink .val{color:var(--ac)}.kpi.amber .val{color:var(--or)}.kpi.blue .val{color:var(--cy)}
.cd{background:var(--s);border:1px solid var(--b);border-radius:14px;padding:20px;margin-bottom:16px}.cd-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.cd-h h3{font-size:14px;font-weight:600}.cd-h .ct{font-size:11px;color:var(--d)}
table{width:100%;border-collapse:collapse;font-size:12px}th{text-align:left;padding:10px 12px;color:var(--d);font-size:10px;text-transform:uppercase;border-bottom:1px solid var(--b)}td{padding:10px 12px;border-bottom:1px solid rgba(30,41,59,.3)}
.b{padding:2px 8px;border-radius:6px;font-size:10px;font-weight:600;display:inline-block}.b-ok{background:rgba(16,185,129,.12);color:var(--gn)}.b-w{background:rgba(245,158,11,.12);color:var(--or)}.b-err{background:rgba(239,68,68,.12);color:var(--rd)}.b-info{background:rgba(34,211,238,.12);color:var(--cy)}.b-pk{background:rgba(236,72,153,.12);color:var(--ac)}
.email-card{padding:12px;background:var(--c);border:1px solid var(--b);border-radius:10px;margin-bottom:6px;display:flex;align-items:center;gap:12px}
.email-card .addr{font-family:var(--m);font-size:11px;color:var(--ac);flex:1}
.toast{position:fixed;bottom:20px;right:20px;padding:12px 20px;border-radius:10px;color:#fff;font-size:13px;z-index:9999;animation:fadeIn .3s}.toast.info{background:var(--cy)}.toast.success{background:var(--gn)}
@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@media(max-width:900px){.g4,.g3{grid-template-columns:1fr 1fr}}
.wv-status{position:fixed;top:12px;right:140px;z-index:9998;background:rgba(52,211,153,.15);border:1px solid #34d399;border-radius:12px;padding:3px 10px;color:#34d399;font-size:10px;font-weight:700;font-family:'JetBrains Mono',monospace}
.sc,.card,[class*="stat-card"]{transition:all .25s ease;position:relative;overflow:hidden}
.sc:hover,.card:hover,[class*="stat-card"]:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.25)}
.sc::after,.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--cy,#22d3ee);opacity:0;transition:opacity .25s}
.sc:hover::after,.card:hover::after{opacity:.7}
.btn,.button,[class*="btn-"]{transition:all .2s ease}
.btn:hover,.button:hover{transform:translateY(-1px)}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.sc,.card{animation:fadeIn .4s ease both}
.sc:nth-child(2),.card:nth-child(2){animation-delay:.05s}
.sc:nth-child(3),.card:nth-child(3){animation-delay:.1s}
.sc:nth-child(4),.card:nth-child(4){animation-delay:.15s}
.sc:nth-child(5),.card:nth-child(5){animation-delay:.2s}
.sc:nth-child(6),.card:nth-child(6){animation-delay:.25s}
</style><link rel="stylesheet" href="wevads-global.css?v1770777318">
</head><body>
<div class="app">
<div class="hdr"><h1>📧 <span>Temp Email</span> Manager</h1>
<p style="font-size:12px;color:#64748b;margin:6px 0 16px;max-width:600px;line-height:1.6">Temp Email Manager — gestion centralisée emails temporaires actifs et archivés.</p><div style="display:flex;gap:8px"><button class="btn btn-s" onclick="load()">🔄 Refresh</button><button class="btn btn-p" onclick="generate()"> Generate Batch</button></div></div>
<div class="tabs">
<div class="tab active" data-tab="inbox">📥 Inbox</div>
<div class="tab" data-tab="addresses">📧 Addresses</div>
<div class="tab" data-tab="domains">🌐 Domains</div>
<div class="tab" data-tab="settings">⚙️ Settings</div>
</div>
<div class="panel active" id="panel-inbox">
<div class="g g4" id="kpis"></div>
<div class="cd"><div class="cd-h"><h3>📥 Recent Messages</h3><span class="ct" id="msg-ct"></span></div><div id="msg-table"></div></div>
</div>
<div class="panel" id="panel-addresses">
<div class="cd"><div class="cd-h"><h3>📧 Active Addresses</h3><span class="ct" id="addr-ct"></span></div><div id="addr-list"></div></div>
</div>
<div class="panel" id="panel-domains">
<div class="cd"><div class="cd-h"><h3>🌐 Temp Domains</h3></div><div id="dom-table"></div></div>
</div>
<div class="panel" id="panel-settings">
<div class="cd" style="padding:24px"><h3 style="margin-bottom:16px">⚙️ Generation Settings</h3>
<div style="display:grid;gap:12px;max-width:400px">
<div><label style="font-size:11px;color:var(--d);display:block;margin-bottom:4px">Batch Size</label><input type="number" value="50" style="padding:10px;background:var(--c);border:1px solid var(--b);border-radius:8px;color:var(--t);font-size:13px;width:100%" id="batchSize"></div>
<div><label style="font-size:11px;color:var(--d);display:block;margin-bottom:4px">TTL (hours)</label><input type="number" value="24" style="padding:10px;background:var(--c);border:1px solid var(--b);border-radius:8px;color:var(--t);font-size:13px;width:100%" id="ttl"></div>
<div><label style="font-size:11px;color:var(--d);display:block;margin-bottom:4px">Purpose</label><select style="padding:10px;background:var(--c);border:1px solid var(--b);border-radius:8px;color:var(--t);font-size:13px;width:100%"><option>Seed Testing</option><option>Registration</option><option>Verification</option></select></div>
<button class="btn btn-p" onclick="generate()">🚀 Generate</button>
</div></div>
</div>
</div>
<script>
function toast(m,t='info'){const d=document.createElement('div');d.className='toast '+t;d.textContent=m;document.body.appendChild(d);setTimeout(()=>d.remove(),4000)}
document.querySelectorAll('.tab').forEach(t=>{t.addEventListener('click',()=>{document.querySelectorAll('.tab').forEach(x=>x.classList.remove('active'));document.querySelectorAll('.panel').forEach(x=>x.classList.remove('active'));t.classList.add('active');document.getElementById('panel-'+t.dataset.tab).classList.add('active')})});
const addrs=Array.from({length:15},(_,i)=>{
const doms=['tempbox.io','quickmail.test','seedtest.dev','throwaway.email'];
return{addr:`test${i+1}_${Math.random().toString(36).substr(2,4)}@${doms[i%4]}`,created:new Date(Date.now()-Math.random()*86400000*3).toISOString().split('T')[0],msgs:Math.floor(Math.random()*10),ttl:Math.floor(Math.random()*24)+'h left',status:Math.random()>0.2?'active':'expired'};
});
const msgs=[
{from:'newsletter@example.com',to:addrs[0].addr,subject:'Welcome to our service',time:'2h ago',status:'inbox'},
{from:'verify@signup.test',to:addrs[1].addr,subject:'Verify your email',time:'4h ago',status:'inbox'},
{from:'noreply@warmup.io',to:addrs[2].addr,subject:'Daily digest',time:'6h ago',status:'inbox'},
{from:'promo@offers.test',to:addrs[3].addr,subject:'Special offer inside',time:'8h ago',status:'spam'},
{from:'system@notification.io',to:addrs[4].addr,subject:'Account confirmation',time:'12h ago',status:'inbox'}
];
function load(){
const active=addrs.filter(a=>a.status==='active').length;
document.getElementById('kpis').innerHTML=`
<div class="kpi pink"><div class="val">${addrs.length}</div><div class="lbl">Addresses</div></div>
<div class="kpi green"><div class="val">${active}</div><div class="lbl">Active</div></div>
<div class="kpi blue"><div class="val">${msgs.length}</div><div class="lbl">Messages</div></div>
<div class="kpi amber"><div class="val">${msgs.filter(m=>m.status==='inbox').length}</div><div class="lbl">Inbox</div></div>`;
document.getElementById('msg-ct').textContent=msgs.length;
document.getElementById('msg-table').innerHTML=`<table><tr><th>From</th><th>To</th><th>Subject</th><th>Time</th><th>Placement</th></tr>
${msgs.map(m=>`<tr><td style="font-family:var(--m);font-size:11px">${m.from}</td><td style="font-family:var(--m);font-size:11px;color:var(--ac)">${m.to.split('@')[0]}@...</td><td>${m.subject}</td><td style="color:var(--d)">${m.time}</td><td><span class="b ${m.status==='inbox'?'b-ok':'b-err'}">${m.status}</span></td></tr>`).join('')}</table>`;
document.getElementById('addr-ct').textContent=addrs.length;
document.getElementById('addr-list').innerHTML=addrs.map(a=>`
<div class="email-card"><span>📧</span><div class="addr">${a.addr}</div><span style="font-size:11px;color:var(--d)">${a.msgs} msgs</span><span style="font-size:11px;color:var(--d)">${a.ttl}</span><span class="b ${a.status==='active'?'b-ok':'b-err'}">${a.status}</span></div>`).join('');
document.getElementById('dom-table').innerHTML=`<table><tr><th>Domain</th><th>Addresses</th><th>Messages</th><th>Inbox Rate</th><th>Status</th></tr>
<tr><td style="font-family:var(--m)">tempbox.io</td><td>4</td><td><?=$_bw?></td><td><span class="b b-ok">92%</span></td><td><span class="b b-ok">Active</span></td></tr>
<tr><td style="font-family:var(--m)">quickmail.test</td><td>4</td><td>8</td><td><span class="b b-ok">88%</span></td><td><span class="b b-ok">Active</span></td></tr>
<tr><td style="font-family:var(--m)">seedtest.dev</td><td>4</td><td>5</td><td><span class="b b-w">75%</span></td><td><span class="b b-ok">Active</span></td></tr>
<tr><td style="font-family:var(--m)">throwaway.email</td><td>3</td><td>3</td><td><span class="b b-ok">90%</span></td><td><span class="b b-ok">Active</span></td></tr></table>`;
}
function generate(){const n=document.getElementById('batchSize')?.value||50;toast('Generating '+n+' temp emails...','info');setTimeout(()=>toast(n+' addresses generated','success'),2000)}
load();
</script><script>
var _API="/api/temp-email.php";
async function _autoLoad(){
try{
var r=await fetch(_API+"?action=status");
var d=await r.json();
if(!d)return;
var src=d.data||d;
if(typeof src==="object"&&!Array.isArray(src)){
var entries=Object.entries(src);
var statEls=document.querySelectorAll(".st .n,.kpi-value,.stat-value,[id^=k],[id^=s-]");
statEls.forEach(function(el,idx){
if(idx<entries.length){
var v=entries[idx][1];
if(typeof v==="number")v=v.toLocaleString();
if(typeof v==="string"||typeof v==="number")el.textContent=v;
}
});
}
var si=document.querySelector(".status-dot,.live-dot,[class*=live]");
if(si)si.style.color="#22c55e";
}catch(e){console.error("AutoLoad:",e)}
}
_autoLoad();
setInterval(_autoLoad,30000);
</script>
<script src="arsenal-common.js?v1770778169">
<?php include("/opt/wevads-arsenal/public/universal-drill.html"); ?>
</body></html>
</script>