diff options
Diffstat (limited to 'bin/ak-profile')
-rwxr-xr-x | bin/ak-profile | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/bin/ak-profile b/bin/ak-profile new file mode 100755 index 0000000..ed83d29 --- /dev/null +++ b/bin/ak-profile @@ -0,0 +1,227 @@ +#!/bin/bash +PROGRAM="$(basename $0)" +ZPROFILEDIR="$WORKDIR/profile" +TEMP="/tmp/aktmp" + +# Outputs to log file in the classic format :) +logit(){ + logthis "<$PROGRAM>" "$1" "$2" +} + +# Whatever the command is, we check if $ZPROFILEDIR is there. +# If NOT we create it and we change dir there. +if [ ! -d $ZPROFILEDIR ]; then + mkdir $ZPROFILEDIR + cd $ZPROFILEDIR + logit "[INFO]" "zprofiledir created" +else + logit "[INFO]" "zprofiledir found" +fi + +tempassin(){ + if [ ! -z $1 ] + then + TEMPASSIN="$1" + else + TIMESTAMP="$(date -u +%s)" + TEMPASSIN="/tmp/aktmp_$TIMESTAMP" + fi + if [ ! -d $TEMPASSIN ]; then + mkdir $TEMPASSIN + fi + cd $TEMPASSIN + # echo "$TEMPASSIN" +} + +# This is working with DATA blocks. DATA that matched profile/add ACTION +# +# The profile settings/configuration is part of the blockchain produced. +# Hence, we need a specific DATA block that actually has the announcement of a +# {"key":"value"} pair. +show(){ + if [ ! -z $1 ] + then + logit "[INFO]" "Working with $1" + ipfs cat $(echo $(ipfs cat $1) | jq '.ipfs' -r) + else + echo "No DATA provided" + exit 1 + fi +} + +# This should retrieve a specific value from our profile otherwise it dumps the +# whole profile values. +propget(){ + if [ ! -z $1 ] + then + if [ ! -f $ZPROFILEDIR/$1 ] + then + echo "property not found" + else + cat $ZPROFILEDIR/$1 + fi + else + echo "No particular property... indexing" + index + fi +} + +propwrite(){ + cat > $ZPROPERTY_FILE << EOF +{ + "$ZPROPERTY_KEY":"${ZPROPERTY_VALUE}" +} +EOF + if [ $? == 0 ] + then + echo "Added successfully... proceeding" + IPFS_FILE=$(ipfs add -q $ZPROPERTY_FILE) + echo "Prop writting,,, $IPFS_FILE" + add $ZPROPERTY_KEY + echo "Adding to git repo..." + cd $ZPROFILEDIR + else + echo "Couldn't write to file $ZPROFILEDIR/$TO_FILE" + exit 1 + fi +} + +propset(){ + if [ ! -z $1 ] + then + ZPROPERTY_FILE="$ZPROFILEDIR/$1" + ZPROPERTY_KEY="$1" + if [ ! -f $ZPROPERTY_FILE ] + then + echo "No such property: $ZPROPERTY_KEY ... creating" + ZPROPERTY_VALUE="$2" + if [ ! -z "$ZPROPERTY_VALUE" ] + then + touch $ZPROPERTY_FILE + echo "$ZPROPERTY_KEY = $ZPROPERTY_VALUE in file $ZPROPERTY_FILE" + propwrite #"$ZPROPERTY_FILE" "${ZPROPERTY_VALUE}" + else + echo "No value for $1" + fi + else + echo found $ZPROPERTY_FILE + echo "$ZPROPERTY_KEY = $ZPROPERTY_VALUE in file $ZPROPERTY_FILE" + ZPROPERTY_VALUE="$2" + read -p "Overwrite $1 with ${ZPROPERTY_VALUE} ? " yn + case $yn in + [Yy]* ) propwrite;;# "$ZPROPERTY_" "${ZPROPERTY_VALUE}";; + [Nn]* ) exit 130;; + * ) echo "Answer please";; + esac + echo $IPFS_FILE + show $IPFS_FILE + fi + else + echo "conditions unmet" + exit 244 + fi +} +index(){ + FILES="$(ls -1 $ZPROFILEDIR)" + i=0 + echo -n "{" + for FILE in $FILES + do + if [ $FILE != "README" ]; then + if [ $i != "0" ]; then + echo -n ","; + fi + PROP=$(echo $(cat $ZPROFILEDIR/$FILE | json2bash) | cut -d '=' -f 1 | awk '{print $0}') + VAL=$(echo $(cat $ZPROFILEDIR/$FILE | json2bash) | cut -d '=' -f 2 | awk '{print $1}') + echo -n '"'$PROP'":"'$VAL'"'; + let i+=1 + fi + done + echo "}" +} +import(){ + if [ ! -z $1 ] + then + if [ ! -d $1 ] + then + echo "Profile folder check: Folder $1 does not exist. Stopping..." + exit 4 + else + echo "Profile folder check: Folder $1 exists." + fl="$(ls -1 $1)" + for f in $fl + do + add $1/$f + done + fi + else + echo "No value" + exit 6 + fi + exit 224 +} + +# Adds a file as a profile/add ACTION on the zchain. +add(){ + tempassin + if [ -f $ZPROFILEDIR/$1 ]; then + FILE="$ZPROFILEDIR/$1" + echo "Adding from " $FILE + FILE_IPFS_HASH=$(ipfs add -q $FILE) + FILE_SIGN_FILE=$(pwd)/$1".asc" + gpg2 --detach-sign --sign-with $FINGERPRINT --armor --output $FILE_SIGN_FILE $FILE + FILE_SIGNATURE=$(ipfs add -q $FILE_SIGN_FILE) + cat > data <<EOF +{ + "datetime":"$(date -u +%s)", + "ipfs":"$FILE_IPFS_HASH", + "detach":"$FILE_SIGNATURE" +} +EOF + else + echo "File $FILE doesn't exist"; + exit 2 + fi + + pack_z_block "profile/add" data + if [ "$?" -ne 0 ] + then + echo "error??" + exit 1 + fi + echo "Profile added successfully" + cd $ZPROFILEDIR + rm -rf "$TEMPASSIN" +} +usage(){ + echo "Usage:" + echo " $PROGRAM command [options]" + echo "" + echo "Indexes, shows, imports, adds, sets and gets values from and to the" + echo "zchain and files." + echo "" + echo -e "\thelp\t\t\t\tPrints this help message" + echo -e "\tindex\t\t\t\tShow current status" + echo -e "\tshow <data>\t\t\tShow profile entry from specified DATA IPFS CIDv0" + echo -e "\tset <property> <value>\t\tSets a profile value" + echo -e "\tget <property>\t\t\tGets a profile value from the on-disk file." + echo "" + echo "Advanced (use with caution may produce duplicate entries):" + echo -e "\tadd <file>\t\t\tCreates a data file from the profile file you point to (file should already be in ZPROFILEDIR." + echo -e "\timport <folder>\t\t\tImport a folder to zchain #TODO" + echo "" + exit 0 +} +if [ ! -z $1 ]; then + case $1 in + help) usage; exit;; + index) index; exit;; + show) show $2; exit;; + import) import $2; exit;; + add) add $2; exit;; + set) propset $2 "$3"; exit;; + get) propget $2; exit;; + * ) usage;; + esac +else usage +fi |