← Code-Übersicht

CredentialsProvider.php

Pfad: src/Infrastructure/Config/CredentialsProvider.php

Ext: php

Größe: 1557 Bytes

Geändert: 2026-07-15 16:12:37+02

<?php
declare(strict_types=1);

namespace Demo\Infrastructure\Config;

use RuntimeException;

/**
 * Laedt Datenbank-Credentials aus der Datei db.json eines Verzeichnisses.
 * Das Verzeichnis wird injiziert (aus der Umgebung), nie hartkodiert.
 */
final class CredentialsProvider
{
    /** @var string Verzeichnis, das die Datei db.json enthaelt. */
    private string $directory;

    /**
     * Bindet den Provider an das Credentials-Verzeichnis.
     *
     * @param string $directory Absolutes Verzeichnis mit der Datei db.json.
     */
    public function __construct(string $directory)
    {
        $this->directory = rtrim($directory, '/');
    }

    /**
     * Liest und validiert die Datenbank-Credentials.
     *
     * @return DatabaseCredentials Geladene Verbindungsdaten.
     * @throws RuntimeException Wenn die Datei fehlt oder unvollstaendig ist.
     */
    public function database(): DatabaseCredentials
    {
        $file = $this->directory . '/db.json';
        $raw = is_file($file) ? (string) file_get_contents($file) : '';
        if ($raw === '') {
            throw new RuntimeException(__METHOD__ . ': db.json nicht lesbar');
        }
        $data = json_decode($raw, true);
        if (!is_array($data) || !isset($data['dsn'], $data['user'], $data['password'])) {
            throw new RuntimeException(__METHOD__ . ': db.json unvollstaendig');
        }
        return new DatabaseCredentials(
            (string) $data['dsn'],
            (string) $data['user'],
            (string) $data['password']
        );
    }
}