From a0ad2e7d48712b0b577344b9439fc4e3b24c38e3 Mon Sep 17 00:00:00 2001 From: Jon-William Lewis Date: Wed, 18 Mar 2015 14:53:05 -0500 Subject: [PATCH] Alpha 3 Testing: Print function works --- build.sh | 29 ++- errors.ref | 12 + functions/create.sns.sh | 57 ++-- functions/delete.sns.sh | 38 ++- functions/edit.sns.sh | 55 ++-- functions/help.sns.sh | 32 ++- functions/init_default_config.sns.sh | 7 + functions/list.sns.sh | 66 ++--- functions/pause.sns.sh | 4 + functions/print.sns.sh | 39 ++- functions/wconf.sns.sh | 10 - init/stage1.sns.sh | 7 +- init/stage2.sns.sh | 12 +- init/stage3.sns.sh | 38 +-- sns.sh | 371 +++++++++++++-------------- sns.xcodeproj/project.pbxproj | 10 +- 16 files changed, 389 insertions(+), 398 deletions(-) create mode 100644 errors.ref create mode 100644 functions/init_default_config.sns.sh create mode 100644 functions/pause.sns.sh diff --git a/build.sh b/build.sh index f9f3000..397e97b 100644 --- a/build.sh +++ b/build.sh @@ -1,34 +1,35 @@ S=sns.sh PROD_STR="Simple Note System" -VER_STR=v2.0a2 +VER_STR=v2.0a3 cat > $S << EOF #!/bin/bash #========================================================== -# Simple Note System, v2.0a1 +# $PROD_STR, $VER_STR # Copyright 2014, Xenese Labs/Sicron-Perion XNF #========================================================== -PROD_STR=$PROD_STR -VER_STR=$VER_STR +PROD_STR="$PROD_STR" +VER_STR="$VER_STR" EOF -cat functions/wconf.sns.sh >> $S -cat functions/help.sns.sh >> $S +echo "# Section: Functions" >> $S +cat ./functions/init_default_config.sns.sh >> $S +cat ./functions/wconf.sns.sh >> $S +cat ./functions/pause.sns.sh >> $S +cat ./functions/help.sns.sh >> $S +cat ./functions/create.sns.sh >> $S +cat ./functions/delete.sns.sh >> $S +cat ./functions/edit.sns.sh >> $S +cat ./functions/print.sns.sh >> $S +cat ./functions/list.sns.sh >> $S +echo "# End Section: Functions" >> $S cat ./init/stage1.sns.sh >> $S cat ./init/stage2.sns.sh >> $S cat ./init/stage3.sns.sh >> $S -cat ./functions/create.sns.sh >> $S -cat ./functions/delete.sns.sh >> $S -cat ./functions/edit.sns.sh >> $S -cat ./functions/print.sns.sh >> $S -cat ./functions/list.sns.sh >> $S - - - exit diff --git a/errors.ref b/errors.ref new file mode 100644 index 0000000..ce7c5f3 --- /dev/null +++ b/errors.ref @@ -0,0 +1,12 @@ +Simple Note System, version 2 +Error Code Reference + +General------------------------------------------------------------------------- +ERR_NO_ARGS 10 No arguments were specified +ERR_NO_OP 20 +ERR_INSUFFICIENT_ARGS 30 A required argument was not provided + + +Encryption---------------------------------------------------------------------- +ERR_NO_SSL 100 Cannot execute openssl +ERR_NO_KEY 110 No encryption key in sns.conf \ No newline at end of file diff --git a/functions/create.sns.sh b/functions/create.sns.sh index 30d094a..80447ab 100644 --- a/functions/create.sns.sh +++ b/functions/create.sns.sh @@ -1,33 +1,28 @@ -#========================================================================== -# Subection: Create -#========================================================================== -if [ -z "$CREATE" -a -z "$EDIT" -a -z "$PRINT" ]; then #If no action specified, print help and exit -help -exit -else +function create(){ + if [ -z "$CREATE" -a -z "$EDIT" -a -z "$PRINT" ]; then #If no action specified, print help and exit + help + exit + elif [ "$CREATE" == "TRUE" ]; then + if [ -e $NOTE -o -e ${NOTE%.*} ]; then + echo "" + echo "ERROR: Note already exists" + echo "Hint: use -e to edit the note." + echo "" + exit + else + #Create any necessary folders + mkdir -p $NOTEDIR + #Fill in title + echo "TITLE: $NAME" > $NOTE + #Fill the second line with the date + echo "DATE: $(date)" >> $NOTE -if [ "$CREATE" == "TRUE" ]; then -if [ -e $NOTE -o -e ${NOTE%.*} ]; then - -echo "" -echo "ERROR: Note already exists" -echo "Hint: use -e to edit the note." -echo "" -exit -else -#Create any necessary folders -mkdir -p $NOTEDIR - -#Fill in title -echo "TITLE: $NAME" > $NOTE -#Fill the second line with the date -echo "DATE: $(date)" >> $NOTE - -if [ "$ENCRYPTION" == "TRUE" ]; then -if [ $EDIT == "FALSE" ]; then -openssl enc -aes-256-cbc -salt -in $NOTE -out ${NOTE%.*} -pass pass:$ENC_KEY -fi -fi -fi -fi + if [ "$ENCRYPTION" == "TRUE" ]; then + if [ $EDIT == "FALSE" ]; then + openssl enc -aes-256-cbc -salt -in $NOTE -out ${NOTE%.*} -pass pass:$ENC_KEY + fi + fi + fi + fi +} diff --git a/functions/delete.sns.sh b/functions/delete.sns.sh index b59189e..dafe3e7 100644 --- a/functions/delete.sns.sh +++ b/functions/delete.sns.sh @@ -1,20 +1,18 @@ -# delete.sns.sh - -if [ "$DELETE" == "TRUE" ]; then -if [ -e $NOTE -o -e ${NOTE%.*} ]; then -if [ "$ENCRYPTION" == "TRUE" ]; then -rm ${NOTE%.*} -else -rm $NOTE -fi - -echo "" -echo "Deleted note: $NOTEBOOK/$SECTION$NAME." -exit -else - -echo "" -echo "ERROR: Note $NOTEBOOK/$SECTION$NAME does not exist." -exit -fi -fi +function delete(){ + if [ "$DELETE" == "TRUE" ]; then + if [ -e $NOTE -o -e ${NOTE%.*} ]; then + if [ "$ENCRYPTION" == "TRUE" ]; then + rm ${NOTE%.*} + else + rm $NOTE + fi + echo "" + echo "Deleted note: $NOTEBOOK/$SECTION$NAME." + exit + else + echo "" + echo "ERROR: Note $NOTEBOOK/$SECTION$NAME does not exist." + exit + fi + fi +} diff --git a/functions/edit.sns.sh b/functions/edit.sns.sh index 9603706..140a117 100644 --- a/functions/edit.sns.sh +++ b/functions/edit.sns.sh @@ -1,30 +1,27 @@ -#========================================================================== -# Subection: Edit -#========================================================================== -if [ "$EDIT" == "TRUE" ]; then -if [ -r "$NOTE" -o -r ${NOTE%.*} ]; then -if [ -z "$CREATE" ]; then -if [ "$ENCRYPTION" == "TRUE" ]; then -TMP_NAME=$ROOTDIR/tmp/$RANDOM -openssl enc -d -aes-256-cbc -in ${NOTE%.*} -pass pass:$ENC_KEY > $TMP_NAME -echo "" >> $TMP_NAME -echo "EDIT $(date)" >> $TMP_NAME -else -echo "" >> $NOTE -echo "EDIT $(date)" >> $NOTE -fi -fi -$EDITOR $NOTE -if [ "$ENCRYPTION" == "TRUE" ]; then -openssl enc -aes-256-cbc -salt -in $NOTE -out ${NOTE%.*} -pass pass:$ENC_KEY -rm $NOTE -fi +function edit (){ + if [ "$EDIT" == "TRUE" ]; then + if [ -r "$NOTE" -o -r ${NOTE%.*} ]; then + if [ -z "$CREATE" ]; then + if [ "$ENCRYPTION" == "TRUE" ]; then + TMP_NAME=$ROOTDIR/tmp/$RANDOM + openssl enc -d -aes-256-cbc -in ${NOTE%.*} -pass pass:$ENC_KEY > $TMP_NAME + echo "" >> $TMP_NAME + echo "EDIT $(date)" >> $TMP_NAME + else + echo "" >> $NOTE + echo "EDIT $(date)" >> $NOTE + fi + fi + $EDITOR $NOTE + if [ "$ENCRYPTION" == "TRUE" ]; then + openssl enc -aes-256-cbc -salt -in $NOTE -out ${NOTE%.*} -pass pass:$ENC_KEY + rm $NOTE + fi -else -echo "" -echo "ERROR: Note cannot be opened for editting." -echo "" -fi -fi - -fi + else + echo "" + echo "ERROR: Note cannot be opened for editting." + echo "" + fi + fi +} diff --git a/functions/help.sns.sh b/functions/help.sns.sh index b926b9e..0727bd6 100644 --- a/functions/help.sns.sh +++ b/functions/help.sns.sh @@ -1,20 +1,18 @@ function help { -echo "" -echo "usage: sns [-ce] NAME NOTEBOOK SECTION" -echo " sns [-d ] NAME NOTEBOOK SECTION" -echo " sns [-l ] NOTEBOOK" -echo " sns [-w ]" + echo "" + echo "usage: sns [-ce] NAME NOTEBOOK SECTION" + echo " sns [-d ] NAME NOTEBOOK SECTION" + echo " sns [-lp] NOTEBOOK" + echo " sns [-w ]" + echo " sns [-h ]" -echo "" -echo " -c | --create : Create note" -echo " -d | --delete : Delete note" -echo " -e | --edit : Open note for editing" -echo " -p | --print : Print note to console" -echo " -l | --list : List all notes in NOTEBOOK" -echo " -w | --wconf : Write default configuration to ~/.sns (useful for Encryption)" -echo "" + echo "" + echo " -c | --create : Create note" + echo " -d | --delete : Delete note" + echo " -e | --edit : Open note for editing" + echo " -h | --help : Display this message" + echo " -p | --print : Print note to console" + echo " -l | --list : List all notes in NOTEBOOK" + echo " -w | --wconf : Write default configuration to ~/.sns (useful for Encryption)" + echo "" } - -#============================================================================== -# End Section: Helper Functions -#============================================================================== diff --git a/functions/init_default_config.sns.sh b/functions/init_default_config.sns.sh new file mode 100644 index 0000000..5bdd1dd --- /dev/null +++ b/functions/init_default_config.sns.sh @@ -0,0 +1,7 @@ +function init_default_config() { + ROOTDIR=$HOME/.sns + BASEDIR=$ROOTDIR/notes + EXT=note + EDITOR=vim + ENCRYPTION="FALSE" +} diff --git a/functions/list.sns.sh b/functions/list.sns.sh index 628539a..797a065 100644 --- a/functions/list.sns.sh +++ b/functions/list.sns.sh @@ -1,39 +1,29 @@ -# list.sns.sh +function list(){ + if [ -d "$BASEDIR"/"$NOTEBOOK" ]; then + echo "" + printf "Notes in $(basename $NOTEBOOK):" + echo "" -if [ -n "$LIST" ]; then -NOTEBOOK="$NAME" #In case of a list command, arg parsing fails. -if [ -z "$NOTEBOOK" ]; then -echo " ERROR: Insufficient arguments" -help -exit -else -if [ -d "$BASEDIR"/"$NOTEBOOK" ]; then - -echo "" -printf "Notes in $(basename $NOTEBOOK):" -echo "" -NOTES=( $(find $BASEDIR/$NOTEBOOK -name "*.$EXT" -print0 | sed s:$BASEDIR/$NOTEBOOK/:" ":g | sed -e s:".$EXT"::g | tr "/" " ") ) -let i=0 -for NOTE in ${NOTES[@]}; do -if [ -d $BASEDIR/$NOTEBOOK/$NOTE ]; then -if [ "$LAST_SECTION" != "$NOTE" ]; then -printf " Section: $NOTE\n" -fi -LAST_SECTION=$NOTE -else -#if [ $(($i % 1)) -eq 0 ]; then -# printf "\n " -#fi -printf " $NOTE\n" -fi -let i++ -done -printf "\n" -else -echo "" -echo "ERROR: Notebook $NOTEBOOK does not exist." -echo "" -fi -fi -exit -fi + NOTES=( $(find $BASEDIR/$NOTEBOOK -name "*.$EXT" -print0 | sed s:$BASEDIR/$NOTEBOOK/:" ":g | sed -e s:".$EXT"::g | tr "/" " ") ) + let i=0 + for NOTE in ${NOTES[@]}; do + if [ -d $BASEDIR/$NOTEBOOK/$NOTE ]; then + if [ "$LAST_SECTION" != "$NOTE" ]; then + printf " Section: $NOTE\n" + fi + LAST_SECTION=$NOTE + else + #if [ $(($i % 1)) -eq 0 ]; then + # printf "\n " + #fi + printf " $NOTE\n" + fi + let i++ + done + printf "\n" + else + echo "" + echo "ERROR: Notebook $NOTEBOOK does not exist." + echo "" + fi +} diff --git a/functions/pause.sns.sh b/functions/pause.sns.sh new file mode 100644 index 0000000..5884408 --- /dev/null +++ b/functions/pause.sns.sh @@ -0,0 +1,4 @@ +function pause { + read -p " Press [Enter] to continue." + echo "" +} diff --git a/functions/print.sns.sh b/functions/print.sns.sh index 1c057c5..c0a3aaf 100644 --- a/functions/print.sns.sh +++ b/functions/print.sns.sh @@ -1,22 +1,19 @@ -#========================================================================== -# Subection: Print -#========================================================================== -if [ "$PRINT" == "TRUE" ]; then -if [ -r "$NOTE" -o -r ${NOTE%.*} ]; then -if [ -z "$CREATE" ]; then -if [ "$ENCRYPTION" == "TRUE" ]; then -openssl enc -d -aes-256-cbc -in ${NOTE%.*} -pass pass:$ENC_KEY -else -cat $NOTE -echo "" >> $NOTE -fi -else +function print(){ + if [ "$PRINT" == "TRUE" ]; then + if [ -r "$NOTE" -o -r ${NOTE%.*} ]; then + if [ -z "$CREATE" ]; then + if [ "$ENCRYPTION" == "TRUE" ]; then + openssl enc -d -aes-256-cbc -in ${NOTE%.*} -pass pass:$ENC_KEY + else + cat $NOTE + echo "" >> $NOTE + fi + else + echo "" + echo "ERROR: Note cannot be found." + echo "" -echo "" -echo "ERROR: Note cannot be found." -echo "" - -fi -fi - -fi + fi + fi + fi +} diff --git a/functions/wconf.sns.sh b/functions/wconf.sns.sh index b0d524f..b6ea422 100644 --- a/functions/wconf.sns.sh +++ b/functions/wconf.sns.sh @@ -1,6 +1,3 @@ -#============================================================================== -# Section: Helper Functions -#============================================================================== function writeconf { cat > $HOME/.sns/sns.conf << EOF #========================================================== @@ -26,10 +23,3 @@ EOF chmod 600 $ROOTDIR/sns.conf } - - -function pause { -read -p " Press [Enter] to continue." -echo "" -} - diff --git a/init/stage1.sns.sh b/init/stage1.sns.sh index c949e19..89ab8d2 100644 --- a/init/stage1.sns.sh +++ b/init/stage1.sns.sh @@ -2,12 +2,9 @@ # Section: Configuration #============================================================================== if [ -r $HOME/.sns/sns.conf ]; then -source $HOME/.sns/sns.conf + source $HOME/.sns/sns.conf else -ROOTDIR=$HOME/.sns -BASEDIR=$ROOTDIR/notes -EDITOR=vim -EXT=note + init_default_config fi if [ "$ENCRYPTION" == "TRUE" ]; then diff --git a/init/stage2.sns.sh b/init/stage2.sns.sh index fd26a51..03ece6c 100644 --- a/init/stage2.sns.sh +++ b/init/stage2.sns.sh @@ -8,7 +8,7 @@ SECTION="" if [ -z "$1" ]; then #If no input was given, print help help - exit + exit 20 else #Assume the user wants to do something. ARGS=( "$@" ) for ARG in ${ARGS[@]};do @@ -23,18 +23,22 @@ else #Assume the user wants to do something. else if [ -z "$NAME" -a -n $ARG ]; then NAME=$ARG - echo "Name: $NAME" elif [ -z "$NOTEBOOK" -a -n $ARG ]; then NOTEBOOK=$ARG - echo "Notebook: $NOTEBOOK" elif [ -z "$SECTION" -a -n $ARG ]; then SECTION=$ARG - echo "Section: $SECTION" fi fi done + if [ -n "$NAME" -a -z "$NOTEBOOK" ]; then + NOTEBOOK="$NAME" + NAME="" + fi fi +# Note: writeconf has highest priority, and it is the only function that can +# work without any parameters. + #============================================================================== # End Section: Argument Parsing #============================================================================== diff --git a/init/stage3.sns.sh b/init/stage3.sns.sh index 9008b32..c9dd616 100644 --- a/init/stage3.sns.sh +++ b/init/stage3.sns.sh @@ -1,22 +1,30 @@ +# Help requires no arguments, and is exclusive. +if [ -n "$HELP" ]; then help; exit 0; fi - - - - - - -# If no name or notebook is specified, the create, edit, and print functions will not function properly. -# Check $NAME and $NOTEBOOK and exit if either are empty. -if [ -z "$NAME" -o -z "$NOTEBOOK" ]; then; - echo " ERROR: Insufficient arguments"; - help; #Remind the user how to use the script - exit 10; +# List only requires a notebook, and is exclusive. +if [ -z "$NOTEBOOK" ]; then + echo " ERROR: Insufficient arguments:" + echo " Notebook not specified" + exit 30 fi +if [ -n "$LIST" ]; then + + list + exit 0 +fi + +#All other functions require a note title and notebook. + +if [ -z "$NAME" ]; then + echo " ERROR: Insufficient arguments:" + echo " Title not specified" + exit 30 +fi NOTEDIR=$BASEDIR/$NOTEBOOK/$SECTION/ NOTE=$NOTEDIR$NAME.$EXT -if [ "$ENCRYPTION" == "TRUE" ]; then -NOTE=$NOTE.tmp -fi +if [ "$ENCRYPTION" == "TRUE" ]; then NOTE=$NOTE.tmp fi + + diff --git a/sns.sh b/sns.sh index c3084c4..75b48fd 100644 --- a/sns.sh +++ b/sns.sh @@ -1,15 +1,20 @@ #!/bin/bash #========================================================== -# Simple Note System, v2.0a1 +# Simple Note System, v2.0a3 # Copyright 2014, Xenese Labs/Sicron-Perion XNF #========================================================== PROD_STR="Simple Note System" -VER_STR=v2.0a1 +VER_STR="v2.0a3" -#============================================================================== -# Section: Helper Functions -#============================================================================== +# Section: Functions +function init_default_config() { + ROOTDIR=$HOME/.sns + BASEDIR=$ROOTDIR/notes + EXT=note + EDITOR=vim + ENCRYPTION="FALSE" +} function writeconf { cat > $HOME/.sns/sns.conf << EOF #========================================================== @@ -35,43 +40,157 @@ EOF chmod 600 $ROOTDIR/sns.conf } - - function pause { -read -p " Press [Enter] to continue." -echo "" + read -p " Press [Enter] to continue." + echo "" } - function help { -echo "" -echo "usage: sns [-ce] NAME NOTEBOOK SECTION" -echo " sns [-d ] NAME NOTEBOOK SECTION" -echo " sns [-l ] NOTEBOOK" -echo " sns [-w ]" + echo "" + echo "usage: sns [-ce] NAME NOTEBOOK SECTION" + echo " sns [-d ] NAME NOTEBOOK SECTION" + echo " sns [-lp] NOTEBOOK" + echo " sns [-w ]" + echo " sns [-h ]" -echo "" -echo " -c | --create : Create note" -echo " -d | --delete : Delete note" -echo " -e | --edit : Open note for editing" -echo " -p | --print : Print note to console" -echo " -l | --list : List all notes in NOTEBOOK" -echo " -w | --wconf : Write default configuration to ~/.sns (useful for Encryption)" -echo "" + echo "" + echo " -c | --create : Create note" + echo " -d | --delete : Delete note" + echo " -e | --edit : Open note for editing" + echo " -h | --help : Display this message" + echo " -p | --print : Print note to console" + echo " -l | --list : List all notes in NOTEBOOK" + echo " -w | --wconf : Write default configuration to ~/.sns (useful for Encryption)" + echo "" } +function create(){ + if [ -z "$CREATE" -a -z "$EDIT" -a -z "$PRINT" ]; then #If no action specified, print help and exit + help + exit + elif [ "$CREATE" == "TRUE" ]; then + if [ -e $NOTE -o -e ${NOTE%.*} ]; then + echo "" + echo "ERROR: Note already exists" + echo "Hint: use -e to edit the note." + echo "" + exit + else + #Create any necessary folders + mkdir -p $NOTEDIR -#============================================================================== -# End Section: Helper Functions -#============================================================================== + #Fill in title + echo "TITLE: $NAME" > $NOTE + #Fill the second line with the date + echo "DATE: $(date)" >> $NOTE + + if [ "$ENCRYPTION" == "TRUE" ]; then + if [ $EDIT == "FALSE" ]; then + openssl enc -aes-256-cbc -salt -in $NOTE -out ${NOTE%.*} -pass pass:$ENC_KEY + fi + fi + fi + fi +} +function delete(){ + if [ "$DELETE" == "TRUE" ]; then + if [ -e $NOTE -o -e ${NOTE%.*} ]; then + if [ "$ENCRYPTION" == "TRUE" ]; then + rm ${NOTE%.*} + else + rm $NOTE + fi + echo "" + echo "Deleted note: $NOTEBOOK/$SECTION$NAME." + exit + else + echo "" + echo "ERROR: Note $NOTEBOOK/$SECTION$NAME does not exist." + exit + fi + fi +} +function edit (){ + if [ "$EDIT" == "TRUE" ]; then + if [ -r "$NOTE" -o -r ${NOTE%.*} ]; then + if [ -z "$CREATE" ]; then + if [ "$ENCRYPTION" == "TRUE" ]; then + TMP_NAME=$ROOTDIR/tmp/$RANDOM + openssl enc -d -aes-256-cbc -in ${NOTE%.*} -pass pass:$ENC_KEY > $TMP_NAME + echo "" >> $TMP_NAME + echo "EDIT $(date)" >> $TMP_NAME + else + echo "" >> $NOTE + echo "EDIT $(date)" >> $NOTE + fi + fi + $EDITOR $NOTE + if [ "$ENCRYPTION" == "TRUE" ]; then + openssl enc -aes-256-cbc -salt -in $NOTE -out ${NOTE%.*} -pass pass:$ENC_KEY + rm $NOTE + fi + + else + echo "" + echo "ERROR: Note cannot be opened for editting." + echo "" + fi + fi +} +function print(){ + if [ "$PRINT" == "TRUE" ]; then + if [ -r "$NOTE" -o -r ${NOTE%.*} ]; then + if [ -z "$CREATE" ]; then + if [ "$ENCRYPTION" == "TRUE" ]; then + openssl enc -d -aes-256-cbc -in ${NOTE%.*} -pass pass:$ENC_KEY + else + cat $NOTE + echo "" >> $NOTE + fi + else + echo "" + echo "ERROR: Note cannot be found." + echo "" + + fi + fi + fi +} +function list(){ + if [ -d "$BASEDIR"/"$NOTEBOOK" ]; then + echo "" + printf "Notes in $(basename $NOTEBOOK):" + echo "" + + NOTES=( $(find $BASEDIR/$NOTEBOOK -name "*.$EXT" -print0 | sed s:$BASEDIR/$NOTEBOOK/:" ":g | sed -e s:".$EXT"::g | tr "/" " ") ) + let i=0 + for NOTE in ${NOTES[@]}; do + if [ -d $BASEDIR/$NOTEBOOK/$NOTE ]; then + if [ "$LAST_SECTION" != "$NOTE" ]; then + printf " Section: $NOTE\n" + fi + LAST_SECTION=$NOTE + else + #if [ $(($i % 1)) -eq 0 ]; then + # printf "\n " + #fi + printf " $NOTE\n" + fi + let i++ + done + printf "\n" + else + echo "" + echo "ERROR: Notebook $NOTEBOOK does not exist." + echo "" + fi +} +# End Section: Functions #============================================================================== # Section: Configuration #============================================================================== if [ -r $HOME/.sns/sns.conf ]; then -source $HOME/.sns/sns.conf + source $HOME/.sns/sns.conf else -ROOTDIR=$HOME/.sns -BASEDIR=$ROOTDIR/notes -EDITOR=vim -EXT=note + init_default_config fi if [ "$ENCRYPTION" == "TRUE" ]; then @@ -115,7 +234,7 @@ SECTION="" if [ -z "$1" ]; then #If no input was given, print help help - exit + exit 20 else #Assume the user wants to do something. ARGS=( "$@" ) for ARG in ${ARGS[@]};do @@ -130,184 +249,52 @@ else #Assume the user wants to do something. else if [ -z "$NAME" -a -n $ARG ]; then NAME=$ARG - echo "Name: $NAME" elif [ -z "$NOTEBOOK" -a -n $ARG ]; then NOTEBOOK=$ARG - echo "Notebook: $NOTEBOOK" elif [ -z "$SECTION" -a -n $ARG ]; then SECTION=$ARG - echo "Section: $SECTION" fi fi done + if [ -n "$NAME" -a -z "$NOTEBOOK" ]; then + NOTEBOOK="$NAME" + NAME="" + fi fi +# Note: writeconf has highest priority, and it is the only function that can +# work without any parameters. + #============================================================================== # End Section: Argument Parsing #============================================================================== +# Help requires no arguments, and is exclusive. +if [ -n "$HELP" ]; then help; exit 0; fi - - - - - - -# If no name or notebook is specified, the create, edit, and print functions will not function properly. -# Check $NAME and $NOTEBOOK and exit if either are empty. -if [ -z "$NAME" -o -z "$NOTEBOOK" ]; then; - echo " ERROR: Insufficient arguments"; - help; #Remind the user how to use the script - exit 10; +# List only requires a notebook, and is exclusive. +if [ -z "$NOTEBOOK" ]; then + echo " ERROR: Insufficient arguments:" + echo " Notebook not specified" + exit 30 fi +if [ -n "$LIST" ]; then + + list + exit 0 +fi + +#All other functions require a note title and notebook. + +if [ -z "$NAME" ]; then + echo " ERROR: Insufficient arguments:" + echo " Title not specified" + exit 30 +fi NOTEDIR=$BASEDIR/$NOTEBOOK/$SECTION/ NOTE=$NOTEDIR$NAME.$EXT -if [ "$ENCRYPTION" == "TRUE" ]; then -NOTE=$NOTE.tmp -fi -#========================================================================== -# Subection: Create -#========================================================================== -if [ -z "$CREATE" -a -z "$EDIT" -a -z "$PRINT" ]; then #If no action specified, print help and exit -help -exit -else +if [ "$ENCRYPTION" == "TRUE" ]; then NOTE=$NOTE.tmp fi -if [ "$CREATE" == "TRUE" ]; then -if [ -e $NOTE -o -e ${NOTE%.*} ]; then - -echo "" -echo "ERROR: Note already exists" -echo "Hint: use -e to edit the note." -echo "" -exit -else -#Create any necessary folders -mkdir -p $NOTEDIR - -#Fill in title -echo "TITLE: $NAME" > $NOTE -#Fill the second line with the date -echo "DATE: $(date)" >> $NOTE - -if [ "$ENCRYPTION" == "TRUE" ]; then -if [ $EDIT == "FALSE" ]; then -openssl enc -aes-256-cbc -salt -in $NOTE -out ${NOTE%.*} -pass pass:$ENC_KEY -fi -fi -fi -fi -# delete.sns.sh - -if [ "$DELETE" == "TRUE" ]; then -if [ -e $NOTE -o -e ${NOTE%.*} ]; then -if [ "$ENCRYPTION" == "TRUE" ]; then -rm ${NOTE%.*} -else -rm $NOTE -fi - -echo "" -echo "Deleted note: $NOTEBOOK/$SECTION$NAME." -exit -else - -echo "" -echo "ERROR: Note $NOTEBOOK/$SECTION$NAME does not exist." -exit -fi -fi -#========================================================================== -# Subection: Edit -#========================================================================== -if [ "$EDIT" == "TRUE" ]; then -if [ -r "$NOTE" -o -r ${NOTE%.*} ]; then -if [ -z "$CREATE" ]; then -if [ "$ENCRYPTION" == "TRUE" ]; then -TMP_NAME=$ROOTDIR/tmp/$RANDOM -openssl enc -d -aes-256-cbc -in ${NOTE%.*} -pass pass:$ENC_KEY > $TMP_NAME -echo "" >> $TMP_NAME -echo "EDIT $(date)" >> $TMP_NAME -else -echo "" >> $NOTE -echo "EDIT $(date)" >> $NOTE -fi -fi -$EDITOR $NOTE -if [ "$ENCRYPTION" == "TRUE" ]; then -openssl enc -aes-256-cbc -salt -in $NOTE -out ${NOTE%.*} -pass pass:$ENC_KEY -rm $NOTE -fi - -else -echo "" -echo "ERROR: Note cannot be opened for editting." -echo "" -fi -fi - -fi -#========================================================================== -# Subection: Print -#========================================================================== -if [ "$PRINT" == "TRUE" ]; then -if [ -r "$NOTE" -o -r ${NOTE%.*} ]; then -if [ -z "$CREATE" ]; then -if [ "$ENCRYPTION" == "TRUE" ]; then -openssl enc -d -aes-256-cbc -in ${NOTE%.*} -pass pass:$ENC_KEY -else -cat $NOTE -echo "" >> $NOTE -fi -else - -echo "" -echo "ERROR: Note cannot be found." -echo "" - -fi -fi - -fi -# list.sns.sh - -if [ -n "$LIST" ]; then -NOTEBOOK="$NAME" #In case of a list command, arg parsing fails. -if [ -z "$NOTEBOOK" ]; then -echo " ERROR: Insufficient arguments" -help -exit -else -if [ -d "$BASEDIR"/"$NOTEBOOK" ]; then - -echo "" -printf "Notes in $(basename $NOTEBOOK):" -echo "" -NOTES=( $(find $BASEDIR/$NOTEBOOK -name "*.$EXT" -print0 | sed s:$BASEDIR/$NOTEBOOK/:" ":g | sed -e s:".$EXT"::g | tr "/" " ") ) -let i=0 -for NOTE in ${NOTES[@]}; do -if [ -d $BASEDIR/$NOTEBOOK/$NOTE ]; then -if [ "$LAST_SECTION" != "$NOTE" ]; then -printf " Section: $NOTE\n" -fi -LAST_SECTION=$NOTE -else -#if [ $(($i % 1)) -eq 0 ]; then -# printf "\n " -#fi -printf " $NOTE\n" -fi -let i++ -done -printf "\n" -else -echo "" -echo "ERROR: Notebook $NOTEBOOK does not exist." -echo "" -fi -fi -exit -fi diff --git a/sns.xcodeproj/project.pbxproj b/sns.xcodeproj/project.pbxproj index 91cdc64..c31e0a4 100644 --- a/sns.xcodeproj/project.pbxproj +++ b/sns.xcodeproj/project.pbxproj @@ -13,18 +13,22 @@ 5DE8397B1AB9D629006CB4F6 /* stage1.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = stage1.sns.sh; sourceTree = ""; }; 5DE8397C1AB9D64B006CB4F6 /* stage2.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = stage2.sns.sh; sourceTree = ""; }; 5DE8397D1AB9D694006CB4F6 /* stage3.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = stage3.sns.sh; sourceTree = ""; }; - 5DE8397E1AB9D72D006CB4F6 /* help.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = help.sns.sh; sourceTree = ""; }; 5DE8397F1AB9D7B9006CB4F6 /* create.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = create.sns.sh; sourceTree = ""; }; 5DE839801AB9D7DD006CB4F6 /* edit.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = edit.sns.sh; sourceTree = ""; }; 5DE839811AB9D7F8006CB4F6 /* print.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = print.sns.sh; sourceTree = ""; }; 5DE839821AB9DAA6006CB4F6 /* wconf.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = wconf.sns.sh; sourceTree = ""; }; 5DE839831AB9DACE006CB4F6 /* sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = sns.sh; sourceTree = ""; }; + 5DE839841AB9FDF9006CB4F6 /* help.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = help.sns.sh; sourceTree = ""; }; + 5DE839851AB9FE1C006CB4F6 /* pause.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = pause.sns.sh; sourceTree = ""; }; + 5DE839861AB9FF14006CB4F6 /* init_default_config.sns.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = init_default_config.sns.sh; sourceTree = ""; }; + 5DE839881ABA04DD006CB4F6 /* errors.ref */ = {isa = PBXFileReference; lastKnownFileType = text; path = errors.ref; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXGroup section */ 5D7E61181AB74D11001D49B9 = { isa = PBXGroup; children = ( + 5DE839881ABA04DD006CB4F6 /* errors.ref */, 5DE839831AB9DACE006CB4F6 /* sns.sh */, 5DE839791AB9D5F8006CB4F6 /* init */, 5D7E611F1AB74D33001D49B9 /* build.sh */, @@ -35,10 +39,12 @@ 5DE839751AB9D41B006CB4F6 /* functions */ = { isa = PBXGroup; children = ( + 5DE839861AB9FF14006CB4F6 /* init_default_config.sns.sh */, 5DE839821AB9DAA6006CB4F6 /* wconf.sns.sh */, + 5DE839841AB9FDF9006CB4F6 /* help.sns.sh */, + 5DE839851AB9FE1C006CB4F6 /* pause.sns.sh */, 5DE839761AB9D42F006CB4F6 /* list.sns.sh */, 5DE839771AB9D52C006CB4F6 /* delete.sns.sh */, - 5DE8397E1AB9D72D006CB4F6 /* help.sns.sh */, 5DE8397F1AB9D7B9006CB4F6 /* create.sns.sh */, 5DE839801AB9D7DD006CB4F6 /* edit.sns.sh */, 5DE839811AB9D7F8006CB4F6 /* print.sns.sh */,