🔧 Enhance Middleware and Admin Features
✅ Updated Middleware Logic: - Enhanced admin route protection with Basic Auth for legacy routes and session-based auth for `/manage` and `/editor`. ✅ Improved Admin Panel Styles: - Added glassmorphism styles for admin components to enhance UI aesthetics. ✅ Refined Rate Limiting: - Adjusted rate limits for admin dashboard requests to allow more generous access. ✅ Introduced Analytics Reset API: - Added a new endpoint for resetting analytics data with rate limiting and admin authentication. 🎯 Overall Improvements: - Strengthened security and user experience for admin functionalities. - Enhanced visual design for better usability. - Streamlined analytics management processes.
This commit is contained in:
@@ -99,23 +99,23 @@ export default function ImportExport() {
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="bg-white dark:bg-gray-800 rounded-lg shadow-md p-6">
|
||||
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-4 flex items-center">
|
||||
<FileText className="w-5 h-5 mr-2" />
|
||||
<div className="admin-glass-card rounded-lg p-6">
|
||||
<h3 className="text-lg font-semibold text-white mb-4 flex items-center">
|
||||
<FileText className="w-5 h-5 mr-2 text-blue-400" />
|
||||
Import & Export
|
||||
</h3>
|
||||
|
||||
<div className="space-y-4">
|
||||
{/* Export Section */}
|
||||
<div className="border border-gray-200 dark:border-gray-700 rounded-lg p-4">
|
||||
<h4 className="font-medium text-gray-900 dark:text-white mb-2">Export Projekte</h4>
|
||||
<p className="text-sm text-gray-600 dark:text-gray-400 mb-3">
|
||||
<div className="admin-glass-light rounded-lg p-4">
|
||||
<h4 className="font-medium text-white mb-2">Export Projekte</h4>
|
||||
<p className="text-sm text-white/70 mb-3">
|
||||
Alle Projekte als JSON-Datei herunterladen
|
||||
</p>
|
||||
<button
|
||||
onClick={handleExport}
|
||||
disabled={isExporting}
|
||||
className="flex items-center px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
className="flex items-center px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 hover:scale-105 transition-all disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
>
|
||||
<Download className="w-4 h-4 mr-2" />
|
||||
{isExporting ? 'Exportiere...' : 'Exportieren'}
|
||||
@@ -123,12 +123,12 @@ export default function ImportExport() {
|
||||
</div>
|
||||
|
||||
{/* Import Section */}
|
||||
<div className="border border-gray-200 dark:border-gray-700 rounded-lg p-4">
|
||||
<h4 className="font-medium text-gray-900 dark:text-white mb-2">Import Projekte</h4>
|
||||
<p className="text-sm text-gray-600 dark:text-gray-400 mb-3">
|
||||
<div className="admin-glass-light rounded-lg p-4">
|
||||
<h4 className="font-medium text-white mb-2">Import Projekte</h4>
|
||||
<p className="text-sm text-white/70 mb-3">
|
||||
JSON-Datei mit Projekten hochladen
|
||||
</p>
|
||||
<label className="flex items-center px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 cursor-pointer">
|
||||
<label className="flex items-center px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 hover:scale-105 transition-all cursor-pointer">
|
||||
<Upload className="w-4 h-4 mr-2" />
|
||||
{isImporting ? 'Importiere...' : 'Datei auswählen'}
|
||||
<input
|
||||
@@ -143,16 +143,16 @@ export default function ImportExport() {
|
||||
|
||||
{/* Import Results */}
|
||||
{importResult && (
|
||||
<div className="border border-gray-200 dark:border-gray-700 rounded-lg p-4">
|
||||
<h4 className="font-medium text-gray-900 dark:text-white mb-2 flex items-center">
|
||||
<div className="admin-glass-light rounded-lg p-4">
|
||||
<h4 className="font-medium text-white mb-2 flex items-center">
|
||||
{importResult.success ? (
|
||||
<CheckCircle className="w-5 h-5 mr-2 text-green-500" />
|
||||
<CheckCircle className="w-5 h-5 mr-2 text-green-400" />
|
||||
) : (
|
||||
<AlertCircle className="w-5 h-5 mr-2 text-red-500" />
|
||||
<AlertCircle className="w-5 h-5 mr-2 text-red-400" />
|
||||
)}
|
||||
Import Ergebnis
|
||||
</h4>
|
||||
<div className="text-sm text-gray-600 dark:text-gray-400 space-y-1">
|
||||
<div className="text-sm text-white/70 space-y-1">
|
||||
<p><strong>Importiert:</strong> {importResult.results.imported}</p>
|
||||
<p><strong>Übersprungen:</strong> {importResult.results.skipped}</p>
|
||||
{importResult.results.errors.length > 0 && (
|
||||
@@ -160,7 +160,7 @@ export default function ImportExport() {
|
||||
<p><strong>Fehler:</strong></p>
|
||||
<ul className="list-disc list-inside ml-4">
|
||||
{importResult.results.errors.map((error, index) => (
|
||||
<li key={index} className="text-red-500">{error}</li>
|
||||
<li key={index} className="text-red-400">{error}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user