🔧 Update Admin Dashboard and Authentication Flow
✅ Updated Admin Dashboard URL: - Changed the Admin Dashboard access path from `/admin` to `/manage` in multiple files for consistency. ✅ Enhanced Middleware Authentication: - Updated middleware to protect new admin routes including `/manage` and `/dashboard`. ✅ Implemented CSRF Protection: - Added CSRF token generation and validation for login and session validation routes. ✅ Introduced Rate Limiting: - Added rate limiting for admin routes and CSRF token requests to enhance security. ✅ Refactored Admin Page: - Created a new admin management page with improved authentication handling and user feedback. 🎯 Overall Improvements: - Strengthened security measures for admin access. - Improved user experience with clearer navigation and feedback. - Streamlined authentication processes for better performance.
This commit is contained in:
@@ -67,15 +67,22 @@ interface PerformanceData {
|
||||
topInteractions: Record<string, number>;
|
||||
}
|
||||
|
||||
export function AnalyticsDashboard() {
|
||||
interface AnalyticsDashboardProps {
|
||||
isAuthenticated?: boolean;
|
||||
}
|
||||
|
||||
export function AnalyticsDashboard({ isAuthenticated = true }: AnalyticsDashboardProps) {
|
||||
const [analyticsData, setAnalyticsData] = useState<AnalyticsData | null>(null);
|
||||
const [performanceData, setPerformanceData] = useState<PerformanceData | null>(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
fetchAnalyticsData();
|
||||
}, []);
|
||||
// Only fetch data if authenticated
|
||||
if (isAuthenticated) {
|
||||
fetchAnalyticsData();
|
||||
}
|
||||
}, [isAuthenticated]);
|
||||
|
||||
const fetchAnalyticsData = async () => {
|
||||
try {
|
||||
|
||||
@@ -60,10 +60,14 @@ interface Project {
|
||||
};
|
||||
}
|
||||
|
||||
const ModernAdminDashboard: React.FC = () => {
|
||||
interface ModernAdminDashboardProps {
|
||||
isAuthenticated?: boolean;
|
||||
}
|
||||
|
||||
const ModernAdminDashboard: React.FC<ModernAdminDashboardProps> = ({ isAuthenticated = true }) => {
|
||||
const [activeTab, setActiveTab] = useState<'overview' | 'projects' | 'emails' | 'analytics' | 'settings'>('overview');
|
||||
const [projects, setProjects] = useState<Project[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
// Mock stats for overview
|
||||
const stats = {
|
||||
@@ -75,13 +79,20 @@ const ModernAdminDashboard: React.FC = () => {
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
loadProjects();
|
||||
}, []);
|
||||
// Only load data if authenticated
|
||||
if (isAuthenticated) {
|
||||
loadProjects();
|
||||
}
|
||||
}, [isAuthenticated]);
|
||||
|
||||
const loadProjects = async () => {
|
||||
try {
|
||||
setIsLoading(true);
|
||||
const response = await fetch('/api/projects');
|
||||
const response = await fetch('/api/projects', {
|
||||
headers: {
|
||||
'x-admin-request': 'true'
|
||||
}
|
||||
});
|
||||
const data = await response.json();
|
||||
setProjects(data.projects || []);
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user