diff options
-rwxr-xr-x | bin/ak-enter | 196 | ||||
-rwxr-xr-x | lib/_ak_zblock | 192 |
2 files changed, 195 insertions, 193 deletions
diff --git a/bin/ak-enter b/bin/ak-enter index 7b72813..be20476 100755 --- a/bin/ak-enter +++ b/bin/ak-enter @@ -35,6 +35,7 @@ source $AK_LIBDIR/_ak_log source $AK_LIBDIR/_ak_script source $AK_LIBDIR/_ak_ipfs source $AK_LIBDIR/_ak_gpg +source $AK_LIBDIR/_ak_zblock # Start of tests #entrance="QmW5WVXCJfhb4peHG6cbEdamC24vZzMX2Vz386vpENh38U" @@ -110,197 +111,12 @@ do echo -n '[' fi counter=$(expr $counter + 1) - # Check if $zblock exists as variable - if [ ! -v $zblock ] + _ak_zblock_show "$zblock" + if [ "$limit" != "0" ] && [ "$limit" == "$counter" ] then - # Check if it is not our seed cause if it is we skip this part - if [ "$zblock" != "$seed" ] - then - # Reset timestamp since it's introduced later - timestamp='' - # Announce to logs which ZBLOCK is being read at the moment - logit "INFO" "Examining $zblock" - - _ak_ipfs_cid_v0_check "$zblock" - - # We check if any $zblock at all - _ak_ipfs_cat $zblock | jq -c -M > $AK_ZBLOCKDIR/$zblock - if [ "$?" -ne 0 ] - then - logit "ERROR" "ZBLOCK $zblock READ failed" - exit 1 - fi - logit "INFO" "ZBLOCK $zblock READ" - echo -n '{' -# echo -n '"id":"'$counter'",' - echo -n '"zblock":"'$zblock'",' - - # If it's JSON formated - cat $AK_ZBLOCKDIR/$zblock | jq -M > /dev/null 2>&1 - if [ "$?" -ne 0 ] - then - logit "ERROR" "ZBLOCK $zblock is not JSON" - cat /dev/null > $AK_ZBLOCKDIR/$zblock > /dev/null 2>&1 - exit 1 - fi - logit "INFO" "ZBLOCK $zblock is JSON" - - # Be sure that there are the expected values - # We need 'block' and 'block_signature' inside a 'zblock' - # Exit if any is missing - block="$(cat $AK_ZBLOCKDIR/$zblock | jq -M -r .block)" - if [ "$block" == "null" ] - then - logit "ERROR" "ZBLOCK $zblock has no block" - exit 1 - fi - _ak_ipfs_cid_v0_check "$block" - logit "INFO" "ZBLOCK $zblock has block" - - block_signature="$(cat $AK_ZBLOCKDIR/$zblock | jq -M -r .block_signature)" - if [ "$block_signature" == "null" ] - then - logit "ERROR" "ZBLOCK $zblock doesn't contain a block_signature" - exit 1 - fi - _ak_ipfs_cid_v0_check "$block_signature" - logit "INFO" "ZBLOCK $zblock contains a block_signature" - - # Same as above applies to BLOCK and DATA subparts of each ZBLOCK - # BLOCKS - echo -n '"block":"'$block'",' - _ak_ipfs_cat $block | jq -c -M > $AK_BLOCKDIR/$block - cat $AK_BLOCKDIR/$block | jq -M > /dev/null 2>&1 - if [ "$?" -ne 0 ] - then - logit "ERROR" "BLOCK $block READ failed" - exit 1 - fi - - grep -e 'timestamp' -e 'gpg' -e 'data' -e 'action' -e 'detach' -e 'previous' $AK_BLOCKDIR/$block > /dev/null 2>&1 - if [ "$?" -ne 0 ] - then - logit "ERROR" "BLOCK $block is NOT a valid block" - exit 1 - fi - logit "INFO" "BLOCK $block is a block" - - action="$(cat $AK_BLOCKDIR/$block | jq -M -r .action)" - module="$(echo $action | sed -e 's/\// /g' | awk '{ print $1 }')" - logit "INFO" "DATA is $module module." - - command="$(echo $action | sed -e 's/\// /g' | awk '{ print $2 }')" - logit "INFO" "COMMAND is $command" - - timestamp="$(cat $AK_BLOCKDIR/$block | jq -M -r .timestamp)" - if [ "$timestamp" != "null" ] - then - echo -n '"timestamp":"'$timestamp'",' - fi - - echo -n '"block_signature":"'$block_signature'",' - - detach="$(cat $AK_BLOCKDIR/$block | jq -M -r .detach)" - echo -n '"detach":"'$detach'",' - - echo -n '"module":"'$module'",' - - echo -n '"action":"'$command'",' - - gpg="$(cat $AK_BLOCKDIR/$block | jq -M -r .gpg)" - echo -n '"gpg":"'$gpg'",' - - if [ $verify == 1 ] - then - _ak_ipfs_get $gpg > /dev/null 2>&1 - if [ "$?" -ne 0 ] - then - logit "ERROR" "Could not get GPG key: $gpg ." - exit 1 - fi - _ak_gpg_key_import_from_file $gpg > /dev/null 2>&1 - if [ "$?" -ne 0 ] - then - logit "ERROR" "Could not import GPG key: $gpg ." - exit 1 - fi - _ak_ipfs_get $block_signature > /dev/null 2>&1 - if [ "$?" -ne 0 ] - then - logit "ERROR" "Error while getting $block_signature for $block" - exit 1 - fi - mv $block_signature $block.asc - logit "INFO" "Block signature downloaded" - - _ak_ipfs_get $block > /dev/null 2>&1 - if [ "$?" -ne 0 ] - then - logit "ERROR" "Could not get $block block" - exit 1 - fi - logit "INFO" "Downloaded block $block." - - _ak_gpg_verify_signature $block.asc $block > /dev/null 2>&1 - if [ "$?" -ne 0 ] - then - logit "ERROR" "Could not verify $block with GPG key $gpg." - exit 1 - fi - logit "GPG" "$gpg signature of $block is verified." - fi - - data="$(cat $AK_BLOCKDIR/$block | jq -M -r .data)" - _ak_ipfs_cid_v0_check "$data" - ak-data-expand $data $gpg - if [ "$?" -ne 0 ] - then - logit "ERROR" "Failed on data signature verification [data: $data, gpg: $gpg, zblock: $zblock]" - exit 1 - fi - - # DATA - # Only print to stdout - # _ak_ipfs_cat $data - touch $AK_DATADIR/$data - - # Now, since we sourced the BLOCK to our terminal, we can search - # for $previous variable. In case we don't find one, we append one - # and we exit. - previous="$(cat $AK_BLOCKDIR/$block | jq -M -r .previous)" - if [ -v $previous ] - then - logit "WARNING" "Block $block has no previous zblock, appending pseudo genesis to exit with 2." - echo -n '"previous":"'$seed'"},{"genesis":"genesis"}]' - logit "INFO" "Reached pseudo-genesis, counted $counter zblocks." - exit 2 - - # Otherwise, we inform of the sequence - else - #echo "$zblock after $previous" - logit "INFO" "Found a previous block for $zblock: $previous" - echo -n '"previous":"'$previous'"}' - zblock=$previous - fi - if [ "$limit" != "0" ] && [ "$limit" == "$counter" ] - then - echo -n ']' - exit 0 - else - echo -n ',' - fi - - # Now check if it is equal to the seed - # which apparently means we reached the seed. - elif [ "$zblock" == "$seed" ] - then - echo -n '{"genesis":"genesis"}]' - logit "INFO" "Reached $seed, counted $counter zblocks." - exit 0 - fi - # And finally, if nothing is there exit with error + echo -n ']' + exit 0 else - echo "Check not passed... No previous IPFS CID" - exit 1 + echo -n ',' fi done diff --git a/lib/_ak_zblock b/lib/_ak_zblock index cb6af36..324d3aa 100755 --- a/lib/_ak_zblock +++ b/lib/_ak_zblock @@ -26,10 +26,196 @@ _ak_zblock_show(){ else entrance="$(cat $AK_ZLATEST)" fi - ak-enter -l 1 "$entrance" > "$AK_CACHEDIR/fzblocks/$entrance" + # ak-enter -l 1 "$entrance" > "$AK_CACHEDIR/fzblocks/$entrance" + # Check if $zblock exists as variable + if [ ! -v $zblock ] + then + # Check if it is not our seed cause if it is we skip this part + if [ "$zblock" != "$seed" ] + then + # Reset timestamp since it's introduced later + timestamp='' + # Announce to logs which ZBLOCK is being read at the moment + logit "INFO" "Examining $zblock" + + _ak_ipfs_cid_v0_check "$zblock" + + # We check if any $zblock at all + _ak_ipfs_cat $zblock | jq -c -M > $AK_ZBLOCKDIR/$zblock + if [ "$?" -ne 0 ] + then + logit "ERROR" "ZBLOCK $zblock READ failed" + exit 1 + fi + logit "INFO" "ZBLOCK $zblock READ" + echo -n '{' +# echo -n '"id":"'$counter'",' + echo -n '"zblock":"'$zblock'",' + + # If it's JSON formated + cat $AK_ZBLOCKDIR/$zblock | jq -M > /dev/null 2>&1 + if [ $? -ne 0 ] + then + logit "ERROR" "ZBLOCK $zblock is not JSON" + cat /dev/null > $AK_ZBLOCKDIR/$zblock > /dev/null 2>&1 + exit 1 + fi + logit "INFO" "ZBLOCK $zblock is JSON" + + # Be sure that there are the expected values + # We need 'block' and 'block_signature' inside a 'zblock' + # Exit if any is missing + block="$(cat $AK_ZBLOCKDIR/$zblock | jq -M -r .block)" + if [ "$block" == "null" ] + then + logit "ERROR" "ZBLOCK $zblock has no block" + exit 1 + fi + _ak_ipfs_cid_v0_check "$block" + logit "INFO" "ZBLOCK $zblock has block" + + block_signature="$(cat $AK_ZBLOCKDIR/$zblock | jq -M -r .block_signature)" + if [ "$block_signature" == "null" ] + then + logit "ERROR" "ZBLOCK $zblock doesn't contain a block_signature" + exit 1 + fi + _ak_ipfs_cid_v0_check "$block_signature" + logit "INFO" "ZBLOCK $zblock contains a block_signature" + + # Same as above applies to BLOCK and DATA subparts of each ZBLOCK + # BLOCKS + echo -n '"block":"'$block'",' + _ak_ipfs_cat $block | jq -c -M > $AK_BLOCKDIR/$block + cat $AK_BLOCKDIR/$block | jq -M > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "ERROR" "BLOCK $block READ failed" + exit 1 + fi + + grep -e 'timestamp' -e 'gpg' -e 'data' -e 'action' -e 'detach' -e 'previous' $AK_BLOCKDIR/$block > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "ERROR" "BLOCK $block is NOT a valid block" + exit 1 + fi + logit "INFO" "BLOCK $block is a block" + + action="$(cat $AK_BLOCKDIR/$block | jq -M -r .action)" + module="$(echo $action | sed -e 's/\// /g' | awk '{ print $1 }')" + logit "INFO" "DATA is $module module." + + command="$(echo $action | sed -e 's/\// /g' | awk '{ print $2 }')" + logit "INFO" "COMMAND is $command" + + timestamp="$(cat $AK_BLOCKDIR/$block | jq -M -r .timestamp)" + if [ "$timestamp" != "null" ] + then + echo -n '"timestamp":"'$timestamp'",' + fi + + echo -n '"block_signature":"'$block_signature'",' + + detach="$(cat $AK_BLOCKDIR/$block | jq -M -r .detach)" + echo -n '"detach":"'$detach'",' + + echo -n '"module":"'$module'",' + + echo -n '"action":"'$command'",' + + gpg="$(cat $AK_BLOCKDIR/$block | jq -M -r .gpg)" + echo -n '"gpg":"'$gpg'",' + + if [ $verify == 1 ] + then + _ak_ipfs_get $gpg > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "ERROR" "Could not get GPG key: $gpg ." + exit 1 + fi + _ak_gpg_key_import_from_file $gpg > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "ERROR" "Could not import GPG key: $gpg ." + exit 1 + fi + _ak_ipfs_get $block_signature > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "ERROR" "Error while getting $block_signature for $block" + exit 1 + fi + mv $block_signature $block.asc + logit "INFO" "Block signature downloaded" + + _ak_ipfs_get $block > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "ERROR" "Could not get $block block" + exit 1 + fi + logit "INFO" "Downloaded block $block." + + _ak_gpg_verify_signature $block.asc $block > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "ERROR" "Could not verify $block with GPG key $gpg." + exit 1 + fi + logit "GPG" "$gpg signature of $block is verified." + fi + + data="$(cat $AK_BLOCKDIR/$block | jq -M -r .data)" + _ak_ipfs_cid_v0_check "$data" + ak-data-expand $data $gpg + if [ "$?" -ne 0 ] + then + logit "ERROR" "Failed on data signature verification [data: $data, gpg: $gpg, zblock: $zblock]" + exit 1 + fi + + # DATA + # Only print to stdout + # _ak_ipfs_cat $data + touch $AK_DATADIR/$data + + # Now, since we sourced the BLOCK to our terminal, we can search + # for $previous variable. In case we don't find one, we append one + # and we exit. + previous="$(cat $AK_BLOCKDIR/$block | jq -M -r .previous)" + if [ -v $previous ] + then + logit "WARNING" "Block $block has no previous zblock, appending pseudo genesis to exit with 2." + echo -n '"previous":"'$seed'"},{"genesis":"genesis"}]' + logit "INFO" "Reached pseudo-genesis, counted $counter zblocks." + exit 2 + + # Otherwise, we inform of the sequence + else + #echo "$zblock after $previous" + logit "INFO" "Found a previous block for $zblock: $previous" + echo -n '"previous":"'$previous'"}' + zblock=$previous + fi + + # Now check if it is equal to the seed + # which apparently means we reached the seed. + elif [ "$zblock" == "$seed" ] + then + echo -n '{"genesis":"genesis"}]' + logit "INFO" "Reached $seed, counted $counter zblocks." + exit 0 + fi + # And finally, if nothing is there exit with error + else + echo "Check not passed... No previous IPFS CID" + exit 1 + fi } + # _ak_zblock_manipulator(){ -# #!/bin/bash # # This file describe the structure of the ArchingKaos messages in their basis. # # # # As previously thought, we exchange one IPFS hash through whatever means we can. @@ -197,7 +383,7 @@ _ak_zblock_gen_html(){ fi arg="$(mktemp)" - ak-enter -l 1 "$1" | jq '.[]' > $arg + _ak_zblock_show "$1" | jq > $arg ( \ # Create HTML document |