2025-08-07 12:28:41 +02:00
|
|
|
export default defineEventHandler(async (event) => {
|
|
|
|
|
console.log('📊 Admin stats requested at:', new Date().toISOString());
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// Check if user is admin (middleware should handle this, but double-check)
|
|
|
|
|
const sessionManager = createSessionManager();
|
|
|
|
|
const cookieHeader = getHeader(event, 'cookie');
|
|
|
|
|
const session = sessionManager.getSession(cookieHeader);
|
|
|
|
|
|
|
|
|
|
if (!session || session.user.tier !== 'admin') {
|
|
|
|
|
console.warn('🚨 Unauthorized admin stats access attempt');
|
|
|
|
|
throw createError({
|
|
|
|
|
statusCode: 403,
|
|
|
|
|
statusMessage: 'Admin access required'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
console.log('✅ Admin access verified for user:', session.user.email);
|
|
|
|
|
|
2025-08-07 15:46:17 +02:00
|
|
|
// For now, return improved mock data - TODO: integrate with real data sources
|
2025-08-07 12:28:41 +02:00
|
|
|
const stats = {
|
2025-08-07 15:46:17 +02:00
|
|
|
totalUsers: 156, // TODO: Get from Keycloak API
|
|
|
|
|
activeUsers: 45, // TODO: Get from session store
|
|
|
|
|
totalSessions: 67, // TODO: Get from session store
|
2025-08-07 12:28:41 +02:00
|
|
|
systemHealth: 'healthy',
|
|
|
|
|
lastBackup: new Date().toISOString(),
|
|
|
|
|
diskUsage: '45%',
|
|
|
|
|
memoryUsage: '62%',
|
|
|
|
|
recentActivity: [
|
|
|
|
|
{
|
|
|
|
|
action: 'User login',
|
|
|
|
|
user: 'john@example.com',
|
|
|
|
|
timestamp: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(),
|
|
|
|
|
type: 'info'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
action: 'Password reset',
|
|
|
|
|
user: 'jane@example.com',
|
|
|
|
|
timestamp: new Date(Date.now() - 4 * 60 * 60 * 1000).toISOString(),
|
|
|
|
|
type: 'warning'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
action: 'User created',
|
|
|
|
|
user: 'admin@monacousa.org',
|
|
|
|
|
timestamp: new Date(Date.now() - 6 * 60 * 60 * 1000).toISOString(),
|
|
|
|
|
type: 'success'
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
systemMetrics: {
|
|
|
|
|
cpu: 45,
|
|
|
|
|
memory: 62,
|
|
|
|
|
disk: 38,
|
|
|
|
|
uptime: '5d 12h 30m'
|
|
|
|
|
},
|
|
|
|
|
securityAlerts: [
|
|
|
|
|
{
|
|
|
|
|
id: 1,
|
|
|
|
|
title: 'Failed Login Attempts',
|
|
|
|
|
description: '3 failed login attempts detected',
|
|
|
|
|
severity: 'medium',
|
|
|
|
|
timestamp: new Date(Date.now() - 1 * 60 * 60 * 1000).toISOString()
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 2,
|
|
|
|
|
title: 'System Update Available',
|
|
|
|
|
description: 'Security update available for Keycloak',
|
|
|
|
|
severity: 'low',
|
|
|
|
|
timestamp: new Date(Date.now() - 12 * 60 * 60 * 1000).toISOString()
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
console.log('✅ Admin stats retrieved successfully');
|
|
|
|
|
return stats;
|
|
|
|
|
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
console.error('❌ Admin stats error:', error);
|
|
|
|
|
|
|
|
|
|
if (error.statusCode) {
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
throw createError({
|
|
|
|
|
statusCode: 500,
|
|
|
|
|
statusMessage: 'Failed to retrieve system statistics'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|