Files
skybridge/kms/kms-frontend/src/contexts/AuthContext.tsx
2025-08-26 19:16:41 -04:00

96 lines
2.5 KiB
TypeScript

import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react';
import { message } from 'antd';
import { apiService } from '../services/apiService';
interface User {
email: string;
permissions: string[];
}
interface AuthContextType {
user: User | null;
login: (email: string) => Promise<boolean>;
logout: () => void;
loading: boolean;
}
const AuthContext = createContext<AuthContextType | undefined>(undefined);
export const useAuth = () => {
const context = useContext(AuthContext);
if (context === undefined) {
throw new Error('useAuth must be used within an AuthProvider');
}
return context;
};
interface AuthProviderProps {
children: ReactNode;
}
export const AuthProvider: React.FC<AuthProviderProps> = ({ children }) => {
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
// Check if user is already logged in (from localStorage)
const savedUser = localStorage.getItem('kms_user');
if (savedUser) {
try {
const parsedUser = JSON.parse(savedUser);
setUser(parsedUser);
} catch (error) {
console.error('Error parsing saved user:', error);
localStorage.removeItem('kms_user');
}
}
setLoading(false);
}, []);
const login = async (email: string): Promise<boolean> => {
try {
setLoading(true);
// Test API connectivity with health check
await apiService.healthCheck();
// For demo purposes, we'll simulate login with the provided email
// In a real implementation, this would involve proper authentication
const userData: User = {
email,
permissions: ['app.read', 'app.write', 'token.read', 'token.create', 'token.revoke']
};
setUser(userData);
localStorage.setItem('kms_user', JSON.stringify(userData));
message.success('Login successful!');
return true;
} catch (error) {
console.error('Login error:', error);
message.error('Login failed. Please check your connection and try again.');
return false;
} finally {
setLoading(false);
}
};
const logout = () => {
setUser(null);
localStorage.removeItem('kms_user');
message.success('Logged out successfully');
};
const value: AuthContextType = {
user,
login,
logout,
loading,
};
return (
<AuthContext.Provider value={value}>
{children}
</AuthContext.Provider>
);
};