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:
@@ -3,6 +3,7 @@
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Framework\QrCode\QrCodeGenerator;
|
||||
use App\Framework\QrCode\QrCodeRenderer;
|
||||
use App\Framework\QrCode\ValueObjects\EncodingMode;
|
||||
use App\Framework\QrCode\ValueObjects\ErrorCorrectionLevel;
|
||||
use App\Framework\QrCode\ValueObjects\QrCodeConfig;
|
||||
@@ -140,3 +141,103 @@ test('supports different data types', function () {
|
||||
->and($matrix3)->toBeInstanceOf(\App\Framework\QrCode\ValueObjects\QrCodeMatrix::class)
|
||||
->and($matrix4)->toBeInstanceOf(\App\Framework\QrCode\ValueObjects\QrCodeMatrix::class);
|
||||
});
|
||||
|
||||
// Instance method tests
|
||||
test('can generate SVG using instance method', function () {
|
||||
$renderer = new QrCodeRenderer();
|
||||
$generator = new QrCodeGenerator($renderer);
|
||||
$data = 'Hello World';
|
||||
|
||||
$svg = $generator->generateSvg($data);
|
||||
|
||||
expect($svg)->toBeString()
|
||||
->and($svg)->toContain('<svg')
|
||||
->and($svg)->toContain('</svg>');
|
||||
});
|
||||
|
||||
test('can generate data URI using instance method', function () {
|
||||
$renderer = new QrCodeRenderer();
|
||||
$generator = new QrCodeGenerator($renderer);
|
||||
$data = 'Hello World';
|
||||
|
||||
$dataUri = $generator->generateDataUri($data);
|
||||
|
||||
expect($dataUri)->toBeString()
|
||||
->and($dataUri)->toStartWith('data:image/svg+xml;base64,');
|
||||
});
|
||||
|
||||
test('can analyze data and get recommendations', function () {
|
||||
$renderer = new QrCodeRenderer();
|
||||
$generator = new QrCodeGenerator($renderer);
|
||||
$data = 'Hello World';
|
||||
|
||||
$analysis = $generator->analyzeData($data);
|
||||
|
||||
expect($analysis)->toBeArray()
|
||||
->and($analysis)->toHaveKey('dataLength')
|
||||
->and($analysis)->toHaveKey('dataType')
|
||||
->and($analysis)->toHaveKey('recommendedVersion')
|
||||
->and($analysis)->toHaveKey('recommendedErrorLevel')
|
||||
->and($analysis)->toHaveKey('encodingMode')
|
||||
->and($analysis)->toHaveKey('matrixSize')
|
||||
->and($analysis)->toHaveKey('capacity')
|
||||
->and($analysis)->toHaveKey('efficiency')
|
||||
->and($analysis['dataLength'])->toBe(strlen($data))
|
||||
->and($analysis['recommendedVersion'])->toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
test('analyzeData detects URL type', function () {
|
||||
$renderer = new QrCodeRenderer();
|
||||
$generator = new QrCodeGenerator($renderer);
|
||||
$url = 'https://example.com/test';
|
||||
|
||||
$analysis = $generator->analyzeData($url);
|
||||
|
||||
expect($analysis['dataType'])->toBe('url');
|
||||
});
|
||||
|
||||
test('analyzeData detects TOTP type', function () {
|
||||
$renderer = new QrCodeRenderer();
|
||||
$generator = new QrCodeGenerator($renderer);
|
||||
$totpUri = 'otpauth://totp/TestApp:user@example.com?secret=JBSWY3DPEHPK3PXP';
|
||||
|
||||
$analysis = $generator->analyzeData($totpUri);
|
||||
|
||||
expect($analysis['dataType'])->toBe('totp');
|
||||
});
|
||||
|
||||
test('can generate TOTP QR code', function () {
|
||||
$renderer = new QrCodeRenderer();
|
||||
$generator = new QrCodeGenerator($renderer);
|
||||
$totpUri = 'otpauth://totp/TestApp:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=TestApp';
|
||||
|
||||
$svg = $generator->generateTotpQrCode($totpUri);
|
||||
|
||||
expect($svg)->toBeString()
|
||||
->and($svg)->toContain('<svg')
|
||||
->and($svg)->toContain('</svg>');
|
||||
});
|
||||
|
||||
test('generateSvg with explicit version', function () {
|
||||
$renderer = new QrCodeRenderer();
|
||||
$generator = new QrCodeGenerator($renderer);
|
||||
$data = 'Test';
|
||||
$version = QrCodeVersion::fromNumber(2);
|
||||
|
||||
$svg = $generator->generateSvg($data, ErrorCorrectionLevel::M, $version);
|
||||
|
||||
expect($svg)->toBeString()
|
||||
->and($svg)->toContain('<svg');
|
||||
});
|
||||
|
||||
test('generateDataUri with explicit version', function () {
|
||||
$renderer = new QrCodeRenderer();
|
||||
$generator = new QrCodeGenerator($renderer);
|
||||
$data = 'Test';
|
||||
$version = QrCodeVersion::fromNumber(3);
|
||||
|
||||
$dataUri = $generator->generateDataUri($data, ErrorCorrectionLevel::M, $version);
|
||||
|
||||
expect($dataUri)->toBeString()
|
||||
->and($dataUri)->toStartWith('data:image/svg+xml;base64,');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user