Files
gooseek/backend/webui/src/app/(auth)/register/page.tsx
home a0e3748dde feat: auth service + security audit fixes + cleanup legacy services
Major changes:
- Add auth-svc: JWT auth, register/login/refresh, password reset
- Add auth UI: modals, pages (/login, /register, /forgot-password)
- Add usage tracking (usage_metrics table, daily limits)
- Add tiered rate limiting (free/pro/business)
- Add LLM usage limits per tier

Security fixes:
- All repos now require userID for Update/Delete operations
- JWT middleware in chat-svc, llm-svc, agent-svc, discover-svc
- ErrNotFound/ErrForbidden errors for proper access control

Cleanup:
- Remove legacy TypeScript services/ directory
- Remove computer-svc (to be reimplemented)
- Remove old deploy/docker configs

New files:
- backend/cmd/auth-svc/main.go
- backend/internal/auth/{types,repository}.go
- backend/internal/usage/{types,repository}.go
- backend/pkg/middleware/{llm_limits,ratelimit_tiered}.go
- backend/webui/src/components/auth/*
- backend/webui/src/app/(auth)/*

Made-with: Cursor
2026-02-28 01:33:49 +03:00

59 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use client';
import { useEffect } from 'react';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import { RegisterForm } from '@/components/auth';
import { useAuth } from '@/lib/contexts/AuthContext';
export default function RegisterPage() {
const router = useRouter();
const { isAuthenticated, isLoading } = useAuth();
useEffect(() => {
if (!isLoading && isAuthenticated) {
router.push('/');
}
}, [isAuthenticated, isLoading, router]);
if (isLoading) {
return (
<div className="min-h-screen bg-base flex items-center justify-center">
<div className="w-8 h-8 border-2 border-accent border-t-transparent rounded-full animate-spin" />
</div>
);
}
return (
<div className="min-h-screen bg-base flex flex-col">
<header className="p-4">
<Link href="/" className="inline-flex items-center gap-2 text-lg font-semibold text-primary">
<div className="w-8 h-8 rounded-lg bg-accent/20 flex items-center justify-center">
<span className="text-accent font-bold">G</span>
</div>
GooSeek
</Link>
</header>
<main className="flex-1 flex items-center justify-center px-4 py-8">
<div className="w-full max-w-md">
<div className="bg-elevated border border-border rounded-2xl p-8 shadow-xl">
<RegisterForm
showTitle
onSuccess={() => router.push('/')}
onSwitchToLogin={() => router.push('/login')}
/>
</div>
<p className="text-center text-sm text-muted mt-6">
Уже есть аккаунт?{' '}
<Link href="/login" className="text-accent hover:text-accent-hover font-medium">
Войти
</Link>
</p>
</div>
</main>
</div>
);
}