htgen-cyberlocker: init at 1.0.0
This commit is contained in:
parent
8f6dec66dc
commit
f01a67acc1
29
krebs/5pkgs/simple/htgen-cyberlocker/default.nix
Normal file
29
krebs/5pkgs/simple/htgen-cyberlocker/default.nix
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
with import <stockholm/lib>;
|
||||||
|
{ pkgs, stdenv }:
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "htgen-cyberlocker";
|
||||||
|
version = "1.0.0";
|
||||||
|
|
||||||
|
src = ./src;
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
(
|
||||||
|
exec > htgen-cyberlocker
|
||||||
|
echo PATH=${makeBinPath [
|
||||||
|
pkgs.coreutils
|
||||||
|
pkgs.file
|
||||||
|
pkgs.findutils
|
||||||
|
pkgs.gnugrep
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.nix
|
||||||
|
pkgs.utillinux
|
||||||
|
]}
|
||||||
|
echo STATEDIR=${shell.escape "\${STATEDIR-$HOME}"}
|
||||||
|
cat $src/htgen-cyberlocker
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
install -D htgen-cyberlocker $out/bin/htgen-cyberlocker
|
||||||
|
'';
|
||||||
|
}
|
79
krebs/5pkgs/simple/htgen-cyberlocker/src/htgen-cyberlocker
Normal file
79
krebs/5pkgs/simple/htgen-cyberlocker/src/htgen-cyberlocker
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
delete_response() {
|
||||||
|
jq -n -r \
|
||||||
|
--arg server "$Server" \
|
||||||
|
'
|
||||||
|
[ "HTTP/1.1 204 OK\r"
|
||||||
|
, "Connection: close\r"
|
||||||
|
, "Server: \($server)\r"
|
||||||
|
, "\r"
|
||||||
|
][]
|
||||||
|
'
|
||||||
|
}
|
||||||
|
|
||||||
|
file_response() {(
|
||||||
|
type=$(file -ib "$1")
|
||||||
|
size=$(wc -c < "$1")
|
||||||
|
jq -n -r \
|
||||||
|
--arg type "$type" \
|
||||||
|
--arg size "$size" \
|
||||||
|
--arg server "$Server" \
|
||||||
|
'
|
||||||
|
[ "HTTP/1.1 200 OK\r"
|
||||||
|
, "Connection: close\r"
|
||||||
|
, "Content-Length: \($size)\r"
|
||||||
|
, "Content-Type: \($type)\r"
|
||||||
|
, "Server: \($server)\r"
|
||||||
|
, "\r"
|
||||||
|
][]
|
||||||
|
'
|
||||||
|
cat "$1"
|
||||||
|
)}
|
||||||
|
|
||||||
|
read_uri() {
|
||||||
|
jq -cn --arg uri "$1" '
|
||||||
|
$uri |
|
||||||
|
capture("^((?<scheme>[^:]*):)?(//(?<authority>[^/]*))?(?<path>[^?#]*)([?](?<query>[^#]*))?([#](?<fragment>.*))?$") |
|
||||||
|
. + {
|
||||||
|
query: (.query | if . != null then
|
||||||
|
split("&") |
|
||||||
|
map(split("=") | {key:.[0],value:.[1]}) |
|
||||||
|
from_entries
|
||||||
|
else . end)
|
||||||
|
}
|
||||||
|
'
|
||||||
|
}
|
||||||
|
|
||||||
|
uri=$(read_uri "$Request_URI")
|
||||||
|
path=$(jq -nr --argjson uri "$uri" '$uri.path')
|
||||||
|
|
||||||
|
case "$Method $path" in
|
||||||
|
'POST /'*|'PUT /'*)
|
||||||
|
content=$(mktemp -t htgen.$$.content.XXXXXXXX)
|
||||||
|
trap "rm $content >&2" EXIT
|
||||||
|
|
||||||
|
head -c $req_content_length > $content
|
||||||
|
|
||||||
|
item=$STATEDIR/items/$(echo "$path" | jq -rR @uri)
|
||||||
|
|
||||||
|
mkdir -v -p $STATEDIR/items >&2
|
||||||
|
cp -v $content $item >&2
|
||||||
|
|
||||||
|
scheme=${req_x_forwarded_proto-http}
|
||||||
|
link=$scheme://$req_host/$path
|
||||||
|
|
||||||
|
;;
|
||||||
|
'GET /'*)
|
||||||
|
item=$STATEDIR/items/$(echo "$path" | jq -rR @uri)
|
||||||
|
if [ -e "$item" ]; then
|
||||||
|
file_response "$item"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
'DELETE /'*)
|
||||||
|
item=$STATEDIR/items/$(echo "$path" | jq -rR @uri)
|
||||||
|
if [ -e "$item" ]; then
|
||||||
|
rm "$item"
|
||||||
|
delete_response
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
esac
|
Loading…
Reference in New Issue
Block a user