mirror of
https://github.com/CyberMind-FR/secubox-deb.git
synced 2026-07-01 13:06:54 +00:00
Compare commits
No commits in common. "678adc8f68b25381cbd37f93a1c5b85adf46c5f9" and "3b4a1857755d5cc6ee5cc7f28269ca9ad3648217" have entirely different histories.
678adc8f68
...
3b4a185775
|
|
@ -241,40 +241,19 @@ LXC toolbox-mitm-wg 10.100.0.62 R3 WireGuard
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{# ── Install : auto-detected platform panels (Phase 8.2 #500) ── #}
|
{# ── Install demo ── #}
|
||||||
<div class=section>
|
<div class=section>
|
||||||
<h2>📥 Installer R3 sur ton appareil</h2>
|
<h2>📥 Démo : installer le mode R3 portable</h2>
|
||||||
<p style="font-size:0.85rem;color:var(--dim);margin-bottom:0.8rem">
|
<ol class=steps>
|
||||||
On a détecté <code>{{ install_platform }}</code> via ton navigateur — le panneau adapté
|
<li>Installer l'app <b>WireGuard</b> (gratuite, App Store / Play Store)</li>
|
||||||
est ouvert en premier. Autre appareil ? Déplie le bon panneau ci-dessous.
|
<li>Aller sur <a href=/wg/r3-install>🌐 page d'install R3</a> → scanner le QR avec l'app WireGuard</li>
|
||||||
</p>
|
<li>Activer le tunnel dans l'app WireGuard → icône VPN apparaît dans iOS</li>
|
||||||
<style>
|
<li>Ouvrir n'importe quelle page web → bandeau ToolBox apparaît + rapport temps réel se remplit</li>
|
||||||
.install-panel{background:rgba(0,255,65,0.04);border:1px solid rgba(0,255,65,0.25);
|
<li>Désactiver le tunnel à tout moment → retour au surf normal</li>
|
||||||
border-radius:6px;padding:0.6rem 0.9rem;margin:0.45rem 0}
|
</ol>
|
||||||
.install-panel summary{cursor:pointer;font-size:0.95rem;color:var(--phos-peak,#00dd44);
|
<p style="margin-top:0.6rem;font-size:0.78rem;color:var(--dim)">
|
||||||
list-style:none;outline:none}
|
Avantage R3 : marche hors-cabine (4G/5G, autre WiFi). Inclus tout le trafic (HTTPS + QUIC).
|
||||||
.install-panel summary::-webkit-details-marker{display:none}
|
Profile + CA bundlés dans un seul fichier .conf.
|
||||||
.install-panel[open] summary{margin-bottom:0.6rem}
|
|
||||||
.install-panel .emoji{font-size:1.1rem;margin-right:0.3rem}
|
|
||||||
.install-panel ol{padding-left:1.1rem;line-height:1.5;font-size:0.85rem}
|
|
||||||
.install-panel .btn{display:inline-block;padding:0.45rem 0.75rem;margin:0.25rem 0.2rem 0.25rem 0;
|
|
||||||
background:var(--purple,#6e40c9);color:#fff;text-decoration:none;border-radius:5px;
|
|
||||||
font-weight:bold;font-size:0.82rem}
|
|
||||||
.install-panel .btn.alt{background:transparent;border:1px solid var(--purple,#6e40c9);
|
|
||||||
color:var(--purple,#6e40c9)}
|
|
||||||
.install-panel code{background:rgba(0,0,0,0.4);padding:0.1rem 0.35rem;border-radius:3px;
|
|
||||||
font-size:0.8rem;color:var(--phos-peak,#00dd44)}
|
|
||||||
.install-panel .note{color:var(--dim,#888);font-size:0.78rem;margin-top:0.6rem;
|
|
||||||
border-left:2px solid var(--phos-hot,#ffb347);padding-left:0.6rem}
|
|
||||||
.install-panel img{max-width:100%;border-radius:5px;margin:0.4rem 0}
|
|
||||||
.install-panel pre{background:rgba(0,0,0,0.4);padding:0.5rem 0.7rem;border-radius:4px;
|
|
||||||
overflow-x:auto;font-size:0.78rem;margin:0.4rem 0}
|
|
||||||
</style>
|
|
||||||
{{ install_panels | safe }}
|
|
||||||
<p style="margin-top:0.8rem;font-size:0.78rem;color:var(--dim)">
|
|
||||||
Avantage R3 : marche hors-cabine (4G/5G, autre WiFi). Inclut tout le trafic (HTTPS).
|
|
||||||
Profil + CA bundlés. Le tunnel est révoquable à tout moment depuis Réglages.
|
|
||||||
Page équivalente standalone : <a href=/wg/onboard>/wg/onboard</a>.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,3 @@
|
||||||
secubox-toolbox (2.4.2-1~bookworm1) bookworm; urgency=medium
|
|
||||||
|
|
||||||
* Landing page kbin.gk2.secubox.in : la section 'Démo install R3'
|
|
||||||
est remplacée par les panneaux platform-detected du /wg/onboard.
|
|
||||||
UA sniff côté serveur (iOS / Android / Linux / macOS / Windows),
|
|
||||||
le panneau de la plate-forme du visiteur est ouvert en premier ;
|
|
||||||
les autres restent en details collapsed. Single source of truth :
|
|
||||||
_install_panels_html() partagé entre /wg/onboard et la landing.
|
|
||||||
Visiteur arrive sur kbin → voit immédiatement le bouton d'install
|
|
||||||
adapté à son device, sans devoir aller sur une page tierce.
|
|
||||||
|
|
||||||
-- Gérald Kerma <devel@cybermind.fr> lun., 08 juin 2026 15:51:43 +0000
|
|
||||||
|
|
||||||
secubox-toolbox (2.4.1-1~bookworm1) bookworm; urgency=medium
|
secubox-toolbox (2.4.1-1~bookworm1) bookworm; urgency=medium
|
||||||
|
|
||||||
* Phase 8.1 perf (#500) — mitm-wg CPU bottleneck under multi-peer.
|
* Phase 8.1 perf (#500) — mitm-wg CPU bottleneck under multi-peer.
|
||||||
|
|
|
||||||
|
|
@ -411,73 +411,16 @@ async def cumulative_stats_json() -> dict:
|
||||||
return _cumulative_stats()
|
return _cumulative_stats()
|
||||||
|
|
||||||
|
|
||||||
def _ua_platform(ua: str) -> str:
|
|
||||||
"""Cheap UA sniff. Same logic as /wg/onboard so the auto-open panel
|
|
||||||
matches between the two pages."""
|
|
||||||
ua = (ua or "").lower()
|
|
||||||
if "iphone" in ua or "ipad" in ua or "ios" in ua:
|
|
||||||
return "ios"
|
|
||||||
if "android" in ua:
|
|
||||||
return "android"
|
|
||||||
if "macintosh" in ua or "mac os x" in ua:
|
|
||||||
return "macos"
|
|
||||||
if "windows" in ua:
|
|
||||||
return "windows"
|
|
||||||
if "linux" in ua:
|
|
||||||
return "linux"
|
|
||||||
return "other"
|
|
||||||
|
|
||||||
|
|
||||||
def _install_panels_html(platform: str) -> str:
|
|
||||||
"""Reusable platform-detected install panels for both
|
|
||||||
/wg/onboard and the landing page. Same content, same CSS classes
|
|
||||||
so styling stays consistent (the landing page injects matching
|
|
||||||
classes via its own style block)."""
|
|
||||||
panels = {
|
|
||||||
"ios": ("🍎 iPhone / iPad", "ios"),
|
|
||||||
"android": ("🤖 Android", "android"),
|
|
||||||
"linux": ("🐧 Linux", "linux"),
|
|
||||||
"macos": ("🍏 macOS", "macos"),
|
|
||||||
"windows": ("🪟 Windows", "windows"),
|
|
||||||
}
|
|
||||||
order = [platform] + [k for k in panels if k != platform]
|
|
||||||
order = [k for i, k in enumerate(order) if k in panels and k not in order[:i]]
|
|
||||||
sections = []
|
|
||||||
for key in order:
|
|
||||||
title, slug = panels[key]
|
|
||||||
body = _ONBOARD_BODY[slug]
|
|
||||||
open_attr = " open" if key == order[0] else ""
|
|
||||||
sections.append(
|
|
||||||
f'<details class="install-panel" id="install-{slug}"{open_attr}>'
|
|
||||||
f'<summary><span class="emoji">{title.split()[0]}</span> '
|
|
||||||
f'<b>{title}</b></summary>{body}</details>'
|
|
||||||
)
|
|
||||||
return "\n".join(sections)
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/landing", response_class=HTMLResponse)
|
@router.get("/landing", response_class=HTMLResponse)
|
||||||
@router.get("/cabine", response_class=HTMLResponse)
|
@router.get("/cabine", response_class=HTMLResponse)
|
||||||
async def landing(request: Request) -> HTMLResponse:
|
async def landing(request: Request) -> HTMLResponse:
|
||||||
"""Public landing page for the cabine — shown on kbin.gk2.secubox.in.
|
"""Public landing page for the cabine — shown on kbin.gk2.secubox.in.
|
||||||
|
|
||||||
Visitor-facing demo of the project : pitch + 4 levels + install + live
|
Visitor-facing demo of the project : pitch + 4 levels + install + live
|
||||||
cumulative anonymous stats + open source license + contact.
|
cumulative anonymous stats + open source license + contact."""
|
||||||
|
|
||||||
Phase 8.2 (#500) — embeds the same platform-detected install
|
|
||||||
panels as /wg/onboard so visitors get a one-click flow matching
|
|
||||||
their device right on the landing page.
|
|
||||||
"""
|
|
||||||
stats = _cumulative_stats()
|
stats = _cumulative_stats()
|
||||||
platform = _ua_platform(request.headers.get("user-agent") or "")
|
return HTMLResponse(_env.get_template("landing.html.j2").render(stats=stats),
|
||||||
install_panels = _install_panels_html(platform)
|
headers={"Cache-Control": "public, max-age=60"})
|
||||||
return HTMLResponse(
|
|
||||||
_env.get_template("landing.html.j2").render(
|
|
||||||
stats=stats,
|
|
||||||
install_panels=install_panels,
|
|
||||||
install_platform=platform,
|
|
||||||
),
|
|
||||||
headers={"Cache-Control": "private, max-age=60, no-transform"},
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/ca/webclip-cabine.mobileconfig")
|
@router.get("/ca/webclip-cabine.mobileconfig")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user