stop(); } } else { // Cannot access configuration file. $response['message'] = "An error occurred, please try again"; jsonResponse(500, $response); $app->stop(); } } else { // Error: missing API key. $response['message'] = 'Missing Repository API key'; jsonResponse(400, $response); $app->stop(); } } function commandExist($cmd) { $returnVal = shell_exec("which $cmd"); return (empty($returnVal) ? false : true); } // Define REST routes. /** * @brief List all images in the repository * @note Route: /repository/images, Method: GET * @param no * @return JSON object with directory, images array, ous array and disk data. */ $app->get('/repository/images(/)', 'validateRepositoryApiKey', function() use ($app) { $response = array(); // Read repository information file. $cfgFile = '/opt/opengnsys/etc/repoinfo.json'; $response = json_decode(@file_get_contents($cfgFile), true); // Check if directory exists. $imgPath = @$response['directory']; if (is_dir($imgPath)) { // Complete global image information. for ($i=0; $istop(); } ); /** * @brief List image data * @note Route: /repository/image/:imagename, Method: GET * @param no * @return JSON object with image data. */ $app->get('/repository/image(/:ouname)/:imagename(/)', 'validateRepositoryApiKey', function($ouname="/", $imagename) use ($app) { $images = array(); $response = array(); // Search image name in repository information file. $cfgFile = '/opt/opengnsys/etc/repoinfo.json'; $json = json_decode(@file_get_contents($cfgFile), true); $imgPath = @$json['directory']; if (empty($ouname) or $ouname == "/") { // Search in global directory. $images = @$json['images']; } else { // Search in OU directory. for ($i=0; $istop(); } ); /** * @brief Power on a pc or group of pcs with the MAC specified in POST parameters * @note Route: /poweron, Method: POST * @param macs OU id. * @return JSON string ok if the power on command was sent */ $app->post('/repository/poweron', 'validateRepositoryApiKey', function() use($app) { // Fetch repository token from ogAdmServer.cfg configuration file. @$confFile = parse_ini_file('../../etc/ogAdmServer.cfg', 'r'); if ($confFile) { // The macs parameter must come in the post (JSON object with array of MACs) $data = json_decode($app->request()->getBody()); if (empty($data->macs)) { // Print error message. $response['message'] = 'Required param macs not found'; jsonResponse(400, $response); } else { // Execute WakeOnLan command with ogAdmServer $strMacs = implode(';', $data->macs); $strMacs = str_replace(':', '', $strMacs); $strIps = implode(';', $data->ips); $params="nfn=Arrancar" . chr(13) . "mac=" . $strMacs . chr(13) . "iph=" . $strIps . chr(13) . "mar=" . $data->mar . chr(13); $shidra=new SockHidra($confFile['ServidorAdm'], $confFile['PUERTO']); if ($shidra->conectar()) { // The connection to the hydra server has been established $resul=$shidra->envia_comando($params); if($resul) { $frame=$shidra->recibe_respuesta(); $hlonprm=hexdec(substr($frame, LENHEAD, LENHEXPRM)); $params=substr($frame, LENHEAD + LENHEXPRM, $hlonprm); $ParamsValue=extrae_parametros($params, chr(13), '='); $resul=$ParamsValue["res"]; jsonResponse(200, $resul); } else { $response['message'] = 'Error in ogAdmServer'; jsonResponse(404, $response); } $shidra->desconectar(); } } } else { // Cannot access configuration file. $response['message'] = "An error occurred, please try again"; jsonResponse(500, $response); $app->stop(); } } );