mirror of
https://github.com/TheAnachronism/docspell.git
synced 2024-11-13 02:31:10 +00:00
180 lines
4.9 KiB
Bash
Executable File
180 lines
4.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
echo "##################### START #####################"
|
|
|
|
echo " Docspell Consumedir Cleaner - v0.1 beta"
|
|
echo " by totti4ever" && echo
|
|
echo " $(date)"
|
|
echo
|
|
echo "#################################################"
|
|
echo && echo
|
|
|
|
jq --version > /dev/null
|
|
if [ $? -ne 0 ]; then
|
|
echo "please install 'jq'"
|
|
exit -4
|
|
fi
|
|
|
|
ds_url=${1%/}
|
|
ds_user_param=$2
|
|
ds_user=${ds_user_param#*/}
|
|
ds_collective=${ds_user_param%%/*}
|
|
ds_password=$3
|
|
ds_consumedir_path=${4%/}
|
|
ds_archive_path=$ds_consumedir_path/_archive/$ds_collective
|
|
|
|
|
|
if [ $# -ne 4 ]; then
|
|
echo "FATAL Exactly four parameters needed"
|
|
exit -3
|
|
elif [ "$1" == "" ] || [ "$2" == "" ] || [ "$3" == "" ] || [ "$4" == "" ]; then
|
|
echo "FATAL Parameter missing"
|
|
echo " ds_url: $ds_url"
|
|
echo " ds_user: $ds_user"
|
|
echo " ds_password: $ds_password"
|
|
echo " ds_consumedir_path: $ds_consumedir_path"
|
|
exit -2
|
|
elif [ "$ds_collective" == "_archive" ]; then
|
|
echo "FATAL collective name '_archive' is not supported by this script"
|
|
exit -1
|
|
fi
|
|
|
|
|
|
############# FUNCTIONS
|
|
function curl_call() {
|
|
curl_cmd="$1 -H 'X-Docspell-Auth: $ds_token'"
|
|
curl_result=$(eval $curl_cmd)
|
|
curl_code=$?
|
|
|
|
if [ "$curl_result" == '"Authentication failed."' ] || [ "$curl_result" == 'Response timed out' ]; then
|
|
printf "\nNew login required ($curl_result)... "
|
|
login
|
|
printf "%${#len_resultset}s" " "; printf " .."
|
|
curl_call $1
|
|
|
|
elif [ "$curl_result" == "Bad Gateway" ] || [ "$curl_result" == '404 page not found' ]; then
|
|
echo "FATAL Connection to server failed"
|
|
exit -1
|
|
fi
|
|
}
|
|
|
|
|
|
function login() {
|
|
curl_call "curl -s -X POST -d '{\"account\": \"$ds_collective/$ds_user\", \"password\": \"$ds_password\"}' ${ds_url}/api/v1/open/auth/login"
|
|
|
|
curl_status=$(echo $curl_result | jq -r ".success")
|
|
|
|
if [ "$curl_status" == "true" ]; then
|
|
ds_token=$(echo $curl_result | jq -r ".token")
|
|
echo "Login successfull ( Token: $ds_token )"
|
|
|
|
else
|
|
echo "FATAL Login not succesfull"
|
|
exit 1
|
|
|
|
fi
|
|
}
|
|
|
|
############# END
|
|
|
|
echo "Settings:"
|
|
if [ "$DS_CC_REMOVE" == "true" ]; then
|
|
echo " ### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ###"
|
|
echo " - DELETE files? YES"
|
|
echo " when already existing in Docspell. This cannot be undone!"
|
|
echo " ### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ###"
|
|
else
|
|
echo " - DELETE files? no"
|
|
echo " moving already uploaded files to archive"
|
|
fi
|
|
echo
|
|
if [ "$DS_CC_UPLOAD_MISSING" == true ]; then
|
|
echo " - UPLOAD files? YES"
|
|
echo " files not existing in Docspell will be uploaded and will be re-checked in the next run."
|
|
else
|
|
echo " - UPLOAD files? no"
|
|
echo " files not existing in Docspell will NOT be uploaded and stay where they are."
|
|
fi
|
|
echo && echo
|
|
echo "Press 'ctrl+c' to cancel"
|
|
for ((i=9;i>=0;i--)); do
|
|
printf "\r waiting $i seconds "
|
|
sleep 1s
|
|
done
|
|
echo && echo
|
|
|
|
# login, get token
|
|
login
|
|
|
|
echo "Scanning folder for collective '$ds_collective' ($ds_consumedir_path/$ds_collective)"
|
|
echo && echo
|
|
|
|
while read -r line
|
|
do
|
|
tmp_filepath=$line
|
|
|
|
if [ "$tmp_filepath" == "" ]; then
|
|
echo "no files found" && echo
|
|
exit 0 #no results
|
|
elif [ ! -f "$tmp_filepath" ]; then
|
|
echo "FATAL no access to file: $tmp_filepath"
|
|
exit 3
|
|
fi
|
|
|
|
echo "Checking '$tmp_filepath'"
|
|
printf "%${#len_resultset}s" " "; printf " "
|
|
|
|
# check for checksum
|
|
tmp_checksum=$(sha256sum "$tmp_filepath" | awk '{print $1}')
|
|
|
|
curl_call "curl -s -X GET '$ds_url/api/v1/sec/checkfile/$tmp_checksum'"
|
|
curl_status=$(echo $curl_result | jq -r ".exists")
|
|
|
|
if [ $curl_code -ne 0 ]; then
|
|
# error
|
|
echo "ERROR $curl_result // $curl_status"
|
|
|
|
# file exists in Docspell
|
|
elif [ "$curl_status" == "true" ]; then
|
|
item_name=$(echo $curl_result | jq -r ".items[0].name")
|
|
item_id=$(echo $curl_result | jq -r ".items[0].id")
|
|
echo "File already exists: '$item_name (ID: $item_id)'"
|
|
|
|
printf "%${#len_resultset}s" " "; printf " "
|
|
if [ "$DS_CC_REMOVE" == "true" ]; then
|
|
echo "... removing file"
|
|
rm "$tmp_filepath"
|
|
else
|
|
created=$(echo $curl_result | jq -r ".items[0].created")
|
|
cur_dir="$ds_archive_path/$(date -d @$(echo "($created+500)/1000" | bc) +%Y-%m
|
|
)"
|
|
echo "... moving to archive by month added ('$cur_dir')"
|
|
mkdir -p "$cur_dir"
|
|
mv "$tmp_filepath" "$cur_dir/"
|
|
fi
|
|
|
|
# file does not exist in Docspell
|
|
else
|
|
|
|
echo "Files does not exist, yet"
|
|
if [ "$DS_CC_UPLOAD_MISSING" == true ]; then
|
|
printf "%${#len_resultset}s" " "; printf " "
|
|
printf "...uploading file.."
|
|
curl_call "curl -s -X POST '$ds_url/api/v1/sec/upload/item' -H 'Content-Type: multipart/form-data' -F 'file=@$tmp_filepath'"
|
|
curl_status=$(echo $curl_result | jq -r ".success")
|
|
if [ "$curl_status" == "true" ]; then
|
|
echo ". done"
|
|
else
|
|
echo -e "\nERROR $curl_result"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo
|
|
done \
|
|
<<< $(find $ds_consumedir_path/$ds_collective -type f)
|
|
|
|
|
|
echo ################# DONE #################
|
|
date
|