*/ protected $helpers = []; protected $db; /** * Be sure to declare properties for any property fetch you initialized. * The creation of dynamic property is deprecated in PHP 8.2. */ // protected $session; /** * @return void */ public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { // Do Not Edit This Line parent::initController($request, $response, $logger); // Preload any models, libraries, etc, here. $this->db = \Config\Database::connect(); // E.g.: $this->session = service('session'); } public function APIcall($method, $url, $data) { // $curl = curl_init(); $curl = curl_init($url); switch ($method) { case "GET": $params2 = ''; foreach($data as $key2=>$value2) $params2 .= $key2.'='.$value2.'&'; $params2 = trim($params2, '&'); $url = $url.'?'.$params2;// add param to URL log_message('critical', "API URL FINAL =>".$url ); //curl_setopt($curl, CURLOPT_FRESH_CONNECT, true); //curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); break; case "POST": curl_setopt($curl, CURLOPT_POST, 1); if ($data) // curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); // curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); break; case "PUT": curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); if ($data) curl_setopt($curl, CURLOPT_POSTFIELDS, $data); break; } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'APIKEY: RegisteredAPIkey', 'Content-Type: application/json', )); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); $result = curl_exec($curl); if(!$result) { echo("Connection failure!"); } curl_close($curl); return json_decode($result, true); } public function ansibleLogin():string { $result = "Unhandled exception"; $base_url = $_ENV['ANSIBLE_AUTOMATION_SERVER_LOCATION']; // $base_url = "http://172.16.4.90:3000"; $cookies = tempnam('/tmp','cookie.txt'); # 1. Login $url = $base_url . "/api/auth/login"; $ch = curl_init( $url ); # Setup request to send json via POST. $payload = json_encode( array( "auth"=> "admin", "password" => "may12002" ) ); curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload ); curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); # Return response instead of printing. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); # Fetch the headers, not the body content: //curl_setopt($ch, CURLOPT_HEADER, true); // we want headers //curl_setopt($ch, CURLOPT_NOBODY, true); // we don't need body # Cookie jar curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); # Send request. $result = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result = 'HTTP code: ' . $httpcode; curl_close($ch); if ($httpcode != "204") { return "Login failed! $result"; } # 2. Get token $url = $base_url . "/api/user/tokens"; $ch = curl_init( $url ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); $result = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $token = null; $arr = json_decode($result, true); foreach ($arr as $item) { if ($item["expired"]===false) { $token = $item["id"]; break; } } $result = "Found token: $token"; # Print response. return $token; } public function ansibleProvision($ansibleToken,$params){ log_message('critical', "***** ***** Provision CALL:: ansibleProvision() Token ".$ansibleToken); log_message('critical', "***** ***** Provision CALL:: ansibleProvision() Token ". serialize( $params)); $result = "Unhandled exception"; $base_url = "http://172.16.4.90:3000"; $PROJECT_ID= 8; $url = $base_url . "/api/project/$PROJECT_ID/tasks"; $headers = [ 'Content-Type:application/json', 'Accept: application/json', 'Authorization: Bearer ' . $ansibleToken ]; $ch = curl_init( $url ); $payload = json_encode( $params ); // $payload = json_encode( array( "template_id"=> 1, "debug" => false, "dry_run" => false, "playbook" => "first-playbook.yml", "environment" => "{}" ) ); curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); $res = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result .= "\n" . 'Launch task HTTP code: ' . $httpcode; curl_close($ch); # 4. Get tasks $url = $base_url . "/api/project/$PROJECT_ID/tasks"; $ch = curl_init( $url ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); $res = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result .= "\n" . 'Get tasks HTTP code: ' . $httpcode; curl_close($ch); log_message('critical', "***** ***** Provision :: ansibleProvision($httpcode) ".$httpcode); ob_start(); var_dump($headers); var_dump($res); $result .= "\n" . ob_get_clean(); return $httpcode; } // public function ansibleProvisionBAD($ansibleToken,$params){ // log_message('critical', "***** ***** Provision CALL:: ansibleProvision() Token ".$ansibleToken); // log_message('critical', "***** ***** Provision CALL:: ansibleProvision() Token ". serialize( $params)); // // $result = "Unhandled exception"; // $base_url = "http://172.16.4.90:3000"; // $PROJECT_ID= 8; // $cookies = tempnam('/tmp','cookie.txt'); // // # 1. Login // $url = $base_url . "/api/project/$PROJECT_ID/tasks"; // log_message('critical', "***** ***** ansibleProvision CALL::URL ". $url); // $ch = curl_init( $url ); // # Setup request to send json via POST. // $payload = json_encode( $params ); // $authorization = "Authorization: Bearer ".$ansibleToken; // Prepare the authorisation token // curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload ); // curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json',$authorization)); // # Return response instead of printing. // curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); // # Fetch the headers, not the body content: // // # Send request. // $result = curl_exec($ch); // $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // $result = 'HTTP code: ' . $httpcode; // // curl_close($ch); // // log_message('critical', "***** ***** Provision :: ansibleProvision($httpcode) ".$httpcode); // // if ($httpcode != "204") { // return "Login failed! $result"; // } // // return 0; // // } }