diff --git a/PassBatchInsert.sh b/PassBatchInsert.sh new file mode 100755 index 0000000..97076b5 --- /dev/null +++ b/PassBatchInsert.sh @@ -0,0 +1,136 @@ +#!/bin/bash +# ============================================================================================ +# Script for Bulk Creating Pass Entries Based on a JSON File +# ============================================================================================ +# +: ' + + Title : + PassBatchInsert.sh + + Usage : + Automate inserts of pass (password-store) entries based on a JSON file or input. + + Requires: + + jq + > brew install jq + + Model : + { + filename:'', + password:'', + url:'', + user:'' + } + +'; + + +###################### VARS ###################### + + +DATE_CUR=$(date '+%Y-%m-%d__%H:%M:%S'); + +SCRIPT_NAME="PassBatchInsert"; + +SCRIPT_DIR=$(dirname "$0"); + +JSON_FILE=$SCRIPT_DIR/input/$SCRIPT_NAME.json; + +SCRIPT_TMP="$SCRIPT_DIR/log/$SCRIPT_NAME.tmp"; + +SCRIPT_LOG="$SCRIPT_DIR/log/$SCRIPT_NAME.log"; + +LOG_BEGIN=" +================================================================= +|| || +|| $SCRIPT_NAME || +|| $DATE_CUR || +|| || +================================================================="; + +LOG_END=" +================================================================= +||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|| +================================================================="; + + +################## LOG STUFF #################### + + +function start_log() { + echo -e "$LOG_BEGIN" | tee -a $SCRIPT_LOG; +} + +function end_log() { + echo -e "$LOG_END" | tee -a $SCRIPT_LOG; +} + +function echo_log() { + echo -e "\n -:- $1\n" | tee -a $SCRIPT_LOG; +} + +function echo_error() { + echo -e "\n$SCRIPT_NAME ~ GENERAL SCRIPT ERROR: \n$1\n" | tee -a $SCRIPT_LOG; +} + +function arg_error() { + echo -e "\n$SCRIPT_NAME ~ REQUIRED ARGUMENT NOT FOUND: \n$1\n" | tee -a $SCRIPT_LOG; +} + + +################## PROCEDURES #################### + + +function process_json_entries() { + + # Load JSON Input + JSON_LENGTH=$(jq -r '. | length' $JSON_FILE); + + # Loop Through JSON_INPUT And Insert Pass Entries + if [[ JSON_LENGTH > 0 ]]; then + for (( i=0; i<$JSON_LENGTH; i++ )); do + path=$(jq -r ".[${i}].path" $JSON_FILE); + filename=$(jq -r ".[${i}].filename" $JSON_FILE); + password=$(jq -r ".[${i}].password" $JSON_FILE); + url=$(jq -r ".[${i}].url" $JSON_FILE); + user=$(jq -r ".[${i}].user" $JSON_FILE); + + # Start Log + echo -e "\nProcessing Entry for: $user at $url" | tee -a $SCRIPT_LOG; + + # Check If Entry Exists + check_for_entry=$(pass ls "$path/$filename"); + + # If New, Enter + if [ -z "$check_for_entry" ]; then + echo -e "-- Adding New Entry -- $path/$filename." | tee -a $SCRIPT_LOG; + echo -e "$password\nurl: $url\nuser: $user" | pass insert -m "$path/$filename"; + else + echo -e "-- Skipping Entry -- entry already exists." | tee -a $SCRIPT_LOG; + fi + + done + else + echo -e "\n\n !!! Init Fail -- Unable to load the JSON file !!!\n" | tee -a $SCRIPT_LOG; + fi + +} + + +##################### MAIN ###################### + + +function main_process() { + process_json_entries; +} + + +###################### INIT ###################### + + +start_log; +main_process; +end_log; +exit 1; \ No newline at end of file diff --git a/README.md b/README.md index 24fd365..f058b1d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,50 @@ -# PassBatchInsert +# [PassBatchInsert](https://gitea.dubtempo.com/DT/PassBatchInsert) -This script is used to batch import passwords from a json file into the password management program: password-store, aka "pass". \ No newline at end of file +This script is used to batch import passwords from a json file into the password management program: password-store, aka "pass". + +
+ +## Requirements + +Make sure all dependencies have been installed before using this script: +* [Password Store](https://www.passwordstore.org/) >= 1.7.4 -- prior untested + +
+ +## Project Installation + +Install this project via git pull: + +```shell +# from your new project parent dir +$ git clone https://gitea.dubtempo.com/DT/PassBatchInsert.git +``` + +Make sure the script file is executable. + +## Password Details Model + +```json +[ + { + filename:'', + password:'', + url:'', + user:'' + } +] +``` + +
+ +## Project Usage + +To use this codebase, complete the following steps. + +1. Add your passwords to the PassBatchInser.json file following the model. + +1. Run the script using the following command: + +```shell +$ PassBatchInsert.sh +``` \ No newline at end of file diff --git a/input/PassBatchInsert.json.sample b/input/PassBatchInsert.json.sample new file mode 100644 index 0000000..3c3b0e5 --- /dev/null +++ b/input/PassBatchInsert.json.sample @@ -0,0 +1,9 @@ +[ + { + "path": "", + "filename": "", + "password": "", + "url": "", + "user": "" + } +] \ No newline at end of file