Files
altdock/app/page.tsx
T
amania-jailbreak f9ce4b218e auth: SSOログイン後の画面遷移とユーザー表示を修正
- コールバック成功時のリダイレクト先をWEB_ORIGINルートから
  /dashboardに変更(ランディングで止まらないように)
- ルートページでログイン済みならダッシュボードへ自動遷移
- サイドバーのユーザーカードをOIDC identityの表示名・メールに変更し、
  未ログイン時のみSSOログインリンクを表示
- demoヘッダ(x-demo-user)はdemoモード時のみ送信
2026-08-05 16:07:10 +09:00

68 lines
4.5 KiB
TypeScript

"use client";
import { useEffect } from "react";
import Link from "next/link";
import { useRouter } from "next/navigation";
import { ArrowRight, Boxes, FileArchive, Gauge, KeyRound, ShieldCheck, UploadCloud } from "lucide-react";
import { AUTH_MODE, API_BASE } from "@/app/lib/dashboard";
export default function Home() {
const router = useRouter();
// SSOモードでログイン済みなら、ランディングを挟まずダッシュボードへ向かう。
useEffect(() => {
if (AUTH_MODE !== "oidc") return;
let cancelled = false;
fetch(`${API_BASE}/api/v1/me`, { credentials: "include" })
.then((response) => { if (response.ok && !cancelled) router.replace("/dashboard"); })
.catch(() => {});
return () => { cancelled = true; };
}, [router]);
return <main className="landing">
<header className="landing-header">
<Link className="landing-brand" href="/"><span className="admin-brand-mark">A</span><span>AltDock</span><span className="landing-beta">BETA</span></Link>
<nav className="landing-nav">
<a href="https://faq.altstore.io/developers/distribute-with-altstore-pal" target="_blank" rel="noreferrer">PALドキュメント</a>
<a href="https://developer.apple.com/documentation/marketplacekit/ingesting-an-alternative-distribution-package" target="_blank" rel="noreferrer">ADP仕様</a>
{AUTH_MODE === "oidc" ? <a className="landing-signin" href={`${API_BASE}/auth/login`}>SSOでログイン</a> : <Link className="landing-signin" href="/dashboard">ダッシュボードを開く <ArrowRight size={14} /></Link>}
</nav>
</header>
<section className="landing-hero">
<div className="landing-hero-copy">
<div className="landing-eyebrow">ALTSTORE PAL · ADP HOSTING</div>
<h1>Notarization済みのADPを<br />そのままPALへ届ける</h1>
<p>Appleの検証チェーンを壊さずADP ZIPをアップロードするだけでAltStore PAL互換のSourceを公開できるホスティング基盤ですManifestとsignatureは再シリアライズせず、元のバイト列を保持します。</p>
<div className="landing-hero-actions">
<Link className="ui-button ui-button-primary" href="/dashboard">ダッシュボードを開く <ArrowRight size={15} /></Link>
<a className="ui-button ui-button-outline" href="https://faq.altstore.io/developers/distribute-with-altstore-pal" target="_blank" rel="noreferrer">配布要件を見る</a>
</div>
{AUTH_MODE === "demo" && <div className="landing-hero-meta"><Gauge size={14} />Demo mode で起動中 · API <code>{API_BASE}</code></div>}
</div>
<aside className="landing-hero-card" aria-hidden="true">
<div className="landing-flow-step"><span className="landing-flow-num">1</span><span><UploadCloud size={16} />ADP ZIPをアップロード</span></div>
<div className="landing-flow-arrow" />
<div className="landing-flow-step"><span className="landing-flow-num">2</span><span><ShieldCheck size={16} />Manifest・署名を検証</span></div>
<div className="landing-flow-arrow" />
<div className="landing-flow-step done"><span className="landing-flow-num">3</span><span><Boxes size={16} />PAL Sourceを公開</span></div>
</aside>
</section>
<section className="landing-features">
<article className="landing-feature"><FileArchive size={18} /><h2>元のパッケージを保持</h2><p>ADPの階層・ハッシュ・manifest.jsonsignatureを一切書き換えませんAppleの検証チェーンがそのまま通ります</p></article>
<article className="landing-feature"><ShieldCheck size={18} /><h2>検証を自動化</h2><p>パストラバーサル、シンボリックリンク、ZIP爆弾、欠落・余分なファイルをWorkerで検査し、問題があれば拒否します。</p></article>
<article className="landing-feature"><KeyRound size={18} /><h2>Workspace単位の認可</h2><p>汎用OIDC SSOでユーザーを識別しWorkspaceごとにSource・アプリ・ファイルを分離します。</p></article>
</section>
<footer className="landing-footer">
<span>AltDock · AltStore PAL向け ADP ホスティング</span>
<div className="landing-footer-links">
<Link href="/dashboard">ダッシュボード</Link>
<a href="https://faq.altstore.io/developers/make-a-source" target="_blank" rel="noreferrer">Source仕様</a>
<a href={`${API_BASE}/healthz`} target="_blank" rel="noreferrer">APIステータス</a>
</div>
</footer>
</main>;
}