aboutsummaryrefslogtreecommitdiff
path: root/modules/pkgs/nix-serve/nix-serve.psgi
diff options
context:
space:
mode:
Diffstat (limited to 'modules/pkgs/nix-serve/nix-serve.psgi')
-rw-r--r--modules/pkgs/nix-serve/nix-serve.psgi77
1 files changed, 0 insertions, 77 deletions
diff --git a/modules/pkgs/nix-serve/nix-serve.psgi b/modules/pkgs/nix-serve/nix-serve.psgi
deleted file mode 100644
index e368531..0000000
--- a/modules/pkgs/nix-serve/nix-serve.psgi
+++ /dev/null
@@ -1,77 +0,0 @@
-# This is nix-serve (https://github.com/edolstra/nix-serve) using pxz instead of bzip2
-use MIME::Base64;
-use Nix::Config;
-use Nix::Manifest;
-use Nix::Store;
-use Nix::Utils;
-use strict;
-
-sub stripPath {
- my ($x) = @_;
- $x =~ s/.*\///; $x
-}
-
-my $app = sub {
- my $env = shift;
- my $path = $env->{PATH_INFO};
-
- if ($path eq "/nix-cache-info") {
- return [200, ['Content-Type' => 'text/plain'], ["StoreDir: $Nix::Config::storeDir\nWantMassQuery: 1\nPriority: 30\n"]];
- }
-
- elsif ($path =~ '/([0-9a-z]+)\.narinfo$') {
- my $hashPart = $1;
- my $storePath = queryPathFromHashPart($hashPart);
- return [404, ['Content-Type' => 'text/plain'], ["No such path.\n"]] unless $storePath;
- my ($deriver, $narHash, $time, $narSize, $refs) = queryPathInfo($storePath, 1) or die;
- my $compression;
- my $ext;
- if ($narSize < 1024) {
- $compression = 'none';
- $ext = '';
- } else {
- $compression = 'xz';
- $ext = '.xz';
- }
- my $res =
- "StorePath: $storePath\n" .
- "URL: nar/$hashPart.nar$ext\n" .
- "Compression: $compression\n" .
- "NarHash: $narHash\n" .
- "NarSize: $narSize\n";
- $res .= "References: " . join(" ", map { stripPath($_) } @$refs) . "\n"
- if scalar @$refs > 0;
- $res .= "Deriver: " . stripPath($deriver) . "\n" if defined $deriver;
- my $secretKeyFile = $ENV{'NIX_SECRET_KEY_FILE'};
- if (defined $secretKeyFile) {
- my $secretKey = readFile $secretKeyFile;
- chomp $secretKey;
- my $fingerprint = fingerprintPath($storePath, $narHash, $narSize, $refs);
- my $sig = signString($secretKey, $fingerprint);
- $res .= "Sig: $sig\n";
- }
- return [200, ['Content-Type' => 'text/x-nix-narinfo'], [$res]];
- }
-
- elsif ($path =~ '/nar/([0-9a-z]+)\.nar.xz$') {
- my $hashPart = $1;
- my $storePath = queryPathFromHashPart($hashPart);
- return [404, ['Content-Type' => 'text/plain'], ["No such path.\n"]] unless $storePath;
- my $fh = new IO::Handle;
- open $fh, "nix-store --dump '$storePath' | nice -n 19 pxz -0 |";
- return [200, ['Content-Type' => 'application/x-xz'], $fh];
- }
-
- elsif ($path =~ '/nar/([0-9a-z]+)\.nar$') {
- my $hashPart = $1;
- my $storePath = queryPathFromHashPart($hashPart);
- return [404, ['Content-Type' => 'text/plain'], ["No such path.\n"]] unless $storePath;
- my $fh = new IO::Handle;
- open $fh, "nix-store --dump '$storePath' |";
- return [200, ['Content-Type' => 'application/octet-stream'], $fh];
- }
-
- else {
- return [404, ['Content-Type' => 'text/plain'], ["File not found.\n"]];
- }
-}