-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpurchase
executable file
·176 lines (152 loc) · 4.64 KB
/
purchase
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/bin/bash
#
# purchase stamps from swisspost v0.1
# 2013-02: initial release
# 2014-08: make purchase work again
# usage:
# ./purchase -t A|B -n number -p L|R|U [-m nxm] [-s nxm] [-o output-filename]
# (./login needs to be runned first)
# (c) 2013 by cyrill von wattenwyl
#
USER_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
set -- `getopt -o t:n:p:m:s:o: -l "type: number: position: mediumsize: stamppos: output:" -n "purchase" "h" "$@"` || usage
[ $# -eq 0 ] && usage
OUTPUT="webstamp.pdf"
while [ $# -gt 0 ]
do
case "$1" in
-t|--type) WS_TYPE=`echo "${2^^}"`; shift;;
-n|--number) WS_NUM=$2; shift;;
-p|--position) WS_POS=`echo "${2^^}"`; shift;;
-m|--mediasize) WS_MEDIUMSIZE_RAW=$2; shift;;
-s|--stamppos) WS_STAMPPOS_RAW=$2; shift;;
-o|--output) OUTPUT=`echo $2 | cut -d"'" -f2`; shift;;
--) shift; break;;
esac
shift
done
#check type (needs to be A or B)
VALID="'A' 'B'"
TYPE_VALID=n
case "${VALID[@]}" in *"$WS_TYPE"*)
TYPE_VALID=y
case $WS_TYPE in
"'A'")
PROD_ID="14254";
DELIVERY="A-Post";
shift;;
"'B'")
PROD_ID="14269";
DELIVERY="B-Post";
shift;;
esac
esac
if [ -z $WS_TYPE ]; then TYPE_VALID=n; fi
if [ $TYPE_VALID = n ]; then
echo "-t or --type needs to be A or B"
exit 1
fi
#position (needs to be L, R or U)
VALID="'L' 'R' 'U'"
POS_VALID=n
MEDIA_ID=0
case "${VALID[@]}" in *"$WS_POS"*)
POS_VALID=y
case $WS_POS in
"'L'")
MEDIA_ID="106";
WIDTH=210
HEIGHT=296
LEFT=15
TOP=41
shift;;
"'R'")
MEDIA_ID="107";
WIDTH=210
HEIGHT=296
LEFT=110
TOP=41
shift;;
"'U'") MEDIA_ID="userdefined"; shift;;
esac
esac
if [ -z $WS_POS ]; then POS_VALID=n; fi
if [ $POS_VALID = n ]; then
echo "-p or --position needs to be L, R or U"
exit 1
fi
#number of stamps
COUNT=`echo $WS_NUM | cut -d"'" -f2`
case $COUNT in
''|*[!0-9]*) NUMBER_VALID=n ;;
*) NUMBER_VALID=y ;;
esac
if [ $NUMBER_VALID = n ]; then
echo "-n or --number needs to be an integer value"
exit 1
fi
#mediasize and position
if [ $MEDIA_ID = "userdefined" ]; then
WIDTH=`echo $WS_MEDIUMSIZE_RAW | cut -d"'" -f2 | cut -d'x' -f1`
HEIGHT=`echo $WS_MEDIUMSIZE_RAW | cut -d"'" -f2 | cut -d'x' -f2 `
LEFT=`echo $WS_STAMPPOS_RAW | cut -d"'" -f2 | cut -d'x' -f1`
TOP=`echo $WS_STAMPPOS_RAW | cut -d"'" -f2 | cut -d'x' -f2`
USERPOS_VALID=n
case $WIDTH in
''|*[!0-9]*) USERPOS_VALID=n ;;
*) USERPOS_VALID=y ;;
esac
case $HEIGHT in
''|*[!0-9]*) USERPOS_VALID=n ;;
*) USERPOS_VALID=y ;;
esac
case $LEFT in
''|*[!0-9]*) USERPOS_VALID=n ;;
*) USERPOS_VALID=y ;;
esac
case $TOP in
''|*[!0-9]*) USERPOS_VALID=n ;;
*) USERPOS_VALID=y ;;
esac
if [ $USERPOS_VALID = n ]; then
echo -e "-m or --mediasize / -s or --stamppos user defined positions not correct. example:\n-m 210x225 -s 110x41"
exit 1
fi
fi
SESSID=$(cat cc | cut -f7 | tail -n1)
#end of checking args, now every variable should be clean
# getting right cookie
echo "1/5"
URL="https://ws.sso.post.ch/members/?_step=2&members_sessid=$SESSID"
curl -L -A "$USER_AGENT" -c cc -b cc $URL > /dev/null 2>&1
# step 2
echo "2/5"
DEFAULT_DATA="_step=3&_pstep=2&_back=&product_group=Brief%A0Inland&format=Standardbrief&zone=null&_media_type_id=3&_option_recipientaddress=0"
DATA="$DEFAULT_DATA&delivery=$DELIVERY&_product_id=$PROD_ID"
URL="https://ws.sso.post.ch/members/"
curl -L -A "$USER_AGENT" -c cc -b cc -d $DATA $URL > /tmp/ws-token04 2>/dev/null
# step 3
echo "3/5"
ADRESS_ID=$(cat /tmp/ws-token04 | grep 'sender_addresses=\[\[' | cut -d'[' -f3 | cut -d',' -f1)
DEFAULT_DATA="_step=6&_pstep=5&_back=&_save=&_cm=&_base_system_media_id=101&_edit=0&_order_comment=&_license_id=s%7C1&_base_user_media_id="
DATA="$DEFAULT_DATA&_items=$COUNT&_sender_address_id=$ADRESS_ID&_zone_width=$WIDTH&_zone_height=$HEIGHT&_system_media_id=$MEDIA_ID&zone_x=$LEFT&zone_y=$TOP"
curl -L -A "$USER_AGENT" -c cc -b cc -d $DATA $URL > /dev/null 2>&1
# step 4 / 5
echo "4/5"
URL="https://ws.sso.post.ch/members/?_step=8"
curl -L -A "$USER_AGENT" -c cc -b cc $URL > /tmp/ws-token05 2>/dev/null
echo "4.1/5"
URL="https://ws.sso.post.ch/members/?_step=8.1&_remote=1"
curl -L -A "$USER_AGENT" -c cc -b cc $URL > /dev/null 2>&1
echo "4.2/5"
URL="https://ws.sso.post.ch/members/?_step=8.4&_jsrc_slot=0&_jsrc_mode=2"
curl -L -A "$USER_AGENT" -c cc -b cc $URL > /dev/null 2>&1
# download pdf
echo "5/5"
PDFFILE=$(cat /tmp/ws-token05 | grep download_path | cut -d'=' -f2 | sed "s/'//g" | sed 's/;//g' | cut -d'/' -f5)
DOWNLOAD_PATH="https://ws.sso.post.ch/download/stamps/members/$PDFFILE"
sleep 3
curl -L -A "$USER_AGENT" -c cc -b cc -o "$OUTPUT" "$DOWNLOAD_PATH" 2>&1
# remove temporary tokens
rm /tmp/ws-token04 /tmp/ws-token05
exit 0;