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