diff --git a/lib/NGCP/Panel/Controller/Login.pm b/lib/NGCP/Panel/Controller/Login.pm index eba808ff46..2c1237e900 100644 --- a/lib/NGCP/Panel/Controller/Login.pm +++ b/lib/NGCP/Panel/Controller/Login.pm @@ -49,6 +49,38 @@ sub login_index :Path Form { if($res) { # auth ok + + if ($realm eq 'admin') { + use Crypt::JWT qw/encode_jwt/; + + my $key = $c->config->{'Plugin::Authentication'}{api_admin_jwt}{credential}{jwt_key}; + my $relative_exp = $c->config->{'Plugin::Authentication'}{api_admin_jwt}{credential}{relative_exp}; + my $alg = $c->config->{'Plugin::Authentication'}{api_admin_jwt}{credential}{alg}; + + unless ($key) { + NGCP::Panel::Utils::Message::error( + c => $c, + desc => $c->loc('No JWT key has been configured.'), + ); + } + + my $raw_key = pack('H*', $key); + + my $jwt_data = { + id => $c->user->id, + username => $c->user->login, + }; + my $token = encode_jwt( + payload => $jwt_data, + key => $raw_key, + alg => $alg, + $relative_exp ? (relative_exp => $relative_exp) : (), + ); + + $c->session->{aui_adminId} = $c->user->id; + $c->session->{aui_jwt} = $token; + } + $c->session->{user_tz} = undef; # reset to reload from db $c->session->{user_tz_name} = undef; # reset to reload from db my $target = $c->session->{'target'} || '/'; diff --git a/share/layout/body.tt b/share/layout/body.tt index f2c0effbdb..ff28329b16 100644 --- a/share/layout/body.tt +++ b/share/layout/body.tt @@ -157,6 +157,13 @@ if (!window.console) { } Theme.init (); + +[% IF c.session.aui_adminId && c.session.aui_jwt -%] + localStorage.setItem('aui_adminId', [% c.session.aui_adminId -%]); + localStorage.setItem('aui_jwt', '[% c.session.aui_jwt -%]'); + [% c.session.delete('aui_adminId', 'aui_jwt') %] +[% END -%] + var mainWrapperInit = function () { $('[rel="tooltip"]').tooltip({'html': false});