Contao-Camp 2024
Ergebnis 1 bis 2 von 2

Thema: Zufälligen String nach Installation einmalig in TL_CONFIG schreiben

  1. #1
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard Zufälligen String nach Installation einmalig in TL_CONFIG schreiben

    Hallo zusammen,

    ich arbeite gerade an einem Bundle, über das ich mir ein Backup inklusive Datenbank aus Contao ziehen kann.

    https://github.com/bohnmedia/contaobackup

    Die Backups können über eine URL direkt herunter geladen werden, sodass ich später per Cronjob von einer anderen Maschine die Backups veranlassen kann. Letztendlich geht es, hoffentlich, nur um eine Kleinigkeit.

    Wenn das Bundle installiert wird, würde ich gerne automatisch ein Passwort in die $GLOBALS['TL_CONFIG']['backupKey'] schreiben.

    Mir ist bewusst, dass ich einen Default-Wert über die config.php definieren kann, aber ich würde diesen Wert gerne zufällig erzeugen. Dazu gibt es auch schon eine eigene Funktion.

    PHP-Code:
        public function generateDefaultPassword()
        {

            
    // Generate string
            
    $backupKey '';
            
    $allowedChars 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
            
    $max strlen($allowedChars) - 1;
            for (
    $i=0$i<32$i++) {
                
    $backupKey .= substr($allowedCharsrand(0$max), 1);
            }
            
            
    // Update localconfig
            
    $objConfig Config::getInstance();
            
    $objConfig->add("\$GLOBALS['TL_CONFIG']['backupKey']"$backupKey);
            
    $objConfig->save();

        } 
    Mir ist jedoch noch nicht ganz klar, wie ich die nach der ersten Installation anstoße?

    Ich habe versucht, die Funktion über "scripts" > "post-install-cmd" in der composer.json anzustoßen, habe aber bisher den Eindruck, dass der Eintrag einfach ignoriert wird.

    Das Testscript, das einfach nur eine Datei anlegen soll, blieb bisher ohne Erfolg.

    Code:
    {
        "name": "bohnmedia/contaobackup",
        "description": "Contao extension for backups",
        "version": "1.0",
        "keywords": [
            "contao",
            "backup"
        ],
        "type": "contao-bundle",
        "license": "MIT",
        "authors": [
            {
                "name": "bohn.media",
                "homepage": "https://bohn.media"
            }
        ],
        "require": {
            "php": "^7.1",
            "contao/core-bundle": "^4.4",
            "ifsnop/mysqldump-php": "^2.9"
        },
        "require-dev": {
            "contao/manager-plugin": "^2.0"
        },
        "conflict": {
            "contao/manager-plugin": "<2.0 || >=3.0"
        },
        "autoload": {
            "psr-4": {
                "BohnMedia\\ContaoBackupBundle\\": "src/"
            }
        },
        "extra": {
            "contao-manager-plugin": "BohnMedia\\ContaoBackupBundle\\ContaoManager\\Plugin"
        },
        "scripts": {
            "post-install-cmd": [
                "BohnMedia\\ContaoBackupBundle\\ScriptHandler::generateDefaultPassword"
            ]
        }
    }
    PHP-Code:
    <?php

    namespace BohnMedia\ContaoBackupBundle;

    class 
    ScriptHandler
    {
        public function 
    generateDefaultPassword(): void
        
    {
            
    $file fopen("/[PFAD]/works.txt""w");
            
    fclose($file);
        }
    }
    (Statischer Testpfad wurde entfernt)

    Hat jemand einen Tipp für mich, wie ich im Idealfall einmalig bei der Installation die $GLOBALS['TL_CONFIG']['backupKey'] beschreiben kann?

    Dank und Gruß
    Dennis

  2. #2
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard

    Hab es jetzt erst Mal provisorisch über den Hook "initializeSystem" gelöst. Dieser prüft jetzt bei jedem Seitenaufruf, ob der Key "backupKey" bereits in TL_CONFIG vorhanden ist und erzeugt ihn automatisch, wenn er nicht existiert.

    services.yml
    Code:
        ...
    
        bohnmedia.contaobackup:
            class: BohnMedia\ContaoBackupBundle\ContaoBackup
            arguments:
                - '%kernel.project_dir%'
            tags:
                - { name: contao.hook, hook: initializeSystem, method: initializeSystem, priority: 0 }
    
        ...
    ContaoBackup.php
    PHP-Code:
    <?php

    ...

    class 
    ContaoBackup {

        ...

        public function 
    initializeSystem()
        {

            
    // Skip if backupKey exists
            
    $objConfig Config::getInstance();
            if (
    $objConfig->has('backupKey')) return;

            
    // Generate key
            
    $backupKey '';
            
    $allowedChars 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
            
    $max strlen($allowedChars) - 1;
            for (
    $i=0$i<32$i++) {
                
    $backupKey .= substr($allowedCharsrand(0$max), 1);
            }
            
            
    // Update localconfig
            
    $objConfig->add("\$GLOBALS['TL_CONFIG']['backupKey']"$backupKey);
            
    $objConfig->save();

        }

    }
    Bin trotzdem für jeden Tipp dankbar, wie man das eleganter lösen kann.

    VG
    Dennis

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •