]> git.plutz.net Git - confetti/blob - ledgers/csv_upload.sh
styling for iban assignment
[confetti] / ledgers / csv_upload.sh
1 #!/bin/sh
2
3 # Copyright 2024 Paul Hänsch
4
5 # Permission to use, copy, modify, and/or distribute this software for any
6 # purpose with or without fee is hereby granted, provided that the above
7 # copyright notice and this permission notice appear in all copies.
8
9 # THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
12 # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
15 # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17 if [ "${CONTENT_TYPE%%;*}" != "multipart/form-data" ]; then
18   SET_COOKIE 0 message="Not an upload"
19   REDIRECT "${_BASE}/ledgers/"
20 fi
21
22 . "$_EXEC/multipart.sh"
23 multipart_cache
24
25 # Validate session id from form to prevent CSRF
26 if [ "$(multipart session_id)" != "$SESSION_ID" ]; then
27   rm -- "$multipart_cachefile"
28   SET_COOKIE 0 message="INVALID SESSION ID IN FORM"
29   REDIRECT "${_BASE}/ledgers/"
30 fi
31
32 mkdir -p "$_DATA/ledgers/"
33 CSV="$(multipart "csv" 1 | "$_EXEC/ledgers/csv_upload.awk")"
34 rm -- "$multipart_cachefile"
35
36 read dtu_start dt_start dtu_end dt_end balance_start balance_end <<-EOF
37         ${CSV%%${BR}*}
38 EOF
39
40 if [ ! "$dtu_end" -o ! "$dtu_start" ] || [ "$dtu_end" -lt "$dtu_start" ]; then
41   SET_COOKIE 0 message="No valid date range in upload"
42 else
43   num=0; while [ ! "$filename" -o -f "$_DATA/ledgers/$filename" ]; do
44     num=$((num + 1)); filename="${dt_start} - ${dt_end} - $(printf '%04i' $num).tbl"
45   done
46   printf '%s\n' "$CSV" >"$_DATA/ledgers/$filename"
47 fi
48
49 REDIRECT "${_BASE}/ledgers/"