#!/bin/bash ## ## -h, --help Prints this help message ## ## -l, --local-index Prints an indexed table of your news files ## ## -i, --import TODO ## ## -a, --add Creates a data file from the news file you ## point to ## ## -r, --read Reads a zblock as a news data ## ## -c, --create Vim is going to pop up, you will write and ## save your newsletter and it's going to bei ## saved ## ## -s, --specs Print specs of data block ## ## -x, --html Returns an appropriate html element from a ## NEWS zblock ## fullprogrampath="$(realpath $0)" PROGRAM=$(basename $0) descriptionString="Module to read, create and add zblocks" ZNEWSDIR="$AK_WORKDIR/news" TEMP="/tmp/aktmp" 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 if [ ! -d $ZNEWSDIR ]; then mkdir $ZNEWSDIR if [ $? -ne 0 ]; then logit "ERROR" "$ZNEWSDIR couldn't be created" exit 1 fi logit "INFO" "$ZNEWSDIR created" else logit "INFO" "$ZNEWSDIR found" fi cd $ZNEWSDIR _ak_modules_news_create(){ TEMP="$(ak-tempassin)" cd $TEMP cd curpath="$(pwd)" export NEWS_FILE="$(date +%Y%m%d_%H%M%S)" vi $NEWS_FILE echo "Renaming..." TITLE="$(head -n 1 $NEWS_FILE)" TO_FILE=$NEWS_FILE-$(echo $TITLE | tr '[:upper:]' '[:lower:]' | sed -e 's/ /\_/g' ) IPFS_FILE=$(_ak_ipfs_add $NEWS_FILE) mv $NEWS_FILE $ZNEWSDIR/$TO_FILE sed -i -e 's,Qm.*,'"$IPFS_FILE"',g' $ZNEWSDIR/README _ak_modules_news_add $TO_FILE cd $ZNEWSDIR # rm -rf $TEMP } _ak_modules_news_index(){ FILES="$(ls -1 $ZNEWSDIR)" i=0 ak-zchain-extract-cids | sort | uniq > temp for FILE in $FILES do DATE="$(echo $FILE | cut -d - -f 1 | awk '{print $1}')" TITLE="$(head -n 1 $ZNEWSDIR/$FILE)" IPFS_HASH="$(ipfs add -nQ $ZNEWSDIR/$FILE)" ONLINE="offzchain" grep "$IPFS_HASH" temp > /dev/null 2>&1 if [ $? -eq 0 ] then ONLINE="on-zchain" fi printf "%3d | %5s | %52s | %10s | %56s \n"\ "$i" "$ONLINE" "$IPFS_HASH" "$DATE" "$TITLE" let i+=1 done rm temp } _ak_modules_news_import(){ echo "#TODO" if [ ! -z $1 ] then if [ ! -d "$1" ] then echo $1 echo "Folder does not exist" exit 4 else echo "Folder $1 exists" fl="$(ls -1 $1)" for f in $fl do echo $1 $f _ak_modules_news_add_from_file "$1/$f" done fi else echo "No value" exit 6 fi exit 224 } _ak_modules_news_add_from_file(){ TEMP="$(ak-tempassin)" if [ -f "$1" ]; then FILE="$(realpath $1)" cp $FILE $ZNEWSDIR cp $FILE $TEMP FILE="$(basename $1)" cd $TEMP logit "INFO" "Adding news from " $FILE DATETIME=$(echo $FILE | cut -d - -f 1 | awk '{print $1}') TITLE=$(head -n 1 $FILE) FILE_IPFS_HASH=$(_ak_ipfs_add $FILE) FILE_SIGN_FILE=$FILE".asc" _ak_gpg_sign_detached $FILE_SIGN_FILE $FILE FILE_SIGNATURE=$(_ak_ipfs_add $FILE_SIGN_FILE) cat > data < data < temp if [ $? -ne 0 ] then echo error exit 22 fi module="`cat temp | jq -r '.[].module'`" action="`cat temp | jq -r '.[].action'`" data="`cat temp | jq -r '.[].data'`" linkToText="`cat temp | jq -r ".[].$data.ipfs"`" if [ "$module" == "news" ] && [ "$action" == "add" ] then _ak_ipfs_cat $linkToText else logit "ERROR" "Not a news block." echo "ERROR Not a news block." exit 1 fi rm temp } _ak_modules_news_html(){ ak-enter -l 1 $1 > temp if [ $? -ne 0 ] then logit "ERROR" "Failed to retrieve zblock $1" exit 22 fi module="`cat temp | jq -r '.[].module'`" action="`cat temp | jq -r '.[].action'`" data="`cat temp | jq -r '.[].data'`" linkToText="`cat temp | jq -r ".[].$data.ipfs"`" zfilename="`cat temp | jq -r ".[].$data.filename"`" ztitle="`cat temp | jq -r ".[].$data.title"`" zdatetime="`cat temp | jq -r ".[].$data.datetime"`" if [ "$module" == "news" ] && [ "$action" == "add" ] then echo "" echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo " " echo '
" echo "
⌚ Date/Time
" echo "
" echo "
$zdatetime
" echo "
" echo "
✍️ Title
" echo "
" echo "
$ztitle
" echo "
" echo "
📄 Filename
" echo "
" echo "
$zfilename
" echo "
" echo "
📄 Content
" echo "
" echo " " _ak_ipfs_cat $linkToText | txt2tags -t html -H --infile=- --outfile=- echo "
' else logit "ERROR" "Not a news block." exit 1 fi rm temp } _ak_modules_news_specs(){ datetime_mask=$(printf '^[0-9]\{8\}_[0-9]\{6\}$' | xxd -p) ipfs_mask=$(printf '^Qm[a-zA-Z0-9]\{44\}$' | xxd -p) text_mask=$(printf '^[a-zA-Z0-9_\-]\{1,128\}$' | xxd -p) echo ' { "datetime":"'$datetime_mask'", "title": "'$text_mask'", "filename": "'$text_mask'", "ipfs": "'$ipfs_mask'", "detach": "'$ipfs_mask'" }' | jq } if [ ! -z $1 ]; then case $1 in -h | --help) _ak_usage; exit;; -l | --local-index) _ak_modules_news_index; exit;; -i | --import) _ak_modules_news_import $2; exit;; -a | --add) _ak_modules_news_add_from_file $2; exit;; -c | --create) _ak_modules_news_create; exit;; -r | --read) _ak_modules_news_read $2; exit;; -s | --specs) _ak_modules_news_specs $2; exit;; -x | --html) _ak_modules_news_html $2; exit;; * ) _ak_usage;; esac else _ak_usage fi