2017-01-27 19:41:02 +00:00
|
|
|
<?php
|
|
|
|
|
2017-01-30 09:39:45 +00:00
|
|
|
require_once __DIR__.'/../../include/php/const';
|
2017-01-27 19:41:02 +00:00
|
|
|
|
2017-01-27 19:56:02 +00:00
|
|
|
function api_request(){
|
2017-01-27 19:41:02 +00:00
|
|
|
|
|
|
|
/* [1] Fetch & generate useful data
|
|
|
|
=========================================================*/
|
|
|
|
/* (1) Fetch target url */
|
|
|
|
$url = @file_get_contents(URL_CONF);
|
|
|
|
|
2017-01-27 19:56:02 +00:00
|
|
|
if( $url === false ){
|
2017-01-30 09:59:52 +00:00
|
|
|
slog("Cannot find server's api url", 'api:sync','update');
|
2017-01-27 19:41:02 +00:00
|
|
|
return 127;
|
2017-01-27 19:56:02 +00:00
|
|
|
}
|
2017-01-27 19:41:02 +00:00
|
|
|
|
2017-01-31 18:26:32 +00:00
|
|
|
// remove unwanted spaces or linebreaks
|
2017-02-19 14:44:59 +00:00
|
|
|
$url = preg_replace('/\s/', '', $url).'/sync/';
|
2017-02-19 10:19:40 +00:00
|
|
|
|
2017-01-31 18:26:32 +00:00
|
|
|
|
2017-01-27 19:41:02 +00:00
|
|
|
/* (2) Fetch cyclic hash */
|
|
|
|
$hash = syscall(SOURCE_DIR.'/lib/cyclic-hash/hash');
|
|
|
|
|
2017-01-27 19:56:02 +00:00
|
|
|
if( strlen($hash) != 128 ){
|
2017-02-19 10:19:40 +00:00
|
|
|
slog("Wrong hash length (".strlen($hash).")", 'api:sync','update');
|
2017-01-27 19:41:02 +00:00
|
|
|
return 127;
|
2017-01-27 19:56:02 +00:00
|
|
|
}
|
2017-01-27 19:41:02 +00:00
|
|
|
|
|
|
|
/* (3) Try new hash if available */
|
|
|
|
$new = syscall(SOURCE_DIR.'/lib/cyclic-hash/new');
|
|
|
|
|
2017-01-27 19:56:02 +00:00
|
|
|
if( $new === false ){
|
2017-01-30 09:59:52 +00:00
|
|
|
slog("cyclic-hash:new returned $new EXIT_STATUS", 'api:sync','update');
|
2017-01-27 19:41:02 +00:00
|
|
|
return 127;
|
2017-01-27 19:56:02 +00:00
|
|
|
}
|
2017-01-27 19:41:02 +00:00
|
|
|
|
2017-02-19 10:19:40 +00:00
|
|
|
/* (4) Fetch data */
|
2017-01-27 19:56:02 +00:00
|
|
|
$data = json_decode(syscall(SOURCE_DIR.'/lib/api/fetch'));
|
2017-01-27 19:41:02 +00:00
|
|
|
|
2017-01-27 19:56:02 +00:00
|
|
|
if( is_null($data) ){
|
2017-01-30 09:59:52 +00:00
|
|
|
slog("api:fetch returned unreadable content", 'api:sync','update');
|
2017-01-28 16:59:54 +00:00
|
|
|
$data = [];
|
2017-01-27 19:56:02 +00:00
|
|
|
}
|
2017-02-19 10:19:40 +00:00
|
|
|
|
2017-01-27 19:41:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2017-02-19 10:19:40 +00:00
|
|
|
/* [2] Create httpRequest base
|
2017-01-27 19:41:02 +00:00
|
|
|
=========================================================*/
|
|
|
|
/* (1) Set URL */
|
2017-01-28 17:58:49 +00:00
|
|
|
$curl = curl_init();
|
|
|
|
curl_setopt($curl, CURLOPT_URL, $url);
|
2017-01-27 19:41:02 +00:00
|
|
|
|
|
|
|
/* (2) Set HTTP method -> POST */
|
|
|
|
curl_setopt($curl, CURLOPT_POST, true);
|
|
|
|
|
2017-02-19 10:19:40 +00:00
|
|
|
/* (3) Additional options */
|
|
|
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
|
|
|
|
2017-01-27 19:41:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* [3] Manage post data
|
|
|
|
=========================================================*/
|
|
|
|
/* (1) Set post data */
|
|
|
|
$postarray = [
|
2017-02-19 10:19:40 +00:00
|
|
|
'token' => $hash,
|
|
|
|
'data' => json_encode($data)
|
2017-01-27 19:41:02 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
/* (2) Add renew if renew */
|
|
|
|
if( strlen($new) == 128 )
|
|
|
|
$postarray['renew'] = $new;
|
|
|
|
|
2017-01-31 18:26:32 +00:00
|
|
|
/* (3) Set postdata raw to curl */
|
|
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $postarray);
|
2017-01-27 19:41:02 +00:00
|
|
|
|
|
|
|
|
2017-02-19 10:19:40 +00:00
|
|
|
/* [4] Manage authentication
|
|
|
|
=========================================================*/
|
|
|
|
/* (1) Fetch warehouse token */
|
|
|
|
$wh_tok = @file_get_contents(WAREHOUSE_TOK);
|
|
|
|
|
|
|
|
if( $wh_tok === false ){
|
|
|
|
slog("Cannot find warehouse token", 'api:sync','update');
|
|
|
|
return 127;
|
|
|
|
}
|
|
|
|
|
2017-02-19 11:31:36 +00:00
|
|
|
$wh_tok = preg_replace('/\s/', '', $wh_tok);
|
|
|
|
|
2017-02-19 10:19:40 +00:00
|
|
|
/* (2) Set Auth header digest */
|
|
|
|
curl_setopt($curl, CURLOPT_HTTPHEADER, [
|
|
|
|
"Authorization: Digest $wh_tok"
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
|
|
/* [5] Send and catch request response
|
2017-01-27 19:41:02 +00:00
|
|
|
=========================================================*/
|
|
|
|
/* (1) Send and catch response */
|
2017-01-28 17:58:49 +00:00
|
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
2017-01-27 19:41:02 +00:00
|
|
|
$response = curl_exec($curl);
|
|
|
|
|
|
|
|
/* (2) Close request */
|
2017-02-19 10:19:40 +00:00
|
|
|
curl_close($curl);
|
2017-01-27 19:41:02 +00:00
|
|
|
|
|
|
|
/* (3) Return response as result */
|
2017-01-27 19:56:02 +00:00
|
|
|
if( $response === false ){
|
2017-01-30 09:59:52 +00:00
|
|
|
slog("Request error", 'api:sync','update');
|
2017-01-27 19:56:02 +00:00
|
|
|
return 127;
|
|
|
|
}
|
|
|
|
|
2017-02-19 10:19:40 +00:00
|
|
|
/* [6] Response management
|
2017-01-27 19:56:02 +00:00
|
|
|
=========================================================*/
|
2017-02-19 11:31:36 +00:00
|
|
|
/* (1) Try to json_decode response */
|
|
|
|
$response_arr = json_decode($response, true);
|
|
|
|
|
|
|
|
// if cannot, abort
|
|
|
|
if( is_null($response_arr) )
|
|
|
|
return 127;
|
|
|
|
|
|
|
|
/* (2) Check response error */
|
|
|
|
if( !isset($response_arr['error']) || $response_arr['error'] != 0 )
|
|
|
|
return 127;
|
|
|
|
|
|
|
|
/* (3) Writes request to temporary pipe */
|
2017-01-27 19:56:02 +00:00
|
|
|
file_put_contents(TMP_DIR.'/api.response', $response);
|
|
|
|
|
2017-02-19 14:44:59 +00:00
|
|
|
|
|
|
|
/* [7] Decrement cyclic-hash so request has ran successfully
|
|
|
|
=========================================================*/
|
|
|
|
/* (1) Decrement the hash */
|
|
|
|
$decr = syscall(SOURCE_DIR.'/lib/cyclic-hash/decr');
|
|
|
|
|
|
|
|
if( $decr === false ){
|
|
|
|
slog("cyclic-hash:decr returned $decr EXIT_STATUS", 'api:init','update');
|
|
|
|
return 127;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
/* [8] Deploy received data
|
|
|
|
=========================================================*/
|
|
|
|
/* (1) Manage response deployement */
|
2017-02-19 11:31:36 +00:00
|
|
|
$deploy = syscall(SOURCE_DIR.'/lib/api/deploy sync');
|
2017-01-27 19:56:02 +00:00
|
|
|
|
2017-02-19 14:44:59 +00:00
|
|
|
/* (2) Return state */
|
2017-02-19 10:19:40 +00:00
|
|
|
return ($deploy === true) ? 0 : 127;
|
2017-02-19 14:44:59 +00:00
|
|
|
|
2017-02-19 10:19:40 +00:00
|
|
|
|
2017-01-27 19:41:02 +00:00
|
|
|
}
|
|
|
|
|
2017-02-19 14:44:59 +00:00
|
|
|
die(api_request());
|
2017-01-27 19:41:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
?>
|