From 66b8c1a9e00fb50ff79c3d5cce9a51b4669715f9 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 26 Feb 2014 11:38:02 +0100 Subject: [PATCH] Return 410 Gone (rather than 500) if an output is no longer available --- src/lib/Hydra/Base/Controller/NixChannel.pm | 6 ++---- src/lib/Hydra/Controller/Build.pm | 2 +- src/lib/Hydra/Controller/Root.pm | 5 +---- src/lib/Hydra/Helper/CatalystUtils.pm | 8 +++++++- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/lib/Hydra/Base/Controller/NixChannel.pm b/src/lib/Hydra/Base/Controller/NixChannel.pm index 6452f279..19e5bf8e 100644 --- a/src/lib/Hydra/Base/Controller/NixChannel.pm +++ b/src/lib/Hydra/Base/Controller/NixChannel.pm @@ -84,10 +84,8 @@ sub pkg : Chained('nix') PathPart Args(1) { || notFound($c, "No such package in this channel."); } - unless (all { isValidPath($_->path) } $c->stash->{build}->buildoutputs->all) { - $c->response->status(410); # "Gone" - error($c, "Build " . $c->stash->{build}->id . " is no longer available."); - } + gone($c, "Build " . $c->stash->{build}->id . " is no longer available.") + unless all { isValidPath($_->path) } $c->stash->{build}->buildoutputs->all; $c->stash->{manifestUri} = $c->uri_for($self->action_for("manifest"), $c->req->captures); diff --git a/src/lib/Hydra/Controller/Build.pm b/src/lib/Hydra/Controller/Build.pm index f9d34628..01b76856 100644 --- a/src/lib/Hydra/Controller/Build.pm +++ b/src/lib/Hydra/Controller/Build.pm @@ -242,7 +242,7 @@ sub output : Chained('buildChain') PathPart Args(1) { error($c, "This build is not finished yet.") unless $build->finished; my $output = $build->buildoutputs->find({name => $outputName}); notFound($c, "This build has no output named ‘$outputName’") unless defined $output; - error($c, "Output is not available.") unless isValidPath $output->path; + gone($c, "Output is no longer available.") unless isValidPath $output->path; $c->response->header('Content-Disposition', "attachment; filename=\"build-${\$build->id}-${\$outputName}.nar.bz2\""); $c->stash->{current_view} = 'NixNAR'; diff --git a/src/lib/Hydra/Controller/Root.pm b/src/lib/Hydra/Controller/Root.pm index cc02cbd3..3f816731 100644 --- a/src/lib/Hydra/Controller/Root.pm +++ b/src/lib/Hydra/Controller/Root.pm @@ -230,10 +230,7 @@ sub nar :Local :Args(1) { $path = ($ENV{NIX_STORE_DIR} || "/nix/store")."/$path"; - if (!isValidPath($path)) { - $c->response->status(410); # "Gone" - error($c, "Path " . $path . " is no longer available."); - } + gone($c, "Path " . $path . " is no longer available.") unless isValidPath($path); $c->stash->{current_view} = 'NixNAR'; $c->stash->{storePath} = $path; diff --git a/src/lib/Hydra/Helper/CatalystUtils.pm b/src/lib/Hydra/Helper/CatalystUtils.pm index 22fe3474..e3ebae80 100644 --- a/src/lib/Hydra/Helper/CatalystUtils.pm +++ b/src/lib/Hydra/Helper/CatalystUtils.pm @@ -15,7 +15,7 @@ use feature qw/switch/; our @ISA = qw(Exporter); our @EXPORT = qw( getBuild getPreviousBuild getNextBuild getPreviousSuccessfulBuild - error notFound accessDenied + error notFound gone accessDenied forceLogin requireUser requireProjectOwner requireAdmin requirePost isAdmin isProjectOwner trim getLatestFinishedEval @@ -103,6 +103,12 @@ sub notFound { } +sub gone { + my ($c, $msg) = @_; + error($c, $msg, 410); +} + + sub accessDenied { my ($c, $msg) = @_; error($c, $msg, 403);