SATS/lib/api/source/sync.php

184 lines
4.4 KiB
PHP
Raw Normal View History

<?php
require_once __DIR__.'/../../include/php/const';
function api_sync(){
/* [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');
return 127;
2017-01-27 19:56:02 +00:00
}
// remove unwanted spaces or linebreaks
$url = preg_replace('/\s/', '', $url).'/sync/';
/* (2) Fetch machine id */
$id_machine = @file_get_contents(ID_CONF);
if( $id_machine === false ){
slog("Cannot find machine id", 'api:sync','update');
return 127;
}
$id_machine = (int) preg_replace('/\s/', '', $id_machine);
/* (3) Fetch cyclic hash */
$hash = syscall(SOURCE_DIR.'/lib/cyclic-hash/hash');
2017-01-27 19:56:02 +00:00
if( strlen($hash) != 128 ){
slog("Wrong hash length (".strlen($hash).")", 'api:sync','update');
return 127;
2017-01-27 19:56:02 +00:00
}
/* (4) Try new hash if available */
$new = syscall(SOURCE_DIR.'/lib/cyclic-hash/new');
2017-05-09 10:27:09 +00:00
if( $new === false ){
2017-01-30 09:59:52 +00:00
slog("cyclic-hash:new returned $new EXIT_STATUS", 'api:sync','update');
return 127;
2017-01-27 19:56:02 +00:00
}
/* (5) Fetch machine unlock code */
$unlock_code = @file_get_contents(UNLOCK_CODE);
if( $unlock_code === false ){
slog("Cannot find unlock code", 'api:sync','update');
return 127;
2017-01-27 19:56:02 +00:00
}
$unlock_code = preg_replace('/\s/', '', $unlock_code);
2017-05-09 10:27:09 +00:00
/* [2] Create httpRequest base
=========================================================*/
/* (1) Set URL */
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
/* (2) Set HTTP method -> POST */
curl_setopt($curl, CURLOPT_POST, true);
/* (3) Additional options */
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // allow SSL
/* [3] Manage post data
=========================================================*/
/* (1) Set post data */
$postarray = [
'id_machine' => $id_machine,
'token' => $hash,
'unlock' => $unlock_code
];
/* (2) Add new hash if renew */
if( strlen($new) == 128 )
$postarray['token'] = $new;
/* (3) Set postdata raw to curl */
curl_setopt($curl, CURLOPT_POSTFIELDS, $postarray);
/* [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;
}
$wh_tok = preg_replace('/\s/', '', $wh_tok);
/* (2) Set Auth header digest */
curl_setopt($curl, CURLOPT_HTTPHEADER, [
"Authorization: Digest $wh_tok"
]);
/* [5] Send and catch request response
=========================================================*/
/* (1) Send and catch response */
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
/* (2) Save request+response to file */
file_put_contents(TMP_DIR.'/api.request', $postarray);
file_put_contents(TMP_DIR.'/api.response', $response);
/* (3) Close request */
curl_close($curl);
2017-05-09 10:27:09 +00:00
/* (4) 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;
}
/* [6] Response management
2017-01-27 19:56:02 +00:00
=========================================================*/
/* (1) Try to json_decode response */
$response_arr = json_decode($response, true);
// if cannot, abort
if( is_null($response_arr) ){
slog('Cannot parse HTTP response', 'api:sync', 'update');
return 127;
}
/* (2) Check response error */
if( !isset($response_arr['error']) || $response_arr['error'] != 0 ){
slog('API error not on \'Success\'', 'api:sync', 'update');
return 127;
}
/* [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:sync','update');
return 127;
}
slog('HTTP Response succesfully received', 'api:sync', 'update');
/* [8] Deploy received data
=========================================================*/
/* (1) Manage response deployement */
$deploy = syscall(SOURCE_DIR.'/lib/api/deploy sync');
2017-05-09 10:27:09 +00:00
/* (2) Return state */
return ($deploy === true) ? 0 : 127;
2017-05-09 10:27:09 +00:00
}
$exec = api_sync();
2017-05-09 10:27:09 +00:00
if( $exec == 0 ) slog('Success', 'api:sync', 'update');
else slog('Failure', 'api:sync', 'update');
echo $exec;
die($exec);
2017-05-09 10:27:09 +00:00
?>