120 lines
4.2 KiB
HTML
120 lines
4.2 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="color-scheme" content="dark">
|
|
<title>Browsec TrustLab</title>
|
|
<link rel="stylesheet" href="/ui/styles.css">
|
|
</head>
|
|
<body>
|
|
<header class="browser-frame">
|
|
<div class="brand-mark" aria-hidden="true">B</div>
|
|
<div>
|
|
<strong>Browsec security decision</strong>
|
|
<span>Browser-owned test surface</span>
|
|
</div>
|
|
<div id="frame-seal" class="frame-seal">TRUSTLAB · SYNTHETIC</div>
|
|
</header>
|
|
|
|
<main>
|
|
<aside class="controls" aria-label="TrustLab controls">
|
|
<p class="eyebrow">Input source</p>
|
|
<label for="scenario">Certificate scenario</label>
|
|
<select id="scenario"></select>
|
|
|
|
<form id="probe-form" class="probe-form">
|
|
<label for="probe-target">Live TLS target</label>
|
|
<div class="probe-row">
|
|
<input id="probe-target" name="target" type="text" inputmode="url" placeholder="example.com:443" autocomplete="off" required>
|
|
<button id="probe-submit" class="button" type="submit">Probe</button>
|
|
</div>
|
|
<p id="probe-message" class="probe-message" aria-live="polite"></p>
|
|
</form>
|
|
|
|
<div class="bundle-actions">
|
|
<button id="export-bundle" class="button quiet" type="button" hidden>Export investigation</button>
|
|
<label class="button quiet import-button">
|
|
Import investigation
|
|
<input id="import-bundle" type="file" accept="application/json,.json,.browsec-investigation.json">
|
|
</label>
|
|
</div>
|
|
|
|
<label class="toggle">
|
|
<input id="community-enabled" type="checkbox" checked>
|
|
<span>Village community evidence</span>
|
|
</label>
|
|
|
|
<label for="trust-target">Decision target</label>
|
|
<select id="trust-target">
|
|
<option value="certificate">Exact certificate for this host</option>
|
|
</select>
|
|
|
|
<label for="trust-lifetime">Decision lifetime</label>
|
|
<select id="trust-lifetime">
|
|
<option value="connection">Next connection</option>
|
|
<option value="session" selected>Browser session</option>
|
|
<option value="persistent">Until revoked</option>
|
|
</select>
|
|
|
|
<label class="toggle">
|
|
<input id="include-subdomains" type="checkbox">
|
|
<span>Include subdomains for authority rules</span>
|
|
</label>
|
|
|
|
<p class="simulation-note">
|
|
Live probes are read-only. This page cannot alter browser or system trust.
|
|
</p>
|
|
</aside>
|
|
|
|
<section class="workspace">
|
|
<section id="status" class="status-card" aria-live="polite"></section>
|
|
|
|
<section class="panel identity-panel">
|
|
<div class="section-heading">
|
|
<p class="eyebrow">Connection</p>
|
|
<h2>Identity under examination</h2>
|
|
</div>
|
|
<dl id="identity" class="identity-grid"></dl>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<div class="section-heading">
|
|
<p class="eyebrow">Validation path</p>
|
|
<h2>Where trust succeeds or breaks</h2>
|
|
</div>
|
|
<ol id="chain" class="chain"></ol>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<div class="section-heading">
|
|
<p class="eyebrow">Append-only journal</p>
|
|
<h2>Attributed findings</h2>
|
|
</div>
|
|
<div id="journal" class="journal"></div>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<div class="section-heading">
|
|
<p class="eyebrow">Policy overlay</p>
|
|
<h2>Effective and consumed local rules</h2>
|
|
</div>
|
|
<div id="rules" class="journal"></div>
|
|
</section>
|
|
</section>
|
|
</main>
|
|
|
|
<footer class="decision-bar">
|
|
<div>
|
|
<strong>Your local decision</strong>
|
|
<span>Exact host and port · local TrustLab decision</span>
|
|
</div>
|
|
<button id="clear-decision" class="button quiet" hidden>Clear decision</button>
|
|
<button id="reject" class="button reject">Do not trust</button>
|
|
<button id="trust" class="button trust">Trust this connection</button>
|
|
</footer>
|
|
|
|
<script type="module" src="/ui/app.js"></script>
|
|
</body>
|
|
</html>
|