#!/usr/bin/haserl --shell=/bin/bash --upload-limit=32768 --upload-dir=/tmp <%# upload limit: 32Mb %> <% #some path variables _WWW='/www' _TMP="${_WWW}/tmp" _LOG="${_WWW}/log/upload.log" _DEBUG=1 err() { _ERR="$?" [[ "$_ERR" -gt 0 ]] || return 0 log "$1" head "${2:='400'}" exit "$_ERR" } log() { [[ "$_DEBUG" -gt 0 ]] || return 0 local _TYPE='I:' [[ "$_ERR" -gt 0 ]] && _TYPE='E:' local _TIME; printf -v _TIME '%(%d.%m.%Y %H:%M:%S)T' -1 printf '%b\n' "$_TIME $_TYPE ${@} " >> "$_LOG" [[ "$_DEBUG" -gt 1 ]] && printf '%b\n' "[verbose] $_TYPE ${1}" return 0 } head() { case "$1" in 200|'') printf '%b' 'HTTP/1.1 200 OK\nAccess-Control-Allow-Origin: *\n\n';; 405) printf '%b' 'HTTP/1.1 405 Method Not Allowed\n\n';; 406) printf '%b' 'HTTP/1.1 406 Not Acceptable\n\n';; *) printf '%b' 'HTTP/1.1 400 Bad Request\n\n';; esac } #_REF="$HTTP_REFERER" #_SESS="$SESSIONID" #log $_REF $_SESS ## checks and sanitation [[ ${CONTENT_TYPE^^} == MULTIPART/FORM-DATA* ]] || err 'wrong content type' '406' [[ "${REQUEST_METHOD^^}" == "POST" ]] || err 'wrong method, not a post' '405' _UPLD="${HASERL_fwupload_path##*/}" mv "$_TMP/$_UPLD" "$_TMP/fwupload.bin" 2>/dev/null || err 'error renaming upload' log 'upload OK' head '200' #UPLD="${HASERL_fwupload_path##*/}" #UPLD="${_UPLD//[^a-zA-Z0-9_.-]/}" #[ -n "$_UPLD" ] || err 'empty filename value, sanitation failed?' #[ -f "$_TMP/$_UPLD" ] || err 'can not access uploaded file, sanitation failed?' #log "$_UPLD" %>