From 44e35fd31647a6b2cc83b1248cd897256108d44e Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Sat, 8 Feb 2014 20:35:24 +0000 Subject: [PATCH] [#56] Support API call to /login --- Netdisco/Changes | 1 + Netdisco/lib/App/Netdisco/Web/AuthN.pm | 17 +++++++++++++---- Netdisco/share/environments/deployment.yml | 6 +++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Netdisco/Changes b/Netdisco/Changes index 3ee8f7c4..80fd1a7b 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -6,6 +6,7 @@ * [#74] Device Name / DNS mismatches report * [#71] Node search by date (but not time) * [#73] NetBIOS Poller - nbtstat and nbtwalk + * [#56] Support API call to /login [ENHANCEMENTS] diff --git a/Netdisco/lib/App/Netdisco/Web/AuthN.pm b/Netdisco/lib/App/Netdisco/Web/AuthN.pm index 40578472..c443e498 100644 --- a/Netdisco/lib/App/Netdisco/Web/AuthN.pm +++ b/Netdisco/lib/App/Netdisco/Web/AuthN.pm @@ -33,6 +33,7 @@ get qr{^/(?:login(?:/denied)?)?} => sub { # override default login_handler so we can log access in the database post '/login' => sub { + my $mode = (request->is_ajax ? 'API' : 'Web'); my ($success, $realm) = authenticate_user( params->{username}, params->{password} ); @@ -44,22 +45,30 @@ post '/login' => sub { schema('netdisco')->resultset('UserLog')->create({ username => session('logged_in_user'), userip => request->remote_address, - event => "Login", + event => "Login ($mode)", details => params->{return_url}, }); + return if request->is_ajax; redirect params->{return_url} || uri_for('/'); } else { + session->destroy; + schema('netdisco')->resultset('UserLog')->create({ username => params->{username}, userip => request->remote_address, - event => "Login Failure", + event => "Login Failure ($mode)", details => params->{return_url}, }); - vars->{login_failed}++; - forward uri_for('/login'), { login_failed => 1 }, { method => 'GET' }; + if (request->is_ajax) { + status('unauthorized'); + } + else { + vars->{login_failed}++; + forward uri_for('/login'), { login_failed => 1 }, { method => 'GET' }; + } } }; diff --git a/Netdisco/share/environments/deployment.yml b/Netdisco/share/environments/deployment.yml index 02180926..803b4627 100644 --- a/Netdisco/share/environments/deployment.yml +++ b/Netdisco/share/environments/deployment.yml @@ -28,9 +28,9 @@ safe_password_store: true # ``````````````````````````````````````````````````````` #domain_suffix: '.example.com' -# uncomment and set to true to globally disable authentication/login, -# and also create a user called "guest". -# ``````````````````````````````````````````````````````````````````` +# uncomment and set to true to globally disable authentication/loginr. +# create a user called "guest" if you want to assign port/admin rights. +# ````````````````````````````````````````````````````````````````````` #no_auth: false # SNMP community string(s)