feat: secure KYC storage, Google OAuth, terms gating

This commit is contained in:
arifal
2026-04-28 23:10:21 +07:00
parent 58da4608ac
commit 05d0929f7a
41 changed files with 3087 additions and 262 deletions
+9
View File
@@ -5,6 +5,7 @@ import { signIn } from "next-auth/react";
import { useRouter, useSearchParams } from "next/navigation";
import Link from "next/link";
import Image from "next/image";
import { GoogleSignInButton } from "@/components/shared/google-sign-in-button";
function safeInternalPath(raw: string | null): string {
if (!raw || !raw.startsWith("/") || raw.startsWith("//")) return "/";
@@ -84,6 +85,14 @@ function LoginForm() {
</div>
)}
<GoogleSignInButton callbackUrl={safeInternalPath(searchParams.get("callbackUrl"))} />
<div className="my-4 flex items-center gap-3 text-xs text-neutral-400">
<span className="h-px flex-1 bg-neutral-200" />
<span>atau</span>
<span className="h-px flex-1 bg-neutral-200" />
</div>
<form onSubmit={handleSubmit} className="space-y-4">
<div>
<label htmlFor="email" className="mb-1.5 block text-sm font-semibold text-neutral-700">