diff --git a/lib/api/init b/lib/api/init new file mode 100755 index 0000000..b35485c --- /dev/null +++ b/lib/api/init @@ -0,0 +1,3 @@ +#!/bin/sh + +/usr/bin/env php $(realpath $(dirname $0))/source/init.php; diff --git a/lib/api/source/deploy.php b/lib/api/source/deploy.php new file mode 100755 index 0000000..f2f4a6e --- /dev/null +++ b/lib/api/source/deploy.php @@ -0,0 +1,40 @@ + diff --git a/lib/api/source/init.php b/lib/api/source/init.php new file mode 100755 index 0000000..ff01337 --- /dev/null +++ b/lib/api/source/init.php @@ -0,0 +1,153 @@ + POST */ + curl_setopt($curl, CURLOPT_POST, true); + + /* (3) Additional options */ + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + + + + /* [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:init','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) Close request */ + curl_close($curl); + + /* (3) Return response as result */ + if( $response === false ){ + slog("Request error", 'api:init','update'); + return 127; + } + + + + /* [6] 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; + } + + + /* [6] Response management + =========================================================*/ + /* (1) Writes request to temporary pipe */ + file_put_contents(TMP_DIR.'/api.response', $response); + + /* (2) Manage response deployement */ + $deploy = syscall(SOURCE_DIR.'/lib/api/deploy init'); + + /* (3) Return state */ + return ($deploy === true) ? 0 : 127; + + } + + echo api_init(); + + + +?> diff --git a/lib/api/source/sync.php b/lib/api/source/sync.php index 7254eea..c0768a4 100755 --- a/lib/api/source/sync.php +++ b/lib/api/source/sync.php @@ -15,13 +15,14 @@ } // remove unwanted spaces or linebreaks - $url = preg_replace('/\s/', '', $url); + $url = preg_replace('/\s/', '', $url).'/sync'; + /* (2) Fetch cyclic hash */ $hash = syscall(SOURCE_DIR.'/lib/cyclic-hash/hash'); if( strlen($hash) != 128 ){ - slog("Wrong cyclic-hash:hash hash length (".strlen($hash).")", 'api:sync','update'); + slog("Wrong hash length (".strlen($hash).")", 'api:sync','update'); return 127; } @@ -33,21 +34,18 @@ return 127; } - /* (4) Generate the multipart boundary */ - $boundary = 'boundary--'.hash('sha512', uniqid()).'--boundary'; - - /* (5) Fetch data */ + /* (4) Fetch data */ $data = json_decode(syscall(SOURCE_DIR.'/lib/api/fetch')); if( is_null($data) ){ slog("api:fetch returned unreadable content", 'api:sync','update'); $data = []; } - + - /* [2] Create httpRequest basis + /* [2] Create httpRequest base =========================================================*/ /* (1) Set URL */ $curl = curl_init(); @@ -56,14 +54,17 @@ /* (2) Set HTTP method -> POST */ curl_setopt($curl, CURLOPT_POST, true); + /* (3) Additional options */ + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + /* [3] Manage post data =========================================================*/ /* (1) Set post data */ $postarray = [ - 'token' => $hash, - 'data' => json_encode($data) + 'token' => $hash, + 'data' => json_encode($data) ]; /* (2) Add renew if renew */ @@ -74,14 +75,32 @@ curl_setopt($curl, CURLOPT_POSTFIELDS, $postarray); - /* [4] Send and catch request response + /* [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) Close request */ - //curl_close($curl); + curl_close($curl); /* (3) Return response as result */ if( $response === false ){ @@ -90,7 +109,8 @@ } - /* [5] Decrement cyclic-hash so request has ran successfully + + /* [6] Decrement cyclic-hash so request has ran successfully =========================================================*/ /* (1) Decrement the hash */ $decr = syscall(SOURCE_DIR.'/lib/cyclic-hash/decr'); @@ -100,22 +120,29 @@ return 127; } - - - - - /* [5] Response management + /* [6] Response management =========================================================*/ - /* (1) Writes request to temporary pipe */ + /* (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 */ file_put_contents(TMP_DIR.'/api.response', $response); - /* (2) Manage response deployement */ - $deploy = syscall(SOURCE_DIR.'/lib/api/deploy'); - - /* (3) Return state */ - return ($deploy === true); + /* (4) Manage response deployement */ + $deploy = syscall(SOURCE_DIR.'/lib/api/deploy sync'); + /* (5) Return state */ + return ($deploy === true) ? 0 : 127; + } echo api_request(); diff --git a/lib/include/bash/const b/lib/include/bash/const index 5c742d7..81ded72 100755 --- a/lib/include/bash/const +++ b/lib/include/bash/const @@ -19,6 +19,8 @@ export BRANCH_CONF="$CONF_DIR/machine.branch"; export ID_CONF="$CONF_DIR/machine.id"; export URL_CONF="$CONF_DIR/api.url"; export AUTH_CONF="$CONF_DIR/auth.list"; +export WAREHOUSE_TOK="$CONF_DIR/warehouse.token"; +export UNLOCK_CODE="$CONF_DIR/machine.unlock"; # LOG FILES export BOOT_LOG="$LOG_DIR/boot.log"; diff --git a/lib/include/php/const b/lib/include/php/const index a25e726..844af96 100755 --- a/lib/include/php/const +++ b/lib/include/php/const @@ -9,7 +9,7 @@ define('DATA_DIR', ROOT_DIR.'/data'); define('CONF_DIR', ROOT_DIR.'/conf'); define('SOURCE_DIR', ROOT_DIR.'/source'); - #define('SOURCE_DIR', '/home/xdrm-brackets/Desktop/git.xdr/home/xdrm-brackets/Desktop/git.xdrm.io/logauth-sats'); + #define('SOURCE_DIR', '/home/xdrm-brackets/Desktop/git.xdrm.io/logauth-sats'); define('TMP_DIR', ROOT_DIR.'/tmp'); # CONFIGURATION FILES @@ -19,6 +19,8 @@ define('ID_CONF', CONF_DIR.'/machine.id'); define('URL_CONF', CONF_DIR.'/api.url'); define('AUTH_CONF', CONF_DIR.'/auth.list'); + define('WAREHOUSE_TOK', CONF_DIR.'/warehouse.token'); + define('UNLOCK_CODE', CONF_DIR.'/machine.unlock'); # LOG FILES define('BOOT_LOG', LOG_DIR.'/boot.log');