mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-19 08:28:10 +02:00
74 lines
2 KiB
TypeScript
74 lines
2 KiB
TypeScript
'use client';
|
|
|
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|
|
|
import logger from '@/lib/logger';
|
|
|
|
import type { AuthUser, LocalUser } from '../types';
|
|
import { AuthContext } from './AuthProvider';
|
|
|
|
export function LocalProviderWrapper({ children }: { children: React.ReactNode }) {
|
|
const [user, setUser] = useState<LocalUser | null>(null);
|
|
const [loading, setLoading] = useState(true);
|
|
const tokenRef = useRef<string | null>(null);
|
|
|
|
useEffect(() => {
|
|
if (typeof window === 'undefined') return;
|
|
|
|
const initializeAuth = async () => {
|
|
try {
|
|
const response = await fetch('/api/auth/oss');
|
|
if (response.ok) {
|
|
const data = await response.json();
|
|
tokenRef.current = data.token;
|
|
setUser(data.user);
|
|
logger.info('OSS auth initialized', { user: data.user });
|
|
} else {
|
|
logger.error('Failed to initialize OSS auth');
|
|
}
|
|
} catch (error) {
|
|
logger.error('Error initializing OSS auth', error);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
initializeAuth();
|
|
}, []);
|
|
|
|
const getAccessToken = React.useCallback(async () => {
|
|
if (typeof window === 'undefined') {
|
|
return 'ssr-placeholder-token';
|
|
}
|
|
if (!tokenRef.current) {
|
|
logger.warn('No OSS token available after initialization');
|
|
return '';
|
|
}
|
|
return tokenRef.current;
|
|
}, []);
|
|
|
|
const redirectToLogin = React.useCallback(() => {
|
|
logger.info('Login redirect not needed in local mode');
|
|
}, []);
|
|
|
|
const logout = React.useCallback(async () => {
|
|
setUser(null);
|
|
logger.info('Logout requested in OSS mode - server cookies need to be cleared');
|
|
}, []);
|
|
|
|
const contextValue = useMemo(() => ({
|
|
user: user as AuthUser,
|
|
isAuthenticated: !loading,
|
|
loading,
|
|
getAccessToken,
|
|
redirectToLogin,
|
|
logout,
|
|
provider: 'local' as const,
|
|
}), [user, loading, getAccessToken, redirectToLogin, logout]);
|
|
|
|
return (
|
|
<AuthContext.Provider value={contextValue}>
|
|
{children}
|
|
</AuthContext.Provider>
|
|
);
|
|
}
|