aboutsummaryrefslogtreecommitdiff
path: root/scripts/nix-http-export.cgi.in
diff options
context:
space:
mode:
authorMichael Raskin <7c6f434c@mail.ru>2008-05-07 14:18:28 +0000
committerMichael Raskin <7c6f434c@mail.ru>2008-05-07 14:18:28 +0000
commitb4bc8b76160ff81e0e5489b88ff3ca8cbd587131 (patch)
tree1a8b42c2f50a411ed752114c17bbc9324e1bb36a /scripts/nix-http-export.cgi.in
parentb1e321d6ce0b4ef2e042021939a3d6be160841f8 (diff)
--proxy=proxy:3128
Diffstat (limited to 'scripts/nix-http-export.cgi.in')
-rwxr-xr-xscripts/nix-http-export.cgi.in50
1 files changed, 50 insertions, 0 deletions
diff --git a/scripts/nix-http-export.cgi.in b/scripts/nix-http-export.cgi.in
new file mode 100755
index 000000000..89df8b144
--- /dev/null
+++ b/scripts/nix-http-export.cgi.in
@@ -0,0 +1,50 @@
+#! /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="$(echo $needed_path | sed -e 's/%2B/+/g; s/%3D/=/g')"
+
+echo needed_path: "$needed_path" >&2
+
+NIX_STORE="${NIX_STORE:-/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 [ -e "$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
+