OpenVuln / src /features /submit /SubmitPage.tsx
zRzRzRzRzRzRzR
feat: sync latest OpenVuln frontend
d22337b
Raw
History Blame Contribute Delete
3.23 kB
import { Link } from "react-router-dom";
import { ArrowLeft, Github } from "lucide-react";
import { RepoSubmitForm } from "../../components/RepoSubmitForm";
import { loginUrl, navigateToLogin } from "../../shared/api/client";
import { useMe } from "../../features/auth/useAuth";
export function SubmitPage() {
const meQ = useMe();
const authed = meQ.data?.authenticated === true;
return (
<div className="mx-auto max-w-6xl px-6 py-8">
<Link
to="/"
className="inline-flex items-center gap-1.5 text-[13px] text-ink-secondary hover:text-ink"
>
<ArrowLeft size={14} /> Projects
</Link>
<div className="max-w-xl">
<h1 className="mt-4 font-display text-xl font-bold text-ink">Submit a project</h1>
<p className="mt-2 text-sm text-ink-secondary">
Paste a public GitHub repository URL. We scan the default branch and publish aggregate
statistics. Submitting requires a GitHub account with <strong className="font-medium text-ink">admin or maintain</strong> permission
on the repository.
</p>
<div className="mt-8">
{meQ.isLoading ? (
<div className="h-12 animate-pulse rounded-lg bg-surface-sunken" aria-label="Loading" />
) : authed ? (
<RepoSubmitForm />
) : (
<div className="rounded-xl border border-line bg-surface-sunken/50 p-6 text-center">
<p className="font-display text-base font-semibold text-ink">
Sign in to submit your repository
</p>
<p className="mx-auto mt-2 max-w-md text-sm leading-relaxed text-ink-secondary">
OpenVuln scans are available to repository owners. We verify your GitHub role on
every submission — only maintainers and admins can start a scan.
</p>
<a
href={loginUrl()}
onClick={(e) => {
if (window.top && window.top !== window.self) {
e.preventDefault();
navigateToLogin();
window.dispatchEvent(new Event("ov-oauth-popup-opened"));
}
}}
className="mt-5 inline-flex h-10 items-center gap-2 rounded-md bg-ink px-4 text-sm font-medium text-surface transition-colors hover:bg-white focus-ring"
>
<Github size={16} />
Sign in with GitHub
</a>
</div>
)}
</div>
<section className="mt-12 border-t border-line pt-8">
<h2 className="font-display text-base font-semibold text-ink">What happens next</h2>
<ol className="mt-4 space-y-3 text-sm text-ink-secondary">
{[
"We verify your GitHub role on the repository (admin or maintain)",
"It enters the scan queue",
"VulnHunter scans the default branch",
"You review full findings and choose what to disclose publicly",
].map((step, i) => (
<li key={step} className="flex gap-3">
<span className="font-mono text-ink-tertiary">{i + 1}</span>
<span>{step}</span>
</li>
))}
</ol>
</section>
</div>
</div>
);
}