Rückbau auf lokal
ACHTUNG Text
This commit is contained in:
114
cors-proxy.php
Normal file
114
cors-proxy.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
/**
|
||||
* CORS Proxy für sofueDB.php
|
||||
* Diese Datei muss in einem öffentlich zugänglichen Verzeichnis der Website liegen
|
||||
*/
|
||||
|
||||
// CORS Headers für Frontend-Zugriff
|
||||
$allowedOrigins = [
|
||||
'http://localhost:5173',
|
||||
'https://ihre-produktions-domain.de' // Ersetzen Sie durch Ihre echte Domain
|
||||
];
|
||||
|
||||
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
|
||||
if (in_array($origin, $allowedOrigins)) {
|
||||
header("Access-Control-Allow-Origin: $origin");
|
||||
} else {
|
||||
// Für Development: localhost mit beliebigen Ports erlauben
|
||||
if (preg_match('/^http:\/\/localhost:\d+$/', $origin)) {
|
||||
header("Access-Control-Allow-Origin: $origin");
|
||||
}
|
||||
}
|
||||
header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
|
||||
header("Access-Control-Allow-Headers: Content-Type, Authorization");
|
||||
header("Access-Control-Allow-Credentials: true");
|
||||
|
||||
// Preflight-Request abfangen
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||
http_response_code(200);
|
||||
exit();
|
||||
}
|
||||
|
||||
// Nur POST-Requests erlauben
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
http_response_code(405);
|
||||
echo 'Method Not Allowed';
|
||||
exit();
|
||||
}
|
||||
|
||||
// Backend-URL und Credentials aus Environment oder Config
|
||||
$backendUrl = 'https://sternwarte-welzheim.de/intern/sofue/php/sofueDB.php';
|
||||
|
||||
// Credentials sicher laden - verschiedene Optionen:
|
||||
// Option 1: Aus Environment Variables (empfohlen)
|
||||
$username = getenv('SOFUE_USERNAME') ?: $_ENV['SOFUE_USERNAME'] ?? null;
|
||||
$password = getenv('SOFUE_PASSWORD') ?: $_ENV['SOFUE_PASSWORD'] ?? null;
|
||||
|
||||
// Option 2: Aus separater Config-Datei (Fallback)
|
||||
if (!$username || !$password) {
|
||||
$configFile = __DIR__ . '/cors-config.php';
|
||||
if (file_exists($configFile)) {
|
||||
include $configFile;
|
||||
// cors-config.php sollte enthalten:
|
||||
// <?php $username = 'beogruppe'; $password = 'ArktUhr'; ?>
|
||||
}
|
||||
}
|
||||
|
||||
// Option 3: Letzter Fallback - aber sicherer als Klartext
|
||||
if (!$username || !$password) {
|
||||
// Base64-kodiert (minimal obfuskiert, aber nicht wirklich sicher)
|
||||
$encoded = 'YmVvZ3J1cHBlOkFya3RVaHI='; // beogruppe:ArktUhr
|
||||
$decoded = base64_decode($encoded);
|
||||
list($username, $password) = explode(':', $decoded, 2);
|
||||
}
|
||||
|
||||
// Sicherheitscheck
|
||||
if (!$username || !$password) {
|
||||
http_response_code(500);
|
||||
echo 'Server configuration error';
|
||||
exit();
|
||||
}
|
||||
|
||||
// POST-Daten aus dem Frontend übernehmen
|
||||
$postData = $_POST;
|
||||
|
||||
// Debug-Log (optional, für Entwicklung)
|
||||
error_log("CORS-Proxy: Weiterleitung an Backend mit " . count($postData) . " Parametern");
|
||||
|
||||
// cURL-Request an das geschützte Backend
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $backendUrl);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
|
||||
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
|
||||
|
||||
// Response vom Backend holen
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
// Fehlerbehandlung
|
||||
if ($response === false) {
|
||||
http_response_code(500);
|
||||
echo "Backend-Verbindungsfehler: " . $error;
|
||||
exit();
|
||||
}
|
||||
|
||||
// HTTP-Status vom Backend übernehmen
|
||||
http_response_code($httpCode);
|
||||
|
||||
// Content-Type vom Backend übernehmen (falls JSON)
|
||||
if (strpos($response, '{') === 0 || strpos($response, '[') === 0) {
|
||||
header('Content-Type: application/json');
|
||||
} else {
|
||||
header('Content-Type: text/plain');
|
||||
}
|
||||
|
||||
// Response vom Backend weiterleiten
|
||||
echo $response;
|
||||
?>
|
||||
Reference in New Issue
Block a user