From fcbc625545476f437703a0fa626fd8aec7cc9503 Mon Sep 17 00:00:00 2001 From: lgromero Date: Tue, 20 Aug 2024 10:46:53 +0000 Subject: [PATCH] refs #503 #504 #639 updates config for nelmio swagger and adapts getoglives to oglivecli and adds filename to the json output --- bin/oglivecli | 3 +- config/bundles.php | 1 + config/routes.yaml | 4 + installer/ogboot_installer.py | 34 +---- .../Controller/OgBootController.php | 138 +++--------------- 5 files changed, 31 insertions(+), 149 deletions(-) diff --git a/bin/oglivecli b/bin/oglivecli index 9233cc1..5f8b90a 100755 --- a/bin/oglivecli +++ b/bin/oglivecli @@ -509,13 +509,14 @@ function list_installed_oglives() { local DATA=$(jq -n \ --arg id "$CHECKSUM" \ + --arg filename "$OGLIVEDIR" \ --arg dist "$OGLIVEDIST" \ --arg krnl "$OGLIVEKRNL" \ --arg arch "$OGLIVEARCH" \ --arg rev "$OGLIVEREV" \ --arg dir "$TFTPDIR/$OGLIVEDIR" \ --arg iso "" \ - '{id: $id, distribution: $dist, kernel: $krnl, architecture: $arch, revision: $rev, directory: $dir, iso: $iso}') + '{id: $id, filename: $filename, distribution: $dist, kernel: $krnl, architecture: $arch, revision: $rev, directory: $dir, iso: $iso}') installed_ogLives+=("$DATA") diff --git a/config/bundles.php b/config/bundles.php index aeee1c2..d9059a2 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -12,4 +12,5 @@ return [ Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], App\OgBootBundle\OgBootBundle::class => ['all' => true], + Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['all' => true], ]; diff --git a/config/routes.yaml b/config/routes.yaml index c3283aa..274a742 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -1,3 +1,7 @@ #index: # path: / # controller: App\Controller\DefaultController::index +app.swagger_ui: + path: /api/doc + methods: GET + defaults: { _controller: nelmio_api_doc.controller.swagger_ui } diff --git a/installer/ogboot_installer.py b/installer/ogboot_installer.py index 076e2fe..b864dc6 100755 --- a/installer/ogboot_installer.py +++ b/installer/ogboot_installer.py @@ -225,31 +225,6 @@ def downloadComposer(): logger.info(f"composer.phar downloaded to {INSTALL_OGBOOT_TARGET}/bin") return 0 -def install_swagger_ui(): - global INSTALL_TARGET - # Define la URL del archivo de Swagger UI que quieres descargar - swagger_ui_url = "https://github.com/swagger-api/swagger-ui/archive/refs/heads/master.zip" - # Define la ruta donde quieres descomprimir Swagger UI - swagger_ui_path = "/tmp/swagger-ui" - # Define la ruta de destino para los archivos de Swagger UI - destination_path = os.path.join(INSTALL_TARGET, "public") - # Crea los directorios si no existen - os.makedirs(swagger_ui_path, exist_ok=True) - os.makedirs(destination_path, exist_ok=True) - # Descarga el archivo de Swagger UI - urllib.request.urlretrieve(swagger_ui_url, "/tmp/swagger-ui.zip") - # Descomprime el archivo de Swagger UI en la ruta especificada - with zipfile.ZipFile("/tmp/swagger-ui.zip", "r") as zip_ref: - zip_ref.extractall(swagger_ui_path) - # Copia los archivos de Swagger UI al directorio de destino - for file_path in glob.glob(os.path.join(swagger_ui_path, "swagger-ui-master", "dist", "*")): - shutil.copy(file_path, destination_path) - # Elimina el archivo descargado y el directorio temporal - os.remove("/tmp/swagger-ui.zip") - shutil.rmtree(swagger_ui_path) - # Genera el archivo swagger.json - os.system(f"{os.path.join(INSTALL_TARGET, 'vendor', 'bin', 'openapi')} {INSTALL_TARGET}/src/OgBootBundle/Controller/ -o {destination_path}/swagger.json") - logger.info(f"Swagger UI installed on {destination_path}.") def og_core_create_user(OPENGNSYS_CLIENT_USER): try: @@ -365,7 +340,6 @@ def og_boot_composer_install(): if os.path.exists(composer_lock_path): os.remove(composer_lock_path) - install_swagger_ui() # Instalar Swagger UI subprocess.call(["sudo", "chown", "-R", "ogboot:ogboot", f"{INSTALL_OGBOOT_TARGET}/public"]) logger.info("Application skeleton created and composer.lock file removed.") @@ -494,10 +468,10 @@ TFTP_OPTIONS="--secure" logger.warning(f"The symbolic link already exists: {symlink_target}") #Descargar oglive logger.info("Downloading oglive...") - iso_name = "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso" + iso_url = "https://ognproject.evlt.uma.es/trac/downloads/ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso" try: result = subprocess.run( - ["sudo", "/opt/ogboot/bin/oglivecli", "download", iso_name], + ["sudo", "/opt/ogboot/bin/oglivecli", "download", iso_url], check=True, capture_output=True, text=True @@ -893,11 +867,11 @@ def modify_php_fpm_config(): with open(php_fpm_conf_path, 'w') as file: for line in config_lines: if line.startswith('user ='): - file.write('user = www-data\n') + file.write('user = ogboot\n') elif line.startswith('group ='): file.write('group = ogboot\n') elif line.startswith('listen.owner ='): - file.write('listen.owner = www-data\n') + file.write('listen.owner = ogboot\n') elif line.startswith('listen.group ='): file.write('listen.group = ogboot\n') else: diff --git a/src/OgBootBundle/Controller/OgBootController.php b/src/OgBootBundle/Controller/OgBootController.php index 73361d4..32e6779 100644 --- a/src/OgBootBundle/Controller/OgBootController.php +++ b/src/OgBootBundle/Controller/OgBootController.php @@ -173,44 +173,21 @@ public function getDownloadMenu(): Response * response=200, * description="Successful operation", * @OA\JsonContent( - * type="array", - * @OA\Items( - * type="object", - * @OA\Property( - * property="id", - * type="string", - * description="Unique identifier for the ogLive client, generated from ogclient.sqfs.sum", - * example="9e49a085ba74f97a81bdf9b3d0785094" - * ), - * @OA\Property( - * property="distribution", - * type="string", - * description="Distribution name of the installed ogLive client" - * ), - * @OA\Property( - * property="kernel", - * type="string", - * description="Kernel version of the installed ogLive client" - * ), - * @OA\Property( - * property="architecture", - * type="string", - * description="Architecture of the installed ogLive client" - * ), - * @OA\Property( - * property="revision", - * type="string", - * description="Revision of the installed ogLive client" - * ), - * @OA\Property( - * property="directory", - * type="string", - * description="Directory name of the installed ogLive client" - * ), - * @OA\Property( - * property="iso", - * type="string", - * description="ISO file name of the installed ogLive client" + * type="object", + * @OA\Property(property="default_oglive", type="string", description="Default ogLive client"), + * @OA\Property( + * property="installed_ogLives", + * type="array", + * @OA\Items( + * type="object", + * @OA\Property(property="id", type="string", description="Unique identifier for the ogLive client"), + * @OA\Property(property="filename", type="string", description="Filename of the ogLive client"), + * @OA\Property(property="distribution", type="string", description="Distribution name of the installed ogLive client"), + * @OA\Property(property="kernel", type="string", description="Kernel version of the installed ogLive client"), + * @OA\Property(property="architecture", type="string", description="Architecture of the installed ogLive client"), + * @OA\Property(property="revision", type="string", description="Revision of the installed ogLive client"), + * @OA\Property(property="directory", type="string", description="Directory name of the installed ogLive client"), + * @OA\Property(property="iso", type="string", description="ISO file name of the installed ogLive client") * ) * ) * ) @@ -223,89 +200,14 @@ public function getDownloadMenu(): Response */ public function getOglives(): Response { - $directoryPath = '/opt/ogboot/tftpboot/'; - $pattern = '/^ogLive-([\w.-]+)-r(\d+)$/'; + // Llama al servicio que ejecuta el comando oglivecli y procesa la salida + $ogLiveConfigResult = $this->curlRequestService->callOgLive("list_installed_oglives"); - $ogLives = []; - - if ($handle = opendir($directoryPath)) { - error_log("Opened directory: $directoryPath"); - - while (false !== ($entry = readdir($handle))) { - error_log("Processing entry: $entry"); - - if ($entry != "." && $entry != ".." && is_dir($directoryPath . $entry)) { - if (preg_match($pattern, $entry, $matches)) { - error_log("Entry matches pattern: $entry"); - - // Evitar directorios .old - if (substr($entry, -4) === '.old') { - error_log("Ignoring old directory: $entry"); - continue; - } - - // Extraer detalles - $distribution = $matches[1]; - $revision = $matches[2]; - $directory = $entry; - $ogLivePath = $directoryPath . $entry; - - // Obtener el ID del archivo ogclient.sqfs.sum - $sumFile = $ogLivePath . '/ogclient.sqfs.sum'; - $id = ''; - if (file_exists($sumFile)) { - $id = trim(file_get_contents($sumFile)); - } - - // Obtener el nombre del archivo ISO - $iso = ''; - $oldInfoFile = $ogLivePath . '/OLDINFOFILE'; - if (file_exists($oldInfoFile)) { - $iso = trim(file($oldInfoFile, FILE_USE_INCLUDE_PATH | FILE_IGNORE_NEW_LINES)[0]); - } - - // Obtener la versión del kernel - $kernelFile = $ogLivePath . '/ogvmlinuz'; - $kernel = ''; - if (file_exists($kernelFile)) { - $fileOutput = shell_exec("file -bkr $kernelFile"); - if (preg_match('/Linux kernel.*version (\d+\.\d+\.\d+)/', $fileOutput, $kernelMatches)) { - $kernel = $kernelMatches[1]; - } - } - - // Asumir arquitectura como 'amd64'; puedes refinar esto si se necesita más lógica - $architecture = 'amd64'; - - // Construir el objeto - $ogLives[] = [ - 'id' => $id, - 'distribution' => $distribution, - 'kernel' => $kernel, - 'architecture' => $architecture, - 'revision' => $revision, - 'directory' => $directory, - 'iso' => $iso - ]; - } else { - error_log("Entry does not match pattern: $entry"); - } - } else { - error_log("Entry is not a directory: $directoryPath$entry"); - } - } - - closedir($handle); - error_log("Closed directory: $directoryPath"); - } - - if (!empty($ogLives)) { - error_log("Returning ogLives data"); - return new JsonResponse($ogLives, Response::HTTP_OK); - } else { - error_log("No ogLive clients found"); + if (empty($ogLiveConfigResult) || !isset($ogLiveConfigResult['installed_ogLives'])) { return new JsonResponse(['error' => 'No ogLive clients found'], Response::HTTP_NOT_FOUND); } + + return new JsonResponse($ogLiveConfigResult, Response::HTTP_OK); } /**