/
titanpad_backup.sh
executable file
·113 lines (101 loc) · 2.57 KB
/
titanpad_backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
DOMAIN=
USER=
PASSWORD=
USER_PASSWORD_FILE=
PURGE_OLD_FILES=
COOKIE=~/titanpad/.cookie
LOCATION=~/titanpad/titanpad_backup_pads_$(date "+%Y-%m-%d").zip
usage() {
echo "Usage: $0 [-hx] -d <subdomain> {-u <user> -p <password> | -a <user-password-file>}" 1>&2;
echo " -h This usage note"
echo " -x Delete backups older than 30 days"
echo " -d Subdomain to backup"
echo " -u Username"
echo " -p Password"
echo " -a File containing Username (first line) and Password (second line)"
exit 1;
}
# make sure backup directory exists
ensure_paths() {
mkdir -p ~/titanpad
touch $COOKIE
}
# login and set cookie
login() {
wget --no-check-certificate \
--keep-session-cookies \
-O /dev/null \
--save-cookies $COOKIE \
"https://$DOMAIN.titanpad.com/"
wget --no-check-certificate \
--load-cookies $COOKIE \
-O /dev/null \
--post-data "email=$USER&password=$PASSWORD" \
"https://$DOMAIN.titanpad.com/ep/account/sign-in"
}
# remove cookie
logout() {
rm $COOKIE
}
# download the newest pad
download_newest_pad() {
wget --load-cookies $COOKIE \
--no-check-certificate \
--quiet \
-O "$LOCATION" \
"https://$DOMAIN.titanpad.com/ep/padlist/all-pads.zip"
}
# verify zip file
verify_download() {
unzip -t "$LOCATION"
}
# delete older files than a month
delete_old_files() {
if [ "$PURGE_OLD_FILES" == 1 ];then
find ~/titanpad/titanpad_backup_pads* -mtime +30 -exec rm {} \;
fi
}
while getopts ":d:u:p:a:x" o; do
case "${o}" in
d)
DOMAIN=${OPTARG}
;;
a)
USER_PASSWORD_FILE=${OPTARG}
;;
u)
USER=${OPTARG}
;;
p)
PASSWORD=${OPTARG}
;;
x)
PURGE_OLD_FILES=1
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
if [ -z "$DOMAIN" ];then
usage
elif [ -z "$USER" ] || [ -z "$PASSWORD" ];then
if [ -z "$USER_PASSWORD_FILE" ] || [ ! -f "$USER_PASSWORD_FILE" ] || [ ! -r "$USER_PASSWORD_FILE" ];then
echo "No such file: $USER_PASSWORD_FILE"
usage
else
USER=$(head -n1 < $USER_PASSWORD_FILE)
PASSWORD=$(sed -n 2p $USER_PASSWORD_FILE)
if [ -z "$USER" ] || [ -z "$PASSWORD" ];then
echo "Couldn't parse user/password file. Must contain username and password separated by single newline."
usage
fi
fi
fi
ensure_paths
login
download_newest_pad
verify_download
logout
delete_old_files