auth-yes/ui/components/UnregisteredAppPage.tsx
google-labs-jules[bot] 2ac6252bff feat(auth-api): implement Tier 1 Traefik Ingress Control & Bypass Matrix
- Add idempotent migrations for `is_public`, `bypass_paths`, and `allowed_cidrs` in `server/db.ts`.
- Update `AppRecord` and `getAppByHost` in `server/auth-session.ts` to cache bypass rules in Valkey.
- Implement native Deno, fast-path prefix (`isPathBypassed`) and CIDR matchers (`isIpAllowed`).
- Update `GET /api/forward-auth` to evaluate dynamic rules and properly return 302/403 for unregistered domains.
- Create `ui/components/UnregisteredAppPage.tsx` SSR view for browser fallbacks.
- Update `AdminAppsPage.tsx` to handle the new ingress settings visually and post to `/api/admin/apps`.
- Add `POST /api/guests/sandbox` to generate ephemeral Valkey guest sessions.
- Update `POST /api/register/verify` to detect `upgrade_session` and promote guests to full users in-flight.
- Add `docs/TIER1_INGRESS_SPEC.md`.
- Ensure tests run cleanly and add comprehensive unit test cases for the bypass matrix.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-24 22:08:43 +00:00

50 lines
1.6 KiB
TypeScript

import { Layout } from "./Layout.tsx";
export const UnregisteredAppPage = ({ host }: { host: string }) => {
return (
<Layout title="Application Not Registered">
<div style={{ textAlign: "center", padding: "2rem" }}>
<h1 style={{ color: "#dc3545", marginBottom: "1rem" }}>
Application Not Registered
</h1>
<p style={{ fontSize: "1.1rem", marginBottom: "1.5rem" }}>
The domain <strong>{host}</strong>{" "}
is not registered in the Auth-Yes Identity Catalog.
</p>
<p style={{ color: "#6c757d", marginBottom: "2rem" }}>
Access to unregistered domains is blocked by default (Default-Deny) to
protect against unauthorized ingress mapping.
</p>
<div style={{ display: "flex", justifyContent: "center", gap: "1rem" }}>
<a
href="/admin/apps"
class="btn-action btn-success"
style={{
padding: "0.75rem 1.5rem",
textDecoration: "none",
color: "white",
backgroundColor: "#198754",
borderRadius: "4px",
}}
>
Register Application in IAM Console
</a>
<a
href="/dashboard"
class="btn-action"
style={{
padding: "0.75rem 1.5rem",
textDecoration: "none",
color: "#333",
backgroundColor: "#e9ecef",
borderRadius: "4px",
}}
>
Return to Dashboard
</a>
</div>
</div>
</Layout>
);
};