diff --git a/backend/app/config/settings.py b/backend/app/config/settings.py index 82e79dd6..a5bd6205 100644 --- a/backend/app/config/settings.py +++ b/backend/app/config/settings.py @@ -36,7 +36,7 @@ SESSION_LIFETIME = timedelta(days=7) SSL_ENABLED = True SSL_CERT_PATH = "instance/ssl/myp.crt" SSL_KEY_PATH = "instance/ssl/myp.key" -SSL_HOSTNAME = "raspberrypi" +SSL_HOSTNAME = "localhost" # Scheduler-Konfiguration SCHEDULER_INTERVAL = 60 # Sekunden @@ -130,7 +130,7 @@ def create_simple_ssl_cert(): # Generiere privaten Schlüssel private_key = rsa.generate_private_key( public_exponent=65537, - key_size=2048, + key_size=4096, # Stärkere Schlüsselgröße ) # Schreibe privaten Schlüssel @@ -141,9 +141,18 @@ def create_simple_ssl_cert(): encryption_algorithm=NoEncryption() )) - # Erstelle Zertifikat + # Aktuelles Datum und Ablaufdatum berechnen + now = datetime.datetime.now() + valid_until = now + datetime.timedelta(days=3650) # 10 Jahre gültig + + # Erstelle Zertifikat mit erweiterten Attributen subject = issuer = x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, SSL_HOSTNAME), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, "Mercedes-Benz AG"), + x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, "Werk 040 Berlin"), + x509.NameAttribute(NameOID.COUNTRY_NAME, "DE"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, "Berlin"), + x509.NameAttribute(NameOID.LOCALITY_NAME, "Berlin") ]) cert = x509.CertificateBuilder().subject_name( @@ -155,19 +164,43 @@ def create_simple_ssl_cert(): ).serial_number( x509.random_serial_number() ).not_valid_before( - datetime.datetime.utcnow() + now ).not_valid_after( - datetime.datetime.utcnow() + datetime.timedelta(days=365) + valid_until ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(SSL_HOSTNAME)]), + x509.SubjectAlternativeName([ + x509.DNSName(SSL_HOSTNAME), + x509.DNSName("localhost"), + x509.IPAddress(socket.inet_aton("127.0.0.1")) + ]), critical=False, + ).add_extension( + x509.BasicConstraints(ca=True, path_length=None), critical=True + ).add_extension( + x509.KeyUsage( + digital_signature=True, + content_commitment=False, + key_encipherment=True, + data_encipherment=False, + key_agreement=False, + key_cert_sign=True, + crl_sign=True, + encipher_only=False, + decipher_only=False + ), critical=True + ).add_extension( + x509.ExtendedKeyUsage([ + x509.oid.ExtendedKeyUsageOID.SERVER_AUTH, + x509.oid.ExtendedKeyUsageOID.CLIENT_AUTH + ]), critical=False ).sign(private_key, hashes.SHA256()) # Schreibe Zertifikat with open(SSL_CERT_PATH, "wb") as f: f.write(cert.public_bytes(Encoding.PEM)) - print(f"Einfaches selbstsigniertes Zertifikat erstellt: {SSL_CERT_PATH}") + print(f"Verbessertes selbstsigniertes Zertifikat erstellt: {SSL_CERT_PATH}") + print(f"Gültig bis: {valid_until.strftime('%d.%m.%Y')}") except ImportError: print("Konnte keine SSL-Zertifikate erstellen: cryptography-Paket nicht installiert") diff --git a/backend/app/static/css/input.css b/backend/app/static/css/input.css index 79f39829..7aa90e55 100644 --- a/backend/app/static/css/input.css +++ b/backend/app/static/css/input.css @@ -56,6 +56,19 @@ } } +/* Admin Panel spezifische Styles */ +@layer components { + /* Dark Mode Styles für Admin Panel */ + .dark .bg-dark-card { + @apply bg-dark-card transition-colors; + } + + /* Übergangseffekt für alle Komponenten */ + .transition-all-colors { + @apply transition-colors duration-300; + } +} + /* Glassmorphism Flash Messages */ .flash-message { @apply bg-white/70 dark:bg-black/70 backdrop-blur-md border border-gray-200 dark:border-slate-700/50 rounded-xl p-4 relative mb-4 shadow-md; diff --git a/backend/app/tailwind.config.js b/backend/app/tailwind.config.js index 562c33a6..54fbce5f 100644 --- a/backend/app/tailwind.config.js +++ b/backend/app/tailwind.config.js @@ -26,19 +26,19 @@ module.exports = { }, // Dark Mode optimierte Farben - Verbessert 'dark': { - 'bg': '#0f172a', - 'bg-secondary': '#1e293b', + 'bg': '#0f172a', // Dunkler Hintergrund + 'bg-secondary': '#131c2e', // Sekundärer Hintergrund noch dunkler 'surface': '#1e293b', 'surface-hover': '#334155', - 'card': '#1f2937', - 'card-hover': '#374151', + 'card': '#1e293b', // Dunklere Kartenfarbe für besseren Kontrast + 'card-hover': '#334155', // Dunklerer Hover-Zustand 'text': '#f8fafc', 'text-secondary': '#e2e8f0', 'text-muted': '#94a3b8', 'text-disabled': '#64748b', 'border': '#334155', 'border-light': '#475569', - 'hover': '#374151', + 'hover': '#334155', // Dunklerer Hover-Zustand 'focus': '#475569', 'accent': '#4f46e5' },