forked from lix-project/lix
51 lines
1.3 KiB
Bash
Executable file
51 lines
1.3 KiB
Bash
Executable file
#! /bin/sh
|
|
|
|
export HOME=/tmp
|
|
export NIX_REMOTE=daemon
|
|
|
|
TMP_DIR="${TMP_DIR:-/tmp/nix-export}"
|
|
|
|
@coreutils@/mkdir -p "$TMP_DIR" || true
|
|
@coreutils@/chmod a+r "$TMP_DIR"
|
|
|
|
needed_path="?$QUERY_STRING"
|
|
needed_path="${needed_path#*[?&]needed_path=}"
|
|
needed_path="${needed_path%%&*}"
|
|
#needed_path="$(echo $needed_path | ./unhttp)"
|
|
needed_path="${needed_path//%2B/+}"
|
|
needed_path="${needed_path//%3D/=}"
|
|
|
|
echo needed_path: "$needed_path" >&2
|
|
|
|
NIX_STORE="${NIX_STORE_DIR:-/nix/store}"
|
|
|
|
echo NIX_STORE: "${NIX_STORE}" >&2
|
|
|
|
full_path="${NIX_STORE}"/"$needed_path"
|
|
|
|
if [ "$needed_path" != "${needed_path%.drv}" ]; then
|
|
echo "Status: 403 You should create the derivation file yourself"
|
|
echo "Content-Type: text/plain"
|
|
echo
|
|
echo "Refusing to disclose derivation contents"
|
|
exit
|
|
fi
|
|
|
|
if @bindir@/nix-store --check-validity "$full_path"; then
|
|
if ! [ -e nix-export/"$needed_path".nar.gz ]; then
|
|
@bindir@/nix-store --export "$full_path" | @gzip@ > "$TMP_DIR"/"$needed_path".nar.gz
|
|
@coreutils@/ln -fs "$TMP_DIR"/"$needed_path".nar.gz nix-export/"$needed_path".nar.gz
|
|
fi;
|
|
echo "Status: 301 Moved"
|
|
echo "Location: nix-export/"$needed_path".nar.gz"
|
|
echo
|
|
else
|
|
echo "Status: 404 No such path found"
|
|
echo "Content-Type: text/plain"
|
|
echo
|
|
echo "Path not found:"
|
|
echo "$needed_path"
|
|
echo "checked:"
|
|
echo "$full_path"
|
|
fi
|
|
|