scripts-bash/local/bin/ytdll

165 lines
4.8 KiB
PHP
Executable File

#!/usr/bin/env php
<?php
// Auteur : Cédrix pour a5l.fr
// Projet : scripts-bash/ytdll
// Télécharger les pistes audios ajoutées récemment
// depuis des chaines Youtubes
// Version 2024.07.07-14.31
// Version initiale
/*
Création de la base de données
Linux Debian 12 / PostGres 16
Suivez les instructions suivantes pour créer
votre base de données et tous les éléments
associés.
-- Connectez-vous en tant qu'utilisateur ayant des privilèges suffisants
-- depuis le compte root
sudo su - postgres
-- Modification du fichier pg_hba
nano /etc/postgresql/16/main/ph_hba.conf
-- modifier la ligne
local all all peer
-- avec la valeur suivante
local all all trust
-- avec le compte root redémarrez postgres
systemctl restart postgresql
-- Connectez-vous en tant qu'utilisateur ayant des privilèges suffisants
-- depuis le compte root
sudo su - postgres
-- Connection au requeteur
psql
-- Créer un nouveau role
CREATE ROLE r_ytdll WITH LOGIN PASSWORD 'changeme';
-- Créer la base de données
CREATE DATABASE b_ytdll OWNER r_ytdll;
-- Connectez-vous à la base de données b_ytdll :
\c b_ytdll
-- Créez un nouveau schéma
CREATE SCHEMA s_ytdll AUTHORIZATION r_ytdll;
-- Accorder tous les privilèges sur le schéma à l'utilisateur
GRANT ALL PRIVILEGES ON SCHEMA s_ytdll TO r_ytdll;
-- Accorder des privilèges sur les tables et séquences existantes et futures
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA s_ytdll TO r_ytdll;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA s_ytdll TO r_ytdll;
ALTER DEFAULT PRIVILEGES IN SCHEMA s_ytdll GRANT ALL PRIVILEGES ON TABLES TO r_ytdll;
ALTER DEFAULT PRIVILEGES IN SCHEMA s_ytdll GRANT ALL PRIVILEGES ON SEQUENCES TO r_ytdll;
-- Schéma s_ytdll par défaut
SET search_path TO s_ytdll;
\d
ALTER ROLE r_ytdll SET search_path TO s_ytdll;
ALTER DATABASE b_ytdll SET search_path TO s_ytdll;
*/
// -- GESTION DES PRE REQUIS --
// Vérifier si l'extension pgsql est chargée
if (!extension_loaded('pgsql')) {
die("L'extension PHP 'pgsql' n'est pas installée. Veuillez l'installer avant de continuer.\n");
}
// Chemin du HOME
$homeDir = getenv('HOME');
// Configuration de l'autoloader
spl_autoload_register(function ($class) use ($homeDir) {
$baseDir = $homeDir . '/.local/share/ytdll/lib/';
$file = $baseDir . str_replace('\\', '/', $class) . '.php';
if (file_exists($file)) {
require $file;
}
});
// -- GESTION DE LA CONFIGURATION PRIMAIRE --
function getUserInput($prompt) {
echo $prompt;
return trim(fgets(STDIN));
}
function createConfigFile($configPath, $templatePath) {
// Vérifie si le fichier de configuration existe
if (!file_exists($configPath)) {
// Copie le fichier de modèle
if (!copy($templatePath, $configPath)) {
die("Échec de la copie du fichier de configuration modèle.\n");
}
// Demande à l'utilisateur de saisir les valeurs nécessaires
$databaseHost = getUserInput("Veuillez saisir le host de la base de données : ");
$databaseName = getUserInput("Veuillez saisir le nom de la base de données : ");
$databaseUser = getUserInput("Veuillez saisir l'utilisateur de la base de données : ");
$databasePassword = getUserInput("Veuillez saisir le mot de passe de la base de données : ");
// Lit le fichier de modèle
$configContent = file_get_contents($configPath);
// Remplace les valeurs par défaut par les valeurs saisies par l'utilisateur
$configArray = [
'database' => [
'host' => $databaseHost,
'dbname' => $databaseName,
'user' => $databaseUser,
'password' => $databasePassword
]
];
// Encode en JSON
$jsonConfig = json_encode($configArray, JSON_PRETTY_PRINT);
// Écrit le fichier de configuration JSON
file_put_contents($configPath, $jsonConfig);
echo "Le fichier de configuration a été créé avec succès.\n";
}
}
// Appel de la fonction pour créer le fichier de configuration
$configPath = $homeDir . '/.config/fr.a5l.ytdll.json';
$templatePath = $homeDir . '/.local/share/ytdll/config.php';
createConfigFile($configPath, $templatePath);
// -- DEBUT --
// Lit le fichier de configuration primaire
$configContent = file_get_contents($configPath);
// Décode le JSON en tableau associatif
$config = json_decode($configContent, true);
// Initialiser la connexion à la base de données
$database = new Database($config['database']);
unset($config);
// Initialiser au gestionnaire de configuration
$configManager = new Config($database);
// -- GESTION DES VERSIONS de TABLE --
$updateManager = new UpdateManager($configManager, $pdo);
$updateManager->manageVersionTables();