Upload via GUI (24 Dateien)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
* Läuft nur beim Docker-Build: schreibt die Zugangsdaten fest in config.php (schreibgeschützt, 'locked').
|
||||
* Erwartet die BuildKit-Secrets /run/secrets/admin_hash und /run/secrets/signing_key sowie BASE_URL, SITE_NAME, ADMIN_USER.
|
||||
*/
|
||||
if (PHP_SAPI !== 'cli') exit(1);
|
||||
|
||||
$fail = function (string $m): never { fwrite(STDERR, "FEHLER: {$m}\n"); exit(1); };
|
||||
// Pfade nur für Tests überschreibbar (beim Docker-Build gelten die Vorgaben)
|
||||
$secrets = getenv('BAKE_SECRETS_DIR') ?: '/run/secrets';
|
||||
$keyDir = getenv('BAKE_KEY_DIR') ?: '/opt/plugin-site-secure';
|
||||
$configPath = getenv('BAKE_CONFIG_PATH') ?: '/var/www/html/config.php';
|
||||
$storage = getenv('BAKE_STORAGE_DIR') ?: '/data';
|
||||
|
||||
$hash = trim((string) @file_get_contents($secrets . '/admin_hash'));
|
||||
$key = (string) @file_get_contents($secrets . '/signing_key');
|
||||
$access = trim((string) @file_get_contents($secrets . '/catalog_key'));
|
||||
$base = rtrim((string) getenv('BASE_URL'), '/');
|
||||
$user = (string) getenv('ADMIN_USER');
|
||||
|
||||
if (!str_starts_with($base, 'https://')) $fail('BASE_URL muss mit https:// beginnen.');
|
||||
if ($user === '' || !preg_match('/^[A-Za-z0-9._@-]{3,64}$/', $user)) $fail('ADMIN_USER ist ungültig (3–64 Zeichen: Buchstaben, Ziffern, . _ @ -).');
|
||||
$info = password_get_info($hash);
|
||||
if (($info['algo'] ?? null) === null || $info['algo'] === 0) $fail('admin_hash ist kein gültiger Passwort-Hash (mit password_hash erzeugen).');
|
||||
if (!preg_match('/^[A-Za-z0-9]{32,128}$/', $access)) $fail('catalog_key (Zugangsschlüssel für den Katalog) fehlt oder ist ungültig: 32–128 Buchstaben/Ziffern.');
|
||||
$private = openssl_pkey_get_private($key);
|
||||
if (!$private) $fail('signing_key ist kein gültiger privater Schlüssel (PEM).');
|
||||
$details = openssl_pkey_get_details($private);
|
||||
if (($details['type'] ?? null) !== OPENSSL_KEYTYPE_RSA || ($details['bits'] ?? 0) < 2048) $fail('Der Signierschlüssel muss RSA mit mindestens 2048 Bit sein.');
|
||||
|
||||
@mkdir($keyDir, 0750, true);
|
||||
file_put_contents($keyDir . '/herausgeber-privat.pem', $key);
|
||||
$cfg = [
|
||||
'site_name' => (string) (getenv('SITE_NAME') ?: 'DeskHub Plugins und Themes'),
|
||||
'base_url' => $base,
|
||||
'admin_user' => $user,
|
||||
'admin_password_hash' => $hash,
|
||||
'signing_key_file' => $keyDir . '/herausgeber-privat.pem',
|
||||
'storage_dir' => $storage,
|
||||
'access_key' => $access,
|
||||
'locked' => true,
|
||||
];
|
||||
file_put_contents($configPath, "<?php\nreturn " . var_export($cfg, true) . ";\n");
|
||||
echo "Zugang für \"{$user}\" und Signierschlüssel fest eingebaut. Öffentlicher Schlüssel:\n" . $details['key'];
|
||||
Reference in New Issue
Block a user