feat(portal): Add SSO portal with gk2 subdomains and guide page
- Portal page with all service links using *.gk2.secubox.in format - User guide with updated gk2 subdomain URLs - Guide link added to login page bottom - HAProxy vhost configured for portal.secubox.in - WAF routing enabled through mitmproxy Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
2f7d57dced
commit
bab3ce3e33
@ -376,7 +376,8 @@
|
||||
"Bash(npx gulp browserify:*)",
|
||||
"Bash(npx terser:*)",
|
||||
"Bash(read)",
|
||||
"Bash(/home/reepost/CyberMindStudio/secubox-openwrt/secubox-tools/c3box-vm-builder.sh:*)"
|
||||
"Bash(/home/reepost/CyberMindStudio/secubox-openwrt/secubox-tools/c3box-vm-builder.sh:*)",
|
||||
"Bash(__NEW_LINE_ba6f66f0b013f58d__ echo \"\")"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,744 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>SecuBox — Guide de connexion rapide</title>
|
||||
<style>
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--surface: #f5f7f9;
|
||||
--border: #1a1a2e;
|
||||
--accent: #005f9e;
|
||||
--accent2: #007a3d;
|
||||
--warn: #c45c00;
|
||||
--danger: #b81c1c;
|
||||
--text: #1a1a1a;
|
||||
--muted: #555566;
|
||||
--light: #e8ecf0;
|
||||
--radius: 4px;
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
|
||||
body {
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
font-family: 'Trebuchet MS', 'Segoe UI', Arial, sans-serif;
|
||||
font-size: 13.5px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.page { max-width: 820px; margin: 0 auto; padding: 1.5rem 1.5rem 3rem; }
|
||||
|
||||
/* ══ HEADER ══ */
|
||||
header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1.2rem;
|
||||
padding: 1.2rem 1.4rem;
|
||||
background: var(--border);
|
||||
border-radius: var(--radius);
|
||||
margin-bottom: 1.5rem;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grid background — printed in solid black, no semi-tones */
|
||||
header::before {
|
||||
content: '';
|
||||
position: absolute; inset: 0;
|
||||
background-image:
|
||||
linear-gradient(var(--accent) 1px, transparent 1px),
|
||||
linear-gradient(90deg, var(--accent) 1px, transparent 1px);
|
||||
background-size: 24px 24px;
|
||||
opacity: 0.12;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 60px; height: 60px;
|
||||
background: var(--accent);
|
||||
border: 3px solid #fff;
|
||||
border-radius: var(--radius);
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 900;
|
||||
color: #fff;
|
||||
flex-shrink: 0;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.header-text { position: relative; z-index: 1; }
|
||||
|
||||
.header-text h1 {
|
||||
font-size: 1.8rem;
|
||||
font-weight: 900;
|
||||
color: #ffffff;
|
||||
letter-spacing: 3px;
|
||||
text-transform: uppercase;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-text h1 span { color: #7dd4fc; }
|
||||
|
||||
.header-text p {
|
||||
color: #aac8e0;
|
||||
font-size: 0.78rem;
|
||||
font-family: 'Courier New', monospace;
|
||||
letter-spacing: 1px;
|
||||
margin-top: 0.2rem;
|
||||
}
|
||||
|
||||
.header-badge {
|
||||
margin-left: auto;
|
||||
background: var(--accent);
|
||||
color: #fff;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.68rem;
|
||||
font-weight: 700;
|
||||
padding: 0.3rem 0.7rem;
|
||||
border-radius: 3px;
|
||||
letter-spacing: 2px;
|
||||
text-transform: uppercase;
|
||||
border: 2px solid #7dd4fc;
|
||||
white-space: nowrap;
|
||||
align-self: flex-start;
|
||||
position: relative; z-index: 1;
|
||||
}
|
||||
|
||||
/* ══ SECTION ══ */
|
||||
section {
|
||||
border: 2px solid var(--border);
|
||||
border-radius: var(--radius);
|
||||
margin-bottom: 1.2rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.6rem;
|
||||
padding: 0.55rem 1rem;
|
||||
background: var(--border);
|
||||
color: #ffffff;
|
||||
font-size: 0.72rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 3px;
|
||||
text-transform: uppercase;
|
||||
font-family: 'Courier New', monospace;
|
||||
}
|
||||
|
||||
/* ══ SERVICE CARDS ══ */
|
||||
.services-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
|
||||
gap: 0;
|
||||
background: var(--border);
|
||||
border-top: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--bg);
|
||||
padding: 1rem 1.1rem 1.1rem;
|
||||
border-right: 1px solid var(--light);
|
||||
border-bottom: 1px solid var(--light);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* Colored left bar — solid, print-safe */
|
||||
.card::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0; left: 0; bottom: 0;
|
||||
width: 4px;
|
||||
}
|
||||
|
||||
.card.portal::before { background: var(--accent); }
|
||||
.card.mail::before { background: #7c3aed; }
|
||||
.card.tube::before { background: #b81c1c; }
|
||||
.card.cloud::before { background: var(--accent2); }
|
||||
.card.vpn::before { background: #0891b2; }
|
||||
.card.admin::before { background: var(--warn); }
|
||||
|
||||
.card-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
margin-bottom: 0.4rem;
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
.card-icon { font-size: 1.2rem; }
|
||||
|
||||
.card-name {
|
||||
font-weight: 800;
|
||||
font-size: 0.95rem;
|
||||
color: var(--text);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.card-tag {
|
||||
margin-left: auto;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.6rem;
|
||||
font-weight: 700;
|
||||
padding: 0.15rem 0.4rem;
|
||||
border-radius: 2px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
border: 1.5px solid;
|
||||
}
|
||||
|
||||
.card.portal .card-tag { color: var(--accent); border-color: var(--accent); }
|
||||
.card.mail .card-tag { color: #7c3aed; border-color: #7c3aed; }
|
||||
.card.tube .card-tag { color: #b81c1c; border-color: #b81c1c; }
|
||||
.card.cloud .card-tag { color: var(--accent2); border-color: var(--accent2); }
|
||||
.card.vpn .card-tag { color: #0891b2; border-color: #0891b2; }
|
||||
.card.admin .card-tag { color: var(--warn); border-color: var(--warn); }
|
||||
|
||||
.card-url {
|
||||
display: block;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 700;
|
||||
text-decoration: none;
|
||||
padding: 0.25rem 0.5rem;
|
||||
margin: 0.5rem 0 0.6rem 8px;
|
||||
border-radius: 2px;
|
||||
word-break: break-all;
|
||||
border-left: 3px solid;
|
||||
}
|
||||
|
||||
.card.portal .card-url { color: var(--accent); background: #eff6ff; border-color: var(--accent); }
|
||||
.card.mail .card-url { color: #7c3aed; background: #faf5ff; border-color: #7c3aed; }
|
||||
.card.tube .card-url { color: #b81c1c; background: #fef2f2; border-color: #b81c1c; }
|
||||
.card.cloud .card-url { color: var(--accent2); background: #f0fdf4; border-color: var(--accent2); }
|
||||
.card.vpn .card-url { color: #0891b2; background: #f0f9ff; border-color: #0891b2; }
|
||||
.card.admin .card-url { color: var(--warn); background: #fff7ed; border-color: var(--warn); }
|
||||
|
||||
.card-desc {
|
||||
font-size: 0.78rem;
|
||||
color: var(--muted);
|
||||
margin-bottom: 0.75rem;
|
||||
padding-left: 8px;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
/* Steps */
|
||||
.steps {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.28rem;
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
.step {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 0.45rem;
|
||||
font-size: 0.79rem;
|
||||
}
|
||||
|
||||
.step-num {
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.65rem;
|
||||
font-weight: 900;
|
||||
min-width: 1.3rem;
|
||||
height: 1.3rem;
|
||||
border-radius: 2px;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
flex-shrink: 0;
|
||||
margin-top: 0.05rem;
|
||||
border: 1.5px solid;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.card.portal .step-num { background: var(--accent); border-color: var(--accent); }
|
||||
.card.mail .step-num { background: #7c3aed; border-color: #7c3aed; }
|
||||
.card.tube .step-num { background: #b81c1c; border-color: #b81c1c; }
|
||||
.card.cloud .step-num { background: var(--accent2); border-color: var(--accent2); }
|
||||
.card.vpn .step-num { background: #0891b2; border-color: #0891b2; }
|
||||
.card.admin .step-num { background: var(--warn); border-color: var(--warn); }
|
||||
|
||||
.step-text { color: var(--text); line-height: 1.4; }
|
||||
|
||||
code {
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.85em;
|
||||
background: var(--light);
|
||||
color: var(--accent);
|
||||
padding: 0 3px;
|
||||
border-radius: 2px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* ══ CREDENTIALS ══ */
|
||||
.creds-wrap { padding: 1rem; }
|
||||
|
||||
.creds-box {
|
||||
border: 2px solid var(--border);
|
||||
border-radius: var(--radius);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.creds-header {
|
||||
padding: 0.45rem 1rem;
|
||||
background: var(--warn);
|
||||
color: #fff;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.7rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 2px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.creds-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.cred-item {
|
||||
padding: 0.75rem 1rem;
|
||||
border-right: 1px solid var(--light);
|
||||
border-bottom: 1px solid var(--light);
|
||||
}
|
||||
|
||||
.cred-item:nth-child(2n) { border-right: none; }
|
||||
.cred-item:nth-last-child(-n+2) { border-bottom: none; }
|
||||
|
||||
.cred-label {
|
||||
font-size: 0.65rem;
|
||||
color: var(--muted);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1.5px;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-weight: 700;
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.cred-value {
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.9rem;
|
||||
color: var(--text);
|
||||
font-weight: 700;
|
||||
border-bottom: 1.5px dotted #aaa;
|
||||
padding-bottom: 2px;
|
||||
min-width: 100%;
|
||||
display: block;
|
||||
min-height: 1.4rem;
|
||||
}
|
||||
|
||||
.cred-value.placeholder { color: #bbb; font-style: italic; font-weight: 400; }
|
||||
|
||||
/* ══ ALERT ══ */
|
||||
.alert {
|
||||
display: flex;
|
||||
gap: 0.75rem;
|
||||
align-items: flex-start;
|
||||
margin: 1rem;
|
||||
padding: 0.8rem 1rem;
|
||||
background: #fff5f5;
|
||||
border: 1.5px solid var(--danger);
|
||||
border-left: 5px solid var(--danger);
|
||||
border-radius: var(--radius);
|
||||
font-size: 0.8rem;
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.alert-icon { font-size: 1.1rem; flex-shrink: 0; margin-top: 1px; }
|
||||
.alert strong { color: var(--danger); font-family: 'Courier New', monospace; }
|
||||
|
||||
/* ══ TIPS ══ */
|
||||
.tips-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
|
||||
}
|
||||
|
||||
.tip {
|
||||
padding: 0.85rem 1rem;
|
||||
border-right: 1px solid var(--light);
|
||||
border-bottom: 1px solid var(--light);
|
||||
display: flex;
|
||||
gap: 0.6rem;
|
||||
}
|
||||
|
||||
.tip:nth-child(3n) { border-right: none; }
|
||||
.tip:nth-last-child(-n+3) { border-bottom: none; }
|
||||
|
||||
.tip-icon { font-size: 1.1rem; flex-shrink: 0; }
|
||||
|
||||
.tip-content strong {
|
||||
display: block;
|
||||
font-size: 0.8rem;
|
||||
color: var(--text);
|
||||
font-weight: 800;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
margin-bottom: 0.2rem;
|
||||
}
|
||||
|
||||
.tip-content span {
|
||||
font-size: 0.76rem;
|
||||
color: var(--muted);
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* ══ QUICK REF ══ */
|
||||
.quickref {
|
||||
padding: 0.8rem 1rem;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
|
||||
gap: 0.4rem 1rem;
|
||||
}
|
||||
|
||||
.qr-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.78rem;
|
||||
padding: 0.3rem 0;
|
||||
border-bottom: 1px dashed var(--light);
|
||||
}
|
||||
|
||||
.qr-emoji { font-size: 0.9rem; }
|
||||
.qr-label { color: var(--muted); font-weight: 700; width: 5rem; flex-shrink: 0; }
|
||||
.qr-url { font-weight: 700; text-decoration: none; }
|
||||
|
||||
.qr-portal { color: var(--accent); }
|
||||
.qr-mail { color: #7c3aed; }
|
||||
.qr-tube { color: #b81c1c; }
|
||||
.qr-cloud { color: var(--accent2); }
|
||||
.qr-vpn { color: #0891b2; }
|
||||
.qr-admin { color: var(--warn); }
|
||||
|
||||
/* ══ FOOTER ══ */
|
||||
footer {
|
||||
text-align: center;
|
||||
padding-top: 1.5rem;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.68rem;
|
||||
color: var(--muted);
|
||||
letter-spacing: 1px;
|
||||
border-top: 2px solid var(--border);
|
||||
margin-top: 1rem;
|
||||
padding-top: 0.75rem;
|
||||
}
|
||||
|
||||
footer strong { color: var(--accent); }
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.services-grid { grid-template-columns: 1fr; }
|
||||
.creds-grid { grid-template-columns: 1fr; }
|
||||
.cred-item { border-right: none; }
|
||||
.header-badge { display: none; }
|
||||
.tip:nth-child(3n) { border-right: 1px solid var(--light); }
|
||||
.tips-grid { grid-template-columns: 1fr 1fr; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<header>
|
||||
<div class="logo">S⃤</div>
|
||||
<div class="header-text">
|
||||
<h1>Secu<span>Box</span></h1>
|
||||
<p>// GUIDE DE CONNEXION AUX SERVICES · v1.0</p>
|
||||
</div>
|
||||
<div class="header-badge">🔐 KISS DOC</div>
|
||||
</header>
|
||||
|
||||
<!-- SERVICES -->
|
||||
<section>
|
||||
<div class="section-title">🔌 Services disponibles — connexion en 3 étapes</div>
|
||||
<div class="services-grid">
|
||||
|
||||
<!-- PORTAIL -->
|
||||
<div class="card portal">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">🏠</div>
|
||||
<div class="card-name">Portail</div>
|
||||
<div class="card-tag">HTTPS</div>
|
||||
</div>
|
||||
<a class="card-url" href="https://secubox.in">secubox.in</a>
|
||||
<p class="card-desc">🚪 Point d'entrée principal. Tableau de bord et accès à tous les services SecuBox.</p>
|
||||
<div class="steps">
|
||||
<div class="step">
|
||||
<div class="step-num">1</div>
|
||||
<div class="step-text">🌐 Ouvrir <code>secubox.in</code> dans le navigateur</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">2</div>
|
||||
<div class="step-text">✍️ Saisir identifiant & mot de passe</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">3</div>
|
||||
<div class="step-text">📲 Valider le code 2FA si demandé</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WEBMAIL -->
|
||||
<div class="card mail">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">📧</div>
|
||||
<div class="card-name">Webmail</div>
|
||||
<div class="card-tag">ROUNDCUBE</div>
|
||||
</div>
|
||||
<a class="card-url" href="https://webmail.gk2.secubox.in">mail.secubox.in</a>
|
||||
<p class="card-desc">✉️ Messagerie Roundcube. Accès aux courriels <code>@secubox.in</code> depuis n'importe où.</p>
|
||||
<div class="steps">
|
||||
<div class="step">
|
||||
<div class="step-num">1</div>
|
||||
<div class="step-text">🌐 Aller sur <code>mail.secubox.in</code></div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">2</div>
|
||||
<div class="step-text">👤 Login : <code>prénom.nom</code></div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">3</div>
|
||||
<div class="step-text">🔑 Mot de passe identique au portail</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- TUBE -->
|
||||
<div class="card tube">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">▶️</div>
|
||||
<div class="card-name">PeerTube</div>
|
||||
<div class="card-tag">VIDÉO</div>
|
||||
</div>
|
||||
<a class="card-url" href="https://tube.gk2.secubox.in">tube.secubox.in</a>
|
||||
<p class="card-desc">🎬 Plateforme vidéo interne. Tutoriels, conférences et contenus de formation SecuBox.</p>
|
||||
<div class="steps">
|
||||
<div class="step">
|
||||
<div class="step-num">1</div>
|
||||
<div class="step-text">🌐 Ouvrir <code>tube.secubox.in</code></div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">2</div>
|
||||
<div class="step-text">🔝 Cliquer <code>Connexion</code> en haut à droite</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">3</div>
|
||||
<div class="step-text">🔑 Mêmes identifiants que le portail</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CLOUD -->
|
||||
<div class="card cloud">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">☁️</div>
|
||||
<div class="card-name">Nextcloud</div>
|
||||
<div class="card-tag">CLOUD</div>
|
||||
</div>
|
||||
<a class="card-url" href="https://cloud.gk2.secubox.in">cloud.secubox.in</a>
|
||||
<p class="card-desc">📁 Stockage et partage de fichiers. Synchronisation desktop/mobile avec le client Nextcloud.</p>
|
||||
<div class="steps">
|
||||
<div class="step">
|
||||
<div class="step-num">1</div>
|
||||
<div class="step-text">🌐 Ouvrir <code>cloud.secubox.in</code></div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">2</div>
|
||||
<div class="step-text">✍️ Saisir identifiant & mot de passe</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">3</div>
|
||||
<div class="step-text">💻 Optionnel : installer le client desktop</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- VPN -->
|
||||
<div class="card vpn">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">🔐</div>
|
||||
<div class="card-name">VPN</div>
|
||||
<div class="card-tag">WIREGUARD</div>
|
||||
</div>
|
||||
<a class="card-url" href="https://vpn.gk2.secubox.in">vpn.secubox.in</a>
|
||||
<p class="card-desc">🛡️ Accès sécurisé depuis l'extérieur. Requiert le client WireGuard et votre fichier de config.</p>
|
||||
<div class="steps">
|
||||
<div class="step">
|
||||
<div class="step-num">1</div>
|
||||
<div class="step-text">📥 Installer <code>WireGuard</code> sur votre appareil</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">2</div>
|
||||
<div class="step-text">📄 Importer le fichier <code>.conf</code> fourni</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">3</div>
|
||||
<div class="step-text">✅ Activer le tunnel → accès complet</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ADMIN -->
|
||||
<div class="card admin">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">⚙️</div>
|
||||
<div class="card-name">Administration</div>
|
||||
<div class="card-tag">ADMIN</div>
|
||||
</div>
|
||||
<a class="card-url" href="https://admin.gk2.secubox.in">admin.secubox.in</a>
|
||||
<p class="card-desc">🛠️ Panneau LuCI / interfaces d'admin. Réservé aux opérateurs SecuBox habilités uniquement.</p>
|
||||
<div class="steps">
|
||||
<div class="step">
|
||||
<div class="step-num">1</div>
|
||||
<div class="step-text">🔐 Connexion VPN <strong>obligatoire</strong> au préalable</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">2</div>
|
||||
<div class="step-text">🌐 Ouvrir <code>admin.secubox.in</code></div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-num">3</div>
|
||||
<div class="step-text">🗝️ Compte administrateur dédié requis</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CREDENTIALS -->
|
||||
<section>
|
||||
<div class="section-title">🗝️ Vos identifiants — à remplir & conserver en lieu sûr</div>
|
||||
<div class="creds-wrap">
|
||||
<div class="creds-box">
|
||||
<div class="creds-header">⚠️ INFORMATIONS DE CONNEXION PERSONNELLES</div>
|
||||
<div class="creds-grid">
|
||||
<div class="cred-item">
|
||||
<div class="cred-label">👤 Identifiant</div>
|
||||
<div class="cred-value placeholder">prénom.nom</div>
|
||||
</div>
|
||||
<div class="cred-item">
|
||||
<div class="cred-label">🔒 Mot de passe</div>
|
||||
<div class="cred-value placeholder">· · · · · · · · · ·</div>
|
||||
</div>
|
||||
<div class="cred-item">
|
||||
<div class="cred-label">📧 Adresse email</div>
|
||||
<div class="cred-value placeholder">prénom.nom@secubox.in</div>
|
||||
</div>
|
||||
<div class="cred-item">
|
||||
<div class="cred-label">📲 Application 2FA</div>
|
||||
<div class="cred-value placeholder">Aegis / Google Auth</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert">
|
||||
<div class="alert-icon">🚫</div>
|
||||
<div><strong>SÉCURITÉ :</strong> Ne jamais partager votre mot de passe par email, messagerie ou téléphone. En cas de doute sur la confidentialité de vos accès, contacter immédiatement <code>admin@secubox.in</code> pour réinitialisation.</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TIPS -->
|
||||
<section>
|
||||
<div class="section-title">💡 Conseils pratiques</div>
|
||||
<div class="tips-grid">
|
||||
<div class="tip">
|
||||
<div class="tip-icon">🔒</div>
|
||||
<div class="tip-content">
|
||||
<strong>Certificat HTTPS</strong>
|
||||
<span>Tous les services sont en HTTPS. Toute alerte de certificat doit être signalée immédiatement à l'admin.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tip">
|
||||
<div class="tip-icon">📱</div>
|
||||
<div class="tip-content">
|
||||
<strong>Accès mobile</strong>
|
||||
<span>Services accessibles depuis smartphone. Utiliser Firefox ou Chrome mobile en version récente.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tip">
|
||||
<div class="tip-icon">🔄</div>
|
||||
<div class="tip-content">
|
||||
<strong>Mot de passe oublié</strong>
|
||||
<span>Contacter l'admin via <code>admin@secubox.in</code>. Prévoir 24h ouvrées pour la réinitialisation.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tip">
|
||||
<div class="tip-icon">🌐</div>
|
||||
<div class="tip-content">
|
||||
<strong>Depuis l'extérieur</strong>
|
||||
<span>Activer le tunnel VPN WireGuard avant toute connexion hors réseau local pour un accès optimal.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tip">
|
||||
<div class="tip-icon">🗂️</div>
|
||||
<div class="tip-content">
|
||||
<strong>Sync Nextcloud</strong>
|
||||
<span>Installer le client desktop Nextcloud pour synchroniser automatiquement vos fichiers en local.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tip">
|
||||
<div class="tip-icon">🆘</div>
|
||||
<div class="tip-content">
|
||||
<strong>Support technique</strong>
|
||||
<span>En cas de panne ou blocage : <code>admin@secubox.in</code> ou le canal de support dédié SecuBox.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- QUICK REF -->
|
||||
<section>
|
||||
<div class="section-title">📋 Récapitulatif rapide — URLs des services</div>
|
||||
<div class="quickref">
|
||||
<div class="qr-item">
|
||||
<span class="qr-emoji">🏠</span>
|
||||
<span class="qr-label">Portail</span>
|
||||
<a class="qr-url qr-portal" href="https://secubox.in">secubox.in</a>
|
||||
</div>
|
||||
<div class="qr-item">
|
||||
<span class="qr-emoji">📧</span>
|
||||
<span class="qr-label">Webmail</span>
|
||||
<a class="qr-url qr-mail" href="https://webmail.gk2.secubox.in">mail.secubox.in</a>
|
||||
</div>
|
||||
<div class="qr-item">
|
||||
<span class="qr-emoji">▶️</span>
|
||||
<span class="qr-label">Vidéo</span>
|
||||
<a class="qr-url qr-tube" href="https://tube.gk2.secubox.in">tube.secubox.in</a>
|
||||
</div>
|
||||
<div class="qr-item">
|
||||
<span class="qr-emoji">☁️</span>
|
||||
<span class="qr-label">Cloud</span>
|
||||
<a class="qr-url qr-cloud" href="https://cloud.gk2.secubox.in">cloud.secubox.in</a>
|
||||
</div>
|
||||
<div class="qr-item">
|
||||
<span class="qr-emoji">🔐</span>
|
||||
<span class="qr-label">VPN</span>
|
||||
<a class="qr-url qr-vpn" href="https://vpn.gk2.secubox.in">vpn.secubox.in</a>
|
||||
</div>
|
||||
<div class="qr-item">
|
||||
<span class="qr-emoji">⚙️</span>
|
||||
<span class="qr-label">Admin</span>
|
||||
<a class="qr-url qr-admin" href="https://admin.gk2.secubox.in">admin.secubox.in</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<strong>SecuBox</strong> · CyberMind.FR · Documentation utilisateur v1.0 ·
|
||||
Usage interne · Confidentiel ·
|
||||
Généré le <span id="date"></span>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById('date').textContent =
|
||||
new Date().toLocaleDateString('fr-FR', {day:'2-digit', month:'long', year:'numeric'});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,228 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>SecuBox Portal</title>
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: linear-gradient(135deg, #0a0a0a 0%, #1a1a2e 50%, #16213e 100%); min-height: 100vh; color: #e0e0e0; }
|
||||
.grid-bg { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-image: linear-gradient(rgba(0,255,136,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0,255,136,0.03) 1px, transparent 1px); background-size: 50px 50px; animation: gridMove 20s linear infinite; pointer-events: none; }
|
||||
@keyframes gridMove { 0% { transform: translate(0,0); } 100% { transform: translate(50px,50px); } }
|
||||
.container { position: relative; z-index: 1; max-width: 1400px; margin: 0 auto; padding: 2rem; }
|
||||
.login-view { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 100vh; }
|
||||
.login-card { background: rgba(26,26,46,0.9); border: 1px solid rgba(0,255,136,0.2); border-radius: 16px; padding: 3rem; width: 100%; max-width: 400px; backdrop-filter: blur(10px); }
|
||||
.logo { text-align: center; margin-bottom: 2rem; }
|
||||
.logo h1 { font-size: 2.5rem; background: linear-gradient(135deg, #00ff88, #00d4ff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
||||
.logo p { color: #888; margin-top: 0.5rem; }
|
||||
.form-group { margin-bottom: 1.5rem; }
|
||||
.form-group label { display: block; margin-bottom: 0.5rem; color: #aaa; font-size: 0.9rem; }
|
||||
.form-group input { width: 100%; padding: 0.8rem 1rem; background: rgba(0,0,0,0.3); border: 1px solid rgba(255,255,255,0.1); border-radius: 8px; color: #fff; font-size: 1rem; }
|
||||
.form-group input:focus { outline: none; border-color: #00ff88; }
|
||||
.btn { width: 100%; padding: 1rem; background: linear-gradient(135deg, #00ff88, #00cc6a); border: none; border-radius: 8px; color: #000; font-size: 1rem; font-weight: 600; cursor: pointer; }
|
||||
.btn:hover { transform: translateY(-2px); box-shadow: 0 4px 20px rgba(0,255,136,0.4); }
|
||||
.btn:disabled { opacity: 0.6; }
|
||||
.error-msg { background: rgba(255,68,68,0.2); border: 1px solid rgba(255,68,68,0.5); color: #ff6b6b; padding: 0.8rem; border-radius: 8px; margin-bottom: 1rem; display: none; text-align: center; }
|
||||
.guide-link { margin-top: 1.5rem; text-align: center; }
|
||||
.guide-link a { color: #00d4ff; text-decoration: none; font-size: 0.9rem; }
|
||||
.guide-link a:hover { color: #00ff88; text-decoration: underline; }
|
||||
.portal-view { display: none; }
|
||||
.portal-header { display: flex; justify-content: space-between; align-items: center; padding: 1.5rem 0; border-bottom: 1px solid rgba(255,255,255,0.1); margin-bottom: 2rem; }
|
||||
.portal-header h1 { font-size: 1.8rem; background: linear-gradient(135deg, #00ff88, #00d4ff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
||||
.user-info { display: flex; align-items: center; gap: 1rem; }
|
||||
.user-badge { background: rgba(0,255,136,0.1); border: 1px solid rgba(0,255,136,0.3); padding: 0.5rem 1rem; border-radius: 20px; }
|
||||
.logout-btn { background: rgba(255,68,68,0.2); border: 1px solid rgba(255,68,68,0.5); color: #ff6b6b; padding: 0.5rem 1rem; border-radius: 8px; cursor: pointer; }
|
||||
.section-title { font-size: 1.1rem; color: #00ff88; margin: 1.5rem 0 1rem; }
|
||||
.services-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 1rem; }
|
||||
.service-card { background: rgba(26,26,46,0.8); border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; padding: 1.2rem; text-decoration: none; color: inherit; transition: all 0.3s; }
|
||||
.service-card:hover { border-color: #00ff88; transform: translateY(-3px); }
|
||||
.service-icon { font-size: 1.8rem; margin-bottom: 0.5rem; }
|
||||
.service-name { font-weight: 600; color: #fff; margin-bottom: 0.3rem; }
|
||||
.service-url { font-size: 0.75rem; color: #00d4ff; }
|
||||
.footer { text-align: center; padding: 2rem 0; color: #555; font-size: 0.85rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="grid-bg"></div>
|
||||
|
||||
<div class="login-view" id="loginView">
|
||||
<div class="login-card">
|
||||
<div class="logo">
|
||||
<h1>SecuBox</h1>
|
||||
<p>SSO Portal</p>
|
||||
</div>
|
||||
<div class="error-msg" id="errorMsg"></div>
|
||||
<form id="loginForm">
|
||||
<div class="form-group">
|
||||
<label>Utilisateur</label>
|
||||
<input type="text" id="username" required autocomplete="username">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Mot de passe</label>
|
||||
<input type="password" id="password" required autocomplete="current-password">
|
||||
</div>
|
||||
<button type="submit" class="btn" id="loginBtn">Connexion</button>
|
||||
</form>
|
||||
<div class="guide-link">
|
||||
<a href="https://gk2.secubox.in/guide/" target="_blank">📖 Guide utilisateur</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="portal-view" id="portalView">
|
||||
<div class="container">
|
||||
<header class="portal-header">
|
||||
<h1>SecuBox Services</h1>
|
||||
<div class="user-info">
|
||||
<span class="user-badge" id="userBadge"></span>
|
||||
<button class="logout-btn" id="logoutBtn">Logout</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<h2 class="section-title">Communication</h2>
|
||||
<div class="services-grid">
|
||||
<a href="https://webmail.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">📧</div>
|
||||
<div class="service-name">Webmail</div>
|
||||
<div class="service-url">webmail.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://matrix.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">💬</div>
|
||||
<div class="service-name">Matrix</div>
|
||||
<div class="service-url">matrix.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://xmpp.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">🗨️</div>
|
||||
<div class="service-name">Jabber</div>
|
||||
<div class="service-url">xmpp.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://meet.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">📹</div>
|
||||
<div class="service-name">Jitsi Meet</div>
|
||||
<div class="service-url">meet.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://voip.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">📞</div>
|
||||
<div class="service-name">VoIP</div>
|
||||
<div class="service-url">voip.gk2.secubox.in</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<h2 class="section-title">Cloud et Media</h2>
|
||||
<div class="services-grid">
|
||||
<a href="https://cloud.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">☁️</div>
|
||||
<div class="service-name">Nextcloud</div>
|
||||
<div class="service-url">cloud.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://git.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">🔀</div>
|
||||
<div class="service-name">Gitea</div>
|
||||
<div class="service-url">git.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://tube.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">🎬</div>
|
||||
<div class="service-name">PeerTube</div>
|
||||
<div class="service-url">tube.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://jellyfin.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">🎵</div>
|
||||
<div class="service-name">Jellyfin</div>
|
||||
<div class="service-url">jellyfin.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://social.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">🐘</div>
|
||||
<div class="service-name">GoToSocial</div>
|
||||
<div class="service-url">social.gk2.secubox.in</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<h2 class="section-title">Administration</h2>
|
||||
<div class="services-grid">
|
||||
<a href="https://admin.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">⚙️</div>
|
||||
<div class="service-name">Admin</div>
|
||||
<div class="service-url">admin.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://vpn.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">🔐</div>
|
||||
<div class="service-name">VPN</div>
|
||||
<div class="service-url">vpn.gk2.secubox.in</div>
|
||||
</a>
|
||||
<a href="https://hub.gk2.secubox.in/" class="service-card" target="_blank">
|
||||
<div class="service-icon">🏠</div>
|
||||
<div class="service-name">Hub</div>
|
||||
<div class="service-url">hub.gk2.secubox.in</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<footer class="footer">SecuBox - Secure Services Portal</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var RPC = "/ubus";
|
||||
|
||||
function login(u, p) {
|
||||
return fetch(RPC, {
|
||||
method: "POST",
|
||||
headers: {"Content-Type": "application/json"},
|
||||
body: JSON.stringify({jsonrpc:"2.0",id:1,method:"call",params:["00000000000000000000000000000000","session","login",{username:u,password:p}]})
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(d) {
|
||||
if (d.result && d.result[0] === 0) return d.result[1];
|
||||
throw new Error("Auth failed");
|
||||
});
|
||||
}
|
||||
|
||||
function showView(v) {
|
||||
document.getElementById("loginView").style.display = v === "login" ? "flex" : "none";
|
||||
document.getElementById("portalView").style.display = v === "portal" ? "block" : "none";
|
||||
}
|
||||
|
||||
function checkSession() {
|
||||
var s = sessionStorage.getItem("sb_session");
|
||||
var u = sessionStorage.getItem("sb_user");
|
||||
if (s && u) {
|
||||
document.getElementById("userBadge").textContent = u;
|
||||
showView("portal");
|
||||
} else {
|
||||
showView("login");
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById("loginForm").onsubmit = function(e) {
|
||||
e.preventDefault();
|
||||
var u = document.getElementById("username").value;
|
||||
var p = document.getElementById("password").value;
|
||||
var btn = document.getElementById("loginBtn");
|
||||
var err = document.getElementById("errorMsg");
|
||||
|
||||
btn.disabled = true;
|
||||
btn.textContent = "Connexion...";
|
||||
err.style.display = "none";
|
||||
|
||||
login(u, p).then(function(sess) {
|
||||
sessionStorage.setItem("sb_session", sess.ubus_rpc_session);
|
||||
sessionStorage.setItem("sb_user", u);
|
||||
document.getElementById("userBadge").textContent = u;
|
||||
showView("portal");
|
||||
}).catch(function() {
|
||||
err.textContent = "Identifiants incorrects";
|
||||
err.style.display = "block";
|
||||
}).finally(function() {
|
||||
btn.disabled = false;
|
||||
btn.textContent = "Connexion";
|
||||
});
|
||||
};
|
||||
|
||||
document.getElementById("logoutBtn").onclick = function() {
|
||||
sessionStorage.clear();
|
||||
showView("login");
|
||||
};
|
||||
|
||||
checkSession();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue
Block a user