diff --git a/Netdisco/Changes b/Netdisco/Changes
index 80fd1a7b..8215aa1e 100644
--- a/Netdisco/Changes
+++ b/Netdisco/Changes
@@ -19,6 +19,7 @@
* [#84] No longer use dns as a key into devices; cope with dupe dns (LT)
* Correct date formatting and logic in IP Inventory report
+ * Fix redirect when accessing a deep link when unauthenticated
2.022000 - 2014-01-26
diff --git a/Netdisco/lib/App/Netdisco/Web/AuthN.pm b/Netdisco/lib/App/Netdisco/Web/AuthN.pm
index c443e498..51eb9c1d 100644
--- a/Netdisco/lib/App/Netdisco/Web/AuthN.pm
+++ b/Netdisco/lib/App/Netdisco/Web/AuthN.pm
@@ -5,7 +5,8 @@ use Dancer::Plugin::DBIC;
use Dancer::Plugin::Auth::Extensible;
hook 'before' => sub {
- params->{return_url} ||= uri_for('/inventory');
+ params->{return_url} ||= ((request->path ne uri_for('/')->path)
+ ? request->path : uri_for('/inventory'));
if (! session('logged_in_user') && request->path ne uri_for('/login')->path) {
if (setting('trust_x_remote_user') and scalar request->header('X-REMOTE_USER')) {
@@ -28,7 +29,7 @@ hook 'before' => sub {
};
get qr{^/(?:login(?:/denied)?)?} => sub {
- template 'index';
+ template 'index', { return_url => params->{return_url} };
};
# override default login_handler so we can log access in the database
@@ -50,7 +51,7 @@ post '/login' => sub {
});
return if request->is_ajax;
- redirect params->{return_url} || uri_for('/');
+ redirect params->{return_url};
}
else {
session->destroy;
@@ -67,7 +68,9 @@ post '/login' => sub {
}
else {
vars->{login_failed}++;
- forward uri_for('/login'), { login_failed => 1 }, { method => 'GET' };
+ forward uri_for('/login'),
+ { login_failed => 1, return_url => params->{return_url} },
+ { method => 'GET' };
}
}
};
diff --git a/Netdisco/share/views/index.tt b/Netdisco/share/views/index.tt
index 538de26c..84fef330 100644
--- a/Netdisco/share/views/index.tt
+++ b/Netdisco/share/views/index.tt
@@ -42,8 +42,8 @@
- [% IF vars.return_url %]
-
+ [% IF params.return_url %]
+
[% END %]
[% ELSE %]