Files
michaelschiemer/tests/debug/test-qrcodes/test-qrcodes.html
Michael Schiemer 95147ff23e refactor(deployment): Remove WireGuard VPN dependency and restore public service access
Remove WireGuard integration from production deployment to simplify infrastructure:
- Remove docker-compose-direct-access.yml (VPN-bound services)
- Remove VPN-only middlewares from Grafana, Prometheus, Portainer
- Remove WireGuard middleware definitions from Traefik
- Remove WireGuard IPs (10.8.0.0/24) from Traefik forwarded headers

All monitoring services now publicly accessible via subdomains:
- grafana.michaelschiemer.de (with Grafana native auth)
- prometheus.michaelschiemer.de (with Basic Auth)
- portainer.michaelschiemer.de (with Portainer native auth)

All services use Let's Encrypt SSL certificates via Traefik.
2025-11-05 12:48:25 +01:00

271 lines
8.8 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test QR Codes</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 20px;
min-height: 100vh;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: white;
border-radius: 20px;
padding: 40px;
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
}
h1 {
color: #333;
margin-bottom: 10px;
font-size: 2.5em;
}
.subtitle {
color: #666;
margin-bottom: 30px;
font-size: 1.1em;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
margin-top: 30px;
}
.card {
background: #f8f9fa;
border-radius: 15px;
padding: 25px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.2s, box-shadow 0.2s;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 12px rgba(0,0,0,0.15);
}
.card h2 {
color: #333;
font-size: 1.2em;
margin-bottom: 15px;
border-bottom: 2px solid #667eea;
padding-bottom: 10px;
}
.qr-container {
background: white;
padding: 20px;
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 15px;
min-height: 250px;
}
.qr-container img {
max-width: 100%;
height: auto;
display: block;
}
.data {
background: #e9ecef;
padding: 12px;
border-radius: 8px;
font-family: 'Courier New', monospace;
font-size: 0.9em;
color: #495057;
margin-bottom: 10px;
word-break: break-all;
}
.info {
font-size: 0.85em;
color: #6c757d;
margin-top: 10px;
}
.status {
display: inline-block;
padding: 5px 10px;
border-radius: 5px;
font-size: 0.8em;
font-weight: bold;
margin-top: 10px;
}
.status.valid {
background: #d4edda;
color: #155724;
}
.instructions {
background: #e7f3ff;
border-left: 4px solid #2196F3;
padding: 20px;
border-radius: 5px;
margin-bottom: 30px;
}
.instructions h3 {
color: #1976D2;
margin-bottom: 10px;
}
.instructions ul {
margin-left: 20px;
color: #555;
}
.instructions li {
margin: 5px 0;
}
</style>
</head>
<body>
<div class="container">
<h1>📱 Test QR Codes</h1>
<p class="subtitle">Generiert mit dem Framework - Scanne mit deinem Smartphone!</p>
<div class="instructions">
<h3>📋 Anleitung</h3>
<ul>
<li>Öffne die Kamera-App auf deinem Smartphone</li>
<li>Richte die Kamera auf einen QR-Code</li>
<li>Der QR-Code sollte automatisch erkannt werden</li>
<li>Alternativ: Verwende eine QR-Scanner-App</li>
</ul>
</div>
<div class="grid">
<div class="card">
<h2>HELLO WORLD</h2>
<div class="qr-container">
<img src="hello-world-v1-m.svg" alt="QR Code: HELLO WORLD">
</div>
<div class="data">HELLO WORLD</div>
<div class="info">Version 1, Level M, Byte Mode</div>
<span class="status valid">✓ Standard-Test</span>
</div>
<div class="card">
<h2>Einzelnes Zeichen</h2>
<div class="qr-container">
<img src="single-char-v1-m.svg" alt="QR Code: A">
</div>
<div class="data">A</div>
<div class="info">Version 1, Level M, Byte Mode</div>
<span class="status valid">✓ Minimal-Test</span>
</div>
<div class="card">
<h2>Kurzer Text</h2>
<div class="qr-container">
<img src="hello-v1-m.svg" alt="QR Code: HELLO">
</div>
<div class="data">HELLO</div>
<div class="info">Version 1, Level M, Byte Mode</div>
<span class="status valid">✓ Kurzer Text</span>
</div>
<div class="card">
<h2>URL</h2>
<div class="qr-container">
<img src="url-v1-m.svg" alt="QR Code: URL">
</div>
<div class="data">https://example.com</div>
<div class="info">Version 1, Level M, Byte Mode</div>
<span class="status valid">✓ URL-Test</span>
</div>
<div class="card">
<h2>Standard-Text</h2>
<div class="qr-container">
<img src="test-text-v1-m.svg" alt="QR Code: Test QR Code">
</div>
<div class="data">Test QR Code</div>
<div class="info">Version 1, Level M, Byte Mode</div>
<span class="status valid">✓ Standard-Text</span>
</div>
<div class="card">
<h2>Langer Text</h2>
<div class="qr-container">
<img src="long-text-v2-m.svg" alt="QR Code: Long Text">
</div>
<div class="data">123456789012345678901234567890</div>
<div class="info">Version 2, Level M, Byte Mode</div>
<span class="status valid">✓ Version 2 Test</span>
</div>
<div class="card">
<h2>QR Code Test</h2>
<div class="qr-container">
<img src="qr-test-v1-m.svg" alt="QR Code: QR Code Test">
</div>
<div class="data">QR Code Test</div>
<div class="info">Version 1, Level M, Byte Mode</div>
<span class="status valid">✓ Test-Text</span>
</div>
<div class="card">
<h2>Zahlen</h2>
<div class="qr-container">
<img src="numbers-v1-m.svg" alt="QR Code: Numbers">
</div>
<div class="data">12345</div>
<div class="info">Version 1, Level M, Byte Mode</div>
<span class="status valid">✓ Zahlen-Test</span>
</div>
<div class="card">
<h2>Text mit Sonderzeichen</h2>
<div class="qr-container">
<img src="hello-exclamation-v1-m.svg" alt="QR Code: Hello!">
</div>
<div class="data">Hello!</div>
<div class="info">Version 1, Level M, Byte Mode</div>
<span class="status valid">✓ Sonderzeichen</span>
</div>
<div class="card">
<h2>E-Mail</h2>
<div class="qr-container">
<img src="email-v1-m.svg" alt="QR Code: Email">
</div>
<div class="data">test@example.com</div>
<div class="info">Version 1, Level M, Byte Mode</div>
<span class="status valid">✓ E-Mail-Test</span>
</div>
</div>
<div style="margin-top: 40px; padding: 20px; background: #f8f9fa; border-radius: 10px;">
<h3 style="color: #333; margin-bottom: 10px;"> Technische Informationen</h3>
<p style="color: #666; line-height: 1.6;">
Alle QR-Codes wurden mit der Framework-Implementierung generiert.
Die Reed-Solomon-Fehlerkorrektur ist korrekt implementiert und validiert.
Die QR-Codes sollten von allen Standard-Scannern lesbar sein.
</p>
</div>
</div>
</body>
</html>