php - cPanel / WHM Single Sign On with API -


really struggling one. trying write php script authenticates cpanel account , logs user in.

if there take through code below , let me know going wrong grateful...

if(isset($_get['account'])) {          $cpanel_user = $_get['account'];          $query = "https://whm.brixly.uk:2087/json-api/create_user_session?api.version=1&user=$cpanel_user&service=cpaneld";          $curl = curl_init();                                     // create curl object.         curl_setopt($curl, curlopt_ssl_verifypeer, false);       // allow self-signed certificates...         curl_setopt($curl, curlopt_ssl_verifyhost, false);       // , certificates don't match hostname.         curl_setopt($curl, curlopt_header, false);               // not include header in output         curl_setopt($curl, curlopt_returntransfer, true);        // return contents of transfer on curl_exec.         $header[0] = "authorization: basic " . base64_encode($reseller_username.":".$reseller_password) . "\n\r";         curl_setopt($curl, curlopt_httpheader, $header);         // set username , password.         curl_setopt($curl, curlopt_url, $query);                 // execute query.         $result = curl_exec($curl);         if ($result == false) {             error_log("curl_exec threw error \"" . curl_error($curl) . "\" $query");                                                             // log error if curl exec fails         }         $decoded_response = json_decode( $result, true );          $session_url = $decoded_response['data']['url'];         $cookie_jar = 'cookie.txt';          curl_setopt($curl, curlopt_httpheader, null);             // unset authentication header.         curl_setopt($curl, curlopt_cookiesession, true);          // initiate new cookie session.         curl_setopt($curl, curlopt_cookiejar, $cookie_jar);       // set cookie jar.         curl_setopt($curl, curlopt_cookiefile, $cookie_jar);      // set cookie file.         curl_setopt($curl, curlopt_url, $session_url);            // set query url session login url.          $result = curl_exec($curl);                               // execute session login call.         if ($result == false) {             error_log("curl_exec threw error \"" . curl_error($curl) . "\" $query");                                                             // log error if curl_exec fails.         }         $session_url = preg_replace( '{/login(?:/)??.*}', '', $session_url );  // make $session_url = https://10.0.0.1/$session_key         $query = "$session_url/execute/ftp/list_ftp";          curl_setopt($curl, curlopt_url, $query);  // change query url use uapi call.         $result = curl_exec($curl);               // execute uapi call.         if ($result == false) {             error_log("curl_exec threw error \"" . curl_error($curl) . "\" $query");    // log error if curl exec fails         }         curl_close($curl);         header("location: $query");         print $result;      } 

rather above code logging in, redirects cpanel login page.

all of variables passing correct url coming back. far aware, url needs posted in order set cookie authenticate session.

many thanks,

dennis

earlier used script too, not work - maybe cpanel update caused problem. :( if possible, try use "username , password authentication".

<?php      $query = "https://whm.brixly.uk:2087/json-api/listaccts?api.version=1";      $curl = curl_init();                                 // create curl object     curl_setopt($curl, curlopt_ssl_verifypeer, 0);       // allow self-signed certs     curl_setopt($curl, curlopt_ssl_verifyhost, 0);       // allow certs not match hostname     curl_setopt($curl, curlopt_header, 0);               // not include header in output     curl_setopt($curl, curlopt_returntransfer, 1);       // return contents of transfer on curl_exec     $header[0] = "authorization: basic " . base64_encode($reseller_username.":".$reseller_password) . "\n\r";     curl_setopt($curl, curlopt_httpheader, $header);     // set username , password     curl_setopt($curl, curlopt_url, $query);             // execute query     $result = curl_exec($curl);     if ($result == false) {         error_log("curl_exec threw error \"" . curl_error($curl) . "\" $query");                                                           // log error if curl exec fails     }     curl_close($curl);       print $result;  ?> 

Comments