From b89e8913b623ff69ece9d5b10e65c88f129cf25b Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Mon, 26 Jun 2023 16:54:40 +0100 Subject: [PATCH] #843 redux - also refresh API token for getapikey --- lib/App/Netdisco/Worker/Plugin/GetAPIKey.pm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/App/Netdisco/Worker/Plugin/GetAPIKey.pm b/lib/App/Netdisco/Worker/Plugin/GetAPIKey.pm index bef03ee6..69c9de89 100644 --- a/lib/App/Netdisco/Worker/Plugin/GetAPIKey.pm +++ b/lib/App/Netdisco/Worker/Plugin/GetAPIKey.pm @@ -2,6 +2,7 @@ package App::Netdisco::Worker::Plugin::GetAPIKey; use Dancer ':syntax'; use Dancer::Plugin::DBIC 'schema'; +use Dancer::Plugin::Auth::Extensible; use App::Netdisco::Worker::Plugin; use aliased 'App::Netdisco::Worker::Status'; @@ -22,8 +23,15 @@ register_worker({ phase => 'main' }, sub { return Status->error("No such user") unless $user and $user->in_storage; - $user->update({ token_from => time, token => \'md5(random()::text)' }) - ->discard_changes(); + # from the internals of Dancer::Plugin::Auth::Extensible + my $provider = Dancer::Plugin::Auth::Extensible::auth_provider('users'); + + # if there's a current valid token then reissue it and reset timer + $user->update({ + token_from => time, + ($provider->validate_api_token($user->token) + ? () : (token => \'md5(random()::text)')), + })->discard_changes(); return Status->done( sprintf 'Set token for user %s: %s', $username, $user->token);