diff options
author | kaotisk <kaotisk@arching-kaos.org> | 2023-01-21 08:50:18 +0200 |
---|---|---|
committer | kaotisk <kaotisk@arching-kaos.org> | 2023-01-21 08:50:18 +0200 |
commit | 2e1735069f128ec1b40d0f9890d4791849094d42 (patch) | |
tree | 75d472fb850bb181a26fe04073c17444db0d252d /bin/enter | |
parent | 07db19f526755d3d8acc3f0b6b7f678b00650400 (diff) | |
download | arching-kaos-tools-2e1735069f128ec1b40d0f9890d4791849094d42.tar.gz arching-kaos-tools-2e1735069f128ec1b40d0f9890d4791849094d42.tar.bz2 arching-kaos-tools-2e1735069f128ec1b40d0f9890d4791849094d42.zip |
Replaced tabs with spaces, changed exit code checkers to only check for non-zero values, added exit when ak-data-expand fails.
Diffstat (limited to 'bin/enter')
-rwxr-xr-x | bin/enter | 510 |
1 files changed, 253 insertions, 257 deletions
@@ -19,21 +19,21 @@ PROGRAM="$(basename $0)" logit(){ - logthis "<$PROGRAM>" "$1" "$2" + logthis "<$PROGRAM>" "$1" "$2" } usage(){ - echo "$PROGRAM - Crawl an arching kaos chain" - echo "-----------------------------------" - echo "Usage:" - echo " --help, -h Print this help and exit" - echo " --chain <ipns-link>, -n <ipns-link> Crawl specified chain" - echo " --show-zblocks-only, -z Show only zblocks" - echo " --no-verify, -nV Don't verify signatures" - echo " <ipfs-link> Specify IPFS CID for entrance" - echo "" - echo "Note that combined flags don't work for now" - echo "Running with no flags crawls your chain based on ZLATEST environment variable" + echo "$PROGRAM - Crawl an arching kaos chain" + echo "-----------------------------------" + echo "Usage:" + echo " --help, -h Print this help and exit" + echo " --chain <ipns-link>, -n <ipns-link> Crawl specified chain" + echo " --show-zblocks-only, -z Show only zblocks" + echo " --no-verify, -nV Don't verify signatures" + echo " <ipfs-link> Specify IPFS CID for entrance" + echo "" + echo "Note that combined flags don't work for now" + echo "Running with no flags crawls your chain based on ZLATEST environment variable" } # Start of tests #entrance="QmW5WVXCJfhb4peHG6cbEdamC24vZzMX2Vz386vpENh38U" @@ -43,79 +43,79 @@ usage(){ verify=1 if [ ! -z "$1" ] && [ "$1" == "-h" ] || [ "$1" == "--help" ] then - usage - exit + usage + exit elif [ ! -z "$1" ] && [ "$1" == "-nV" ] || [ "$1" == "--no-verify" ] then - verify=0 - entrance="$(cat $ZLATEST)" + verify=0 + entrance="$(cat $ZLATEST)" elif [ ! -z "$1" ] && [ "$1" == "-n" ] then - entrance="$(ipns-resolve $2)" + entrance="$(ipns-resolve $2)" elif [ ! -z "$1" ] && [ "$1" == "--show-zblocks-only" ] || [ "$1" == "-z" ] then - # Enter temp folder - TEMPASSIN="/tmp/aktmp_$(date -u +%s)" - mkdir $TEMPASSIN - cd $TEMPASSIN - ccounter=0 - entrance="$(cat $ZLATEST)" - seed="$(cat $ZGENESIS)" - echo -n '[' - zblock=$entrance - while true - do - if [ "$counter" == 0 ] - then - echo -n "[" - fi - counter=$(expr $counter + 1) - if [ ! -v $zblock ] - then - if [ "$zblock" != "$seed" ] - then - timestamp='' - echo -n '{"zblock":"'$zblock'",' - ipfs --timeout=10s cat $zblock | json2bash > $TEMPASSIN/tmp-zblock - source $TEMPASSIN/tmp-zblock - ipfs --timeout=10s cat $block | json2bash > $TEMPASSIN/tmp-block - source $TEMPASSIN/tmp-block - logit "[INFO]" "BLOCK REFERENCED" - if [ ! -v $timestamp ] - then - echo -n '"timestamp":"'$timestamp'",' - fi - echo -n '"block_signature":"'$block_signature'",' - echo -n '"gpg":"'$gpg'",' + # Enter temp folder + TEMPASSIN="/tmp/aktmp_$(date -u +%s)" + mkdir $TEMPASSIN + cd $TEMPASSIN + ccounter=0 + entrance="$(cat $ZLATEST)" + seed="$(cat $ZGENESIS)" + echo -n '[' + zblock=$entrance + while true + do + if [ "$counter" == 0 ] + then + echo -n "[" + fi + counter=$(expr $counter + 1) + if [ ! -v $zblock ] + then + if [ "$zblock" != "$seed" ] + then + timestamp='' + echo -n '{"zblock":"'$zblock'",' + ipfs --timeout=10s cat $zblock | json2bash > $TEMPASSIN/tmp-zblock + source $TEMPASSIN/tmp-zblock + ipfs --timeout=10s cat $block | json2bash > $TEMPASSIN/tmp-block + source $TEMPASSIN/tmp-block + logit "[INFO]" "BLOCK REFERENCED" + if [ ! -v $timestamp ] + then + echo -n '"timestamp":"'$timestamp'",' + fi + echo -n '"block_signature":"'$block_signature'",' + echo -n '"gpg":"'$gpg'",' - if [ -v $previous ] - then - logit "[ERROR]" "Block $block has no previous zblock $previous. Appending default genesis to close cleanly." - echo -n '"previous":"genesis"},{"genesis":"genesis"}]' - exit 0 - else - echo -n '"previous":"'$previous'"},' - zblock=$previous - fi - elif [ "$zblock" == "$seed" ] - then - echo -n '{"genesis":"genesis"}]' - logit "[INFO]" "Counter $counter" - exit 0 - fi - else - echo "Check not passed... No previous IPFS CID" - exit 1 - fi + if [ -v $previous ] + then + logit "[ERROR]" "Block $block has no previous zblock $previous. Appending default genesis to close cleanly." + echo -n '"previous":"genesis"},{"genesis":"genesis"}]' + exit 0 + else + echo -n '"previous":"'$previous'"},' + zblock=$previous + fi + elif [ "$zblock" == "$seed" ] + then + echo -n '{"genesis":"genesis"}]' + logit "[INFO]" "Counter $counter" + exit 0 + fi + else + echo "Check not passed... No previous IPFS CID" + exit 1 + fi done elif [ ! -z "$1" ] then - entrance="$1" + entrance="$1" else - # By default we enter from the latest block - # We can alter this by changing this value - entrance="$(cat $ZLATEST)" + # By default we enter from the latest block + # We can alter this by changing this value + entrance="$(cat $ZLATEST)" fi # We assign the IPFS CIDv0 of an empty file as this is used # as our GENESIS block, hence the "seed" that the tree grows @@ -135,199 +135,195 @@ counter=0 # We break the loop from inside the loop while true do - if [ $counter == 0 ] - then - echo -n '[' - fi - counter=$(expr $counter + 1) - # 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" - echo -n '{"zblock":"'$zblock'",' + if [ $counter == 0 ] + then + echo -n '[' + fi + counter=$(expr $counter + 1) + # 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" + echo -n '{"zblock":"'$zblock'",' - # We concatenate the zblock's contents, pipe - # them through filter json2bash and output - # them to tmp-file - # - # We check if any $zblock at all - ipfs --timeout=10s cat $zblock > /dev/null 2>&1 - if [ "$?" == 0 ] - then - logit "[INFO]" "ZBLOCK $zblock READ" - else - logit "[ERROR]" "ZBLOCK $zblock READ failed" - exit 1 - fi - # If it's JSON formated - ipfs --timeout=10s cat $zblock | json_pp > /dev/null 2>&1 - if [ "$?" == 0 ] - then - logit "[INFO]" "ZBLOCK $zblock is JSON" - else - logit "[ERROR]" "ZBLOCK $zblock is not JSON" - exit 1 - fi - # Then we pass it through the filter and save it - ipfs --timeout=10s cat $zblock | json2bash > $TEMPASSIN/tmp-zblock + # We concatenate the zblock's contents, pipe + # them through filter json2bash and output + # them to tmp-file + # + # We check if any $zblock at all + ipfs --timeout=10s cat $zblock > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "[ERROR]" "ZBLOCK $zblock READ failed" + exit 1 + fi + logit "[INFO]" "ZBLOCK $zblock READ" + + # If it's JSON formated + ipfs --timeout=10s cat $zblock | json_pp > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "[ERROR]" "ZBLOCK $zblock is not JSON" + 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 - grep -e 'block_signature' $TEMPASSIN/tmp-zblock > /dev/null 2>&1 - if [ "$?" == 0 ] - then - logit "[INFO]" "ZBLOCK $zblock contains a block_signature" - else - logit "[ERROR]" "ZBLOCK $zblock doesn't contain a block_signature" - exit 1 - fi - grep -e 'block=' $TEMPASSIN/tmp-zblock > /dev/null 2>&1 - if [ "$?" == 0 ] - then - logit "[INFO]" "ZBLOCK $zblock has block" - else - logit "[ERROR]" "ZBLOCK $zblock has no block" - exit 1 - fi + # Then we pass it through the filter and save it + ipfs --timeout=10s cat $zblock | json2bash > $TEMPASSIN/tmp-zblock - # We create files named after each ZBLOCK IPFS CID for later - # reference. Files are empty. - touch $ZBLOCKDIR/$zblock - logit "[INFO]" "Created reference" + # Be sure that there are the expected values + # We need 'block' and 'block_signature' inside a 'zblock' + # Exit if any is missing + grep -e 'block_signature' $TEMPASSIN/tmp-zblock > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "[ERROR]" "ZBLOCK $zblock doesn't contain a block_signature" + exit 1 + fi + logit "[INFO]" "ZBLOCK $zblock contains a block_signature" - # Supposingly you are on a safe environment and you only have - # access to your chain, I would consider mild secure to source - # the files into your bash. - # File an issue/pull request if you think it can be done better!! - source $TEMPASSIN/tmp-zblock - logit "[INFO]" "ZBLOCK SOURCED" + grep -e 'block=' $TEMPASSIN/tmp-zblock > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "[ERROR]" "ZBLOCK $zblock has no block" + exit 1 + fi + logit "[INFO]" "ZBLOCK $zblock has block" - # Same as above applies to BLOCK and DATA subparts of each ZBLOCK - # BLOCKS - echo -n '"block":"'$block'",' - ipfs --timeout=10s cat $block | json2bash > $TEMPASSIN/tmp-block - if [ "$?" == 0 ] - then - logit "[INFO]" "BLOCK $block READ" - else - logit "[ERROR]" "BLOCK $block READ failed" - exit 1 - fi + # We create files named after each ZBLOCK IPFS CID for later + # reference. Files are empty. + touch $ZBLOCKDIR/$zblock + logit "[INFO]" "Created reference" - grep -e 'timestamp' -e 'gpg' -e 'data' -e 'action' -e 'detach' -e 'previous' $TEMPASSIN/tmp-block > /dev/null 2>&1 - if [ "$?" == 0 ] - then - logit "[INFO]" "BLOCK $block is a block" - else - logit "[ERROR]" "BLOCK $block is NOT a valid block" - exit 1 - fi + # Supposingly you are on a safe environment and you only have + # access to your chain, I would consider mild secure to source + # the files into your bash. + # File an issue/pull request if you think it can be done better!! + source $TEMPASSIN/tmp-zblock + logit "[INFO]" "ZBLOCK SOURCED" - source $TEMPASSIN/tmp-block - logit "[INFO]" "BLOCK $block SOURCED" - touch $BLOCKDIR/$block - logit "[INFO]" "BLOCK REFERENCED" - 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" - if [ ! -v $timestamp ] - then - echo -n '"timestamp":"'$timestamp'",' - fi - echo -n '"block_signature":"'$block_signature'",' - echo -n '"detach":"'$detach'",' - echo -n '"module":"'$module'",' - echo -n '"action":"'$command'",' - echo -n '"gpg":"'$gpg'",' - if [ $verify == 1 ] - then - ipfs get $gpg > /dev/null 2>&1 - if [ "$?" == 0 ] - then - gpg2 --import $gpg > /dev/null 2>&1 - if [ "$?" == 0 ] - then - logit "[INFO]" "$gpg imported." - else - logit "[ERROR]" "Could not import GPG key: $gpg ." - exit 1 - fi - else - logit "[ERROR]" "Could not get GPG key: $gpg ." - exit 1 - fi - ipfs get $block_signature > /dev/null 2>&1 - if [ "$?" == 0 ] - then - mv $block_signature $block.asc - logit "[INFO]" "Block signature downloaded" - else - logit "[ERROR]" "Error while getting $block_signature for $block" - exit 1 - fi - ipfs get $block > /dev/null 2>&1 - if [ "$?" == 0 ] - then - logit "[INFO]" "Downloaded block $block." - else - logit "[ERROR]" "Could not get $block block" - exit 1 - fi - gpg2 --verify $block.asc > /dev/null 2>&1 - if [ "$?" == 0 ] - then - logit "[GPG]" "$gpg signature of $block is verified." - else - logit "[ERROR]" "Could not verify $block with GPG key $gpg." - exit 1 - fi - fi - ak-data-expand $data $gpg + # Same as above applies to BLOCK and DATA subparts of each ZBLOCK + # BLOCKS + echo -n '"block":"'$block'",' + ipfs --timeout=10s cat $block | json2bash > $TEMPASSIN/tmp-block + if [ "$?" -ne 0 ] + then + logit "[ERROR]" "BLOCK $block READ failed" + exit 1 + fi - # DATA (but we don't source it's stuff) - # Only print to stdout - #ipfs --timeout=10s cat $data - touch $DATADIR/$data + grep -e 'timestamp' -e 'gpg' -e 'data' -e 'action' -e 'detach' -e 'previous' $TEMPASSIN/tmp-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" - # 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. - if [ -v $previous ] - then - logit "[WARNING]" "Block $block has no previous zblock, appending pseudo genesis to exit gracefully." - echo -n '"previous":"genesis"},{"genesis":"genesis"}]' - logit "[INFO]" "Reached pseudo-genesis, counted $counter zblocks." - exit 0 + source $TEMPASSIN/tmp-block + logit "[INFO]" "BLOCK $block SOURCED" + touch $BLOCKDIR/$block + logit "[INFO]" "BLOCK REFERENCED" + 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" + if [ ! -v $timestamp ] + then + echo -n '"timestamp":"'$timestamp'",' + fi + echo -n '"block_signature":"'$block_signature'",' + echo -n '"detach":"'$detach'",' + echo -n '"module":"'$module'",' + echo -n '"action":"'$command'",' + echo -n '"gpg":"'$gpg'",' + if [ $verify == 1 ] + then + ipfs get $gpg > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "[ERROR]" "Could not get GPG key: $gpg ." + exit 1 + fi + gpg2 --import $gpg > /dev/null 2>&1 + if [ "$?" -ne 0 ] + then + logit "[ERROR]" "Could not import GPG key: $gpg ." + exit 1 + fi + 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" + 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." + gpg2 --verify $block.asc > /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 + ak-data-expand $data $gpg - # 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 [ "$?" -ne 0 ] + then + logit "[ERROR]" "Failed on data signature verification [data: $data, gpg: $gpg, zblock: $zblock]" + exit 1 + fi - # Now check if it is equal to the seed - # which apparently means we reached the seed. - elif [ "$zblock" == "$seed" ] - then - #echo "$zblock is GENESIS block" - #echo '"'$zblock'":{ "GENESIS":"GENESIS"}] ' - 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 + # DATA (but we don't source it's stuff) + # Only print to stdout + #ipfs --timeout=10s cat $data + touch $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. + if [ -v $previous ] + then + logit "[WARNING]" "Block $block has no previous zblock, appending pseudo genesis to exit gracefully." + echo -n '"previous":"genesis"},{"genesis":"genesis"}]' + logit "[INFO]" "Reached pseudo-genesis, counted $counter zblocks." + exit 0 + + # 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 "$zblock is GENESIS block" + #echo '"'$zblock'":{ "GENESIS":"GENESIS"}] ' + 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 done |