feat(doctrine-161): interactive noVNC login stack
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
- /vnc-picker.html (8 profils web-IA pickable) - Route API chrome-launch + websockify proxy nginx /novnc/ - Intent wevia_chrome_launch - 3 services systemd : wevia-xvfb, wevia-x11vnc, wevia-websockify - Script /opt/wevia-brain/scripts/chrome-profile-launch.sh - Doctrine 162 : guardians ANALYSIS_ONLY mode (all disabled) noVNC LIVE : https://weval-consulting.com/novnc/vnc.html VNC password : weviaVNC2026yac Picker : https://weval-consulting.com/vnc-picker.html
This commit is contained in:
@@ -182,6 +182,17 @@ if ($action === 'cyber-probe-latest') {
|
||||
exit;
|
||||
}
|
||||
|
||||
// CHROME LAUNCH in Xvfb (doctrine 161)
|
||||
if ($action === 'chrome-launch') {
|
||||
$profile = $_GET['profile'] ?? $_POST['profile'] ?? '';
|
||||
$profile = preg_replace('/[^a-zA-Z0-9_\-]/','', $profile);
|
||||
if (!$profile) { echo json_encode(['ok'=>false,'err'=>'profile required']); exit; }
|
||||
$output = @shell_exec('bash /opt/wevia-brain/scripts/chrome-profile-launch.sh ' . escapeshellarg($profile) . ' 2>&1');
|
||||
$parsed = json_decode(trim((string)$output), true);
|
||||
echo json_encode(['ok'=>true,'action'=>'chrome-launch','profile'=>$profile,'result'=>$parsed,'raw'=>trim((string)$output)], JSON_UNESCAPED_SLASHES);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Classic whitelist action
|
||||
if (!$action || !isset($whitelist[$action])) {
|
||||
echo json_encode([
|
||||
|
||||
17
api/wired-pending/intent-opus4-wevia-chrome-launch.php
Normal file
17
api/wired-pending/intent-opus4-wevia-chrome-launch.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
return array(
|
||||
'name' => 'wevia_chrome_launch',
|
||||
'triggers' => array(
|
||||
0 => 'launch chrome openai',
|
||||
1 => 'launch chrome anthropic',
|
||||
2 => 'launch chrome google',
|
||||
3 => 'ouvre vnc picker',
|
||||
4 => 'vnc picker',
|
||||
5 => 'login web-ia',
|
||||
),
|
||||
'cmd' => 'echo {\"redirect\":\"https://weval-consulting.com/vnc-picker.html\"}',
|
||||
'status' => 'EXECUTED',
|
||||
'source' => 'opus-doctrine-161',
|
||||
'priority_tier' => '00',
|
||||
'description' => 'Ouvre le VNC picker. Pour lancer un profil: GET /api/wevia-autowire-trigger.php?action=chrome-launch&profile=<slug>',
|
||||
);
|
||||
85
vnc-picker.html
Normal file
85
vnc-picker.html
Normal file
@@ -0,0 +1,85 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr"><head><meta charset="utf-8">
|
||||
<title>WEVIA Cyber Profile Picker</title>
|
||||
<style>
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:#0e1320;color:#e2e8f0;padding:24px;line-height:1.5;min-height:100vh;margin:0}
|
||||
h1{color:#e94560;font-size:28px;margin:0 0 8px}
|
||||
.subtitle{color:#94a3b8;font-size:13px;margin-bottom:24px}
|
||||
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;max-width:1200px}
|
||||
.card{background:#1a2333;border:1px solid #2a3344;border-radius:10px;padding:18px;cursor:pointer;transition:all .2s;text-decoration:none;color:inherit;display:block}
|
||||
.card:hover{border-color:#7c5cff;transform:translateY(-2px);box-shadow:0 8px 24px rgba(124,92,255,.2)}
|
||||
.card h3{margin:0 0 6px;color:#e2e8f0;font-size:16px}
|
||||
.card p{margin:0;font-size:12px;color:#94a3b8}
|
||||
.badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:10px;font-weight:700;margin-top:8px}
|
||||
.open-bg{background:#10b981;color:#fff}
|
||||
.info{background:#1a2333;border:1px solid #2a3344;border-radius:8px;padding:14px;margin-top:20px;font-size:13px}
|
||||
.info b{color:#7c5cff}
|
||||
code{background:#0a0f1a;padding:2px 6px;border-radius:3px;color:#7c5cff;font-family:ui-monospace,monospace;font-size:11px}
|
||||
.actions{display:flex;gap:10px;margin:20px 0;flex-wrap:wrap}
|
||||
.btn{padding:10px 18px;background:linear-gradient(135deg,#7c5cff,#e94560);color:#fff;border:none;border-radius:6px;cursor:pointer;font-family:inherit;font-size:13px;font-weight:700;text-decoration:none;display:inline-block}
|
||||
.btn:hover{opacity:.85}
|
||||
.btn-secondary{background:#1f2937;color:#94a3b8}
|
||||
#launch-status{margin:10px 0;font-size:12px;color:#f59e0b}
|
||||
</style></head><body>
|
||||
|
||||
<h1>WEVIA Cyber Profile Picker</h1>
|
||||
<div class="subtitle">Doctrine 161 - Session interactive (noVNC) pour logger dans les 8 Web-IA gratuits</div>
|
||||
|
||||
<div class="actions">
|
||||
<a class="btn" href="/novnc/vnc.html" target="_blank">Ouvrir noVNC</a>
|
||||
<a class="btn btn-secondary" href="/wevia-audit.html">Audit Trail</a>
|
||||
<a class="btn btn-secondary" href="/weval-technology-platform.html">WTP</a>
|
||||
<span id="launch-status"></span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<b>Instructions :</b><br>
|
||||
1. Clique sur un profil ci-dessous <span style="color:#64748b">→ Chrome lance avec ce profil dans Xvfb</span><br>
|
||||
2. Clique "Ouvrir noVNC" <span style="color:#64748b">→ Tu vois Chrome du serveur dans ton navigateur</span><br>
|
||||
3. Connecte-toi manuellement au site (login, 2FA, etc.)<br>
|
||||
4. La session persiste dans <code>/var/lib/wevia-cyber-profiles/<profil>/</code><br>
|
||||
5. WEVIA pourra ensuite utiliser cette session via Selenium headless sans re-login<br><br>
|
||||
<b>VNC password :</b> <code>weviaVNC2026yac</code>
|
||||
</div>
|
||||
|
||||
<div class="grid" id="profiles">
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const PROFILES = [
|
||||
{slug:'openai', name:'OpenAI ChatGPT', url:'https://chat.openai.com/', icon:'GPT'},
|
||||
{slug:'anthropic', name:'Claude web', url:'https://claude.ai/', icon:'CLA'},
|
||||
{slug:'google', name:'Google Gemini', url:'https://gemini.google.com/', icon:'GEM'},
|
||||
{slug:'deepseek', name:'DeepSeek Chat', url:'https://chat.deepseek.com/', icon:'DSK'},
|
||||
{slug:'mistral', name:'Mistral Chat', url:'https://chat.mistral.ai/', icon:'MST'},
|
||||
{slug:'poe', name:'Poe (Quora)', url:'https://poe.com/', icon:'POE'},
|
||||
{slug:'perplexity', name:'Perplexity', url:'https://www.perplexity.ai/', icon:'PPL'},
|
||||
{slug:'hf', name:'HuggingFace Chat', url:'https://huggingface.co/chat/', icon:'HF'},
|
||||
];
|
||||
|
||||
const g = document.getElementById('profiles');
|
||||
g.innerHTML = PROFILES.map(p =>
|
||||
'<a class="card" onclick="launch(\'' + p.slug + '\');return false;" href="#"><h3>' + p.icon + ' - ' + p.name + '</h3>' +
|
||||
'<p>' + p.url + '</p>' +
|
||||
'<p style="font-size:10px;color:#64748b;margin-top:6px">/var/lib/wevia-cyber-profiles/' + p.slug + '/</p>' +
|
||||
'<span class="badge open-bg">Lancer + ouvrir noVNC</span></a>'
|
||||
).join('');
|
||||
|
||||
async function launch(slug) {
|
||||
const s = document.getElementById('launch-status');
|
||||
s.textContent = 'Lancement ' + slug + '...';
|
||||
try {
|
||||
const r = await fetch('/api/wevia-autowire-trigger.php?action=chrome-launch&profile=' + encodeURIComponent(slug));
|
||||
const d = await r.json();
|
||||
if (d.ok) {
|
||||
s.textContent = 'OK profil ' + slug + ' lance (PID ' + (d.result?.pid||'?') + '). Ouvre noVNC.';
|
||||
setTimeout(() => window.open('/novnc/vnc.html', '_blank'), 500);
|
||||
} else {
|
||||
s.textContent = 'Erreur: ' + (d.err || JSON.stringify(d));
|
||||
}
|
||||
} catch(e) {
|
||||
s.textContent = 'Erreur: ' + e.message;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body></html>
|
||||
Reference in New Issue
Block a user