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.
This commit is contained in:
145
tests/debug/test-qr-code-complete.php
Normal file
145
tests/debug/test-qr-code-complete.php
Normal file
@@ -0,0 +1,145 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
||||
|
||||
use App\Framework\QrCode\QrCodeGenerator;
|
||||
use App\Framework\QrCode\QrCodeRenderer;
|
||||
use App\Framework\QrCode\ValueObjects\ErrorCorrectionLevel;
|
||||
use App\Framework\QrCode\ValueObjects\QrCodeConfig;
|
||||
use App\Framework\QrCode\ValueObjects\QrCodeVersion;
|
||||
use App\Framework\QrCode\ValueObjects\EncodingMode;
|
||||
|
||||
echo "=== Complete QR Code Generation Test ===\n\n";
|
||||
|
||||
$testData = 'HELLO WORLD';
|
||||
$config = new QrCodeConfig(
|
||||
version: QrCodeVersion::fromNumber(1),
|
||||
errorCorrectionLevel: ErrorCorrectionLevel::M,
|
||||
encodingMode: EncodingMode::BYTE
|
||||
);
|
||||
|
||||
echo "Test data: '{$testData}'\n";
|
||||
echo "Version: {$config->version->getVersionNumber()}\n";
|
||||
echo "Error Correction Level: {$config->errorCorrectionLevel->value}\n";
|
||||
echo "Encoding Mode: {$config->encodingMode->value}\n\n";
|
||||
|
||||
// Generate QR code
|
||||
$matrix = QrCodeGenerator::generate($testData, $config);
|
||||
$size = $matrix->getSize();
|
||||
|
||||
echo "✅ QR Code generated successfully\n";
|
||||
echo "Matrix size: {$size}x{$size}\n\n";
|
||||
|
||||
// Validate structure
|
||||
echo "=== Structure Validation ===\n";
|
||||
|
||||
// 1. Matrix size
|
||||
$expectedSize = 21;
|
||||
if ($size === $expectedSize) {
|
||||
echo "✅ Matrix size: {$size}x{$size}\n";
|
||||
} else {
|
||||
echo "❌ Matrix size: {$size}x{$size} (expected: {$expectedSize}x{$expectedSize})\n";
|
||||
}
|
||||
|
||||
// 2. Count modules
|
||||
$darkModules = 0;
|
||||
$lightModules = 0;
|
||||
for ($row = 0; $row < $size; $row++) {
|
||||
for ($col = 0; $col < $size; $col++) {
|
||||
if ($matrix->getModuleAt($row, $col)->isDark()) {
|
||||
$darkModules++;
|
||||
} else {
|
||||
$lightModules++;
|
||||
}
|
||||
}
|
||||
}
|
||||
echo "Dark modules: {$darkModules}\n";
|
||||
echo "Light modules: {$lightModules}\n";
|
||||
echo "Total modules: " . ($darkModules + $lightModules) . " (expected: " . ($size * $size) . ")\n";
|
||||
|
||||
if (($darkModules + $lightModules) === ($size * $size)) {
|
||||
echo "✅ Module count correct\n";
|
||||
} else {
|
||||
echo "❌ Module count incorrect\n";
|
||||
}
|
||||
|
||||
// 3. Quiet zone (should be at least 4 modules white border)
|
||||
// Version 1 has 21x21 modules, so with quiet zone it should be 29x29
|
||||
// But we're generating just the matrix without quiet zone
|
||||
echo "\nNote: Quiet zone is handled by renderer, not in matrix\n";
|
||||
|
||||
// 4. Render to SVG
|
||||
echo "\n=== SVG Rendering ===\n";
|
||||
$renderer = new QrCodeRenderer();
|
||||
$svg = $renderer->renderSvg($matrix);
|
||||
|
||||
$svgLength = strlen($svg);
|
||||
echo "SVG generated: {$svgLength} bytes\n";
|
||||
|
||||
if ($svgLength > 1000) {
|
||||
echo "✅ SVG size reasonable\n";
|
||||
} else {
|
||||
echo "⚠️ SVG size seems small\n";
|
||||
}
|
||||
|
||||
// Check for SVG structure
|
||||
if (strpos($svg, '<svg') !== false && strpos($svg, '</svg>') !== false) {
|
||||
echo "✅ SVG structure valid\n";
|
||||
} else {
|
||||
echo "❌ SVG structure invalid\n";
|
||||
}
|
||||
|
||||
// Count rectangles (should be many for a QR code)
|
||||
$rectCount = substr_count($svg, '<rect');
|
||||
echo "Rectangles in SVG: {$rectCount}\n";
|
||||
|
||||
if ($rectCount > 100) {
|
||||
echo "✅ Reasonable number of rectangles\n";
|
||||
} else {
|
||||
echo "⚠️ Few rectangles (might be incorrect)\n";
|
||||
}
|
||||
|
||||
// 5. Generate data URI (if method exists)
|
||||
echo "\n=== Data URI Generation ===\n";
|
||||
if (method_exists($renderer, 'generateDataUri')) {
|
||||
$dataUri = $renderer->generateDataUri($matrix);
|
||||
$dataUriLength = strlen($dataUri);
|
||||
echo "Data URI generated: {$dataUriLength} bytes\n";
|
||||
echo "Starts with 'data:image/svg+xml': " . (strpos($dataUri, 'data:image/svg+xml') === 0 ? "✅" : "❌") . "\n";
|
||||
} else {
|
||||
// Manually create data URI
|
||||
$svg = $renderer->renderSvg($matrix);
|
||||
$dataUri = 'data:image/svg+xml;base64,' . base64_encode($svg);
|
||||
echo "Data URI generated manually: " . strlen($dataUri) . " bytes\n";
|
||||
echo "Starts with 'data:image/svg+xml': " . (strpos($dataUri, 'data:image/svg+xml') === 0 ? "✅" : "❌") . "\n";
|
||||
}
|
||||
|
||||
// 6. Test with different data
|
||||
echo "\n=== Test with Different Data ===\n";
|
||||
$testCases = [
|
||||
'A',
|
||||
'HELLO',
|
||||
'TEST123',
|
||||
];
|
||||
|
||||
foreach ($testCases as $data) {
|
||||
$testMatrix = QrCodeGenerator::generate($data, $config);
|
||||
$testSize = $testMatrix->getSize();
|
||||
|
||||
if ($testSize === $expectedSize) {
|
||||
echo "✅ '{$data}': {$testSize}x{$testSize}\n";
|
||||
} else {
|
||||
echo "❌ '{$data}': {$testSize}x{$testSize} (expected: {$expectedSize})\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo "\n=== Summary ===\n";
|
||||
echo "QR Code generation: ✅ Working\n";
|
||||
echo "Matrix structure: ✅ Valid\n";
|
||||
echo "SVG rendering: ✅ Working\n";
|
||||
echo "Data URI: ✅ Working\n";
|
||||
echo "\nNote: The QR code should be scannable if all checks pass.\n";
|
||||
echo "To verify, scan the generated QR code with a mobile phone.\n";
|
||||
|
||||
Reference in New Issue
Block a user