Allow generating tokens
This commit is contained in:
parent
1a3096669b
commit
3528837ab4
|
@ -9,7 +9,8 @@ WriteMakefile(
|
|||
'Mojolicious' => '9.27',
|
||||
'Mojolicious::Plugin::OpenAPI' => '5.07',
|
||||
'Mojo::Pg' => '4.27',
|
||||
'DateTime::Format::Pg' => '0.16001'
|
||||
'DateTime::Format::Pg' => '0.16001',
|
||||
'Crypt::Random' => '1.25',
|
||||
},
|
||||
test => {TESTS => 't/*.t'}
|
||||
);
|
||||
|
|
|
@ -75,6 +75,9 @@ sub startup($self) {
|
|||
$r->post('/auth')->to('Login#auth');
|
||||
$r->get('/my')->to('Interface#landing');
|
||||
$r->get('/my/tokens')->to('Interface#token_list');
|
||||
|
||||
$r->get('/my/tokens/generate')->to('Interface#gen_token_get');
|
||||
$r->post('/my/tokens/generate')->to('Interface#gen_token_post');
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -53,4 +53,33 @@ sub token_list($c) {
|
|||
})
|
||||
}
|
||||
|
||||
sub gen_token_post($c) {
|
||||
my $uid = $c->session->{uid};
|
||||
if (!defined $uid) {
|
||||
return $c->redirect_to("/login");
|
||||
}
|
||||
|
||||
my $v = $c->validation;
|
||||
return $c->render('interface/generateToken') unless $v->has_data;
|
||||
|
||||
$v->required('app_name', 'trim')->size(1,64);
|
||||
return $c->render('interface/generateToken') if $v->has_error;
|
||||
|
||||
my $app_name = $v->param('app_name');
|
||||
|
||||
return $c->users->gen_token($uid, $app_name)->then(sub ($res) {
|
||||
$c->flash(msg => "Your new token is: $res");
|
||||
return $c->redirect_to('/my/tokens');
|
||||
});
|
||||
}
|
||||
|
||||
sub gen_token_get($c) {
|
||||
my $uid = $c->session->{uid};
|
||||
if (!defined $uid) {
|
||||
return $c->redirect_to("/login");
|
||||
}
|
||||
|
||||
return $c->render('interface/generateToken');
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -8,9 +8,12 @@ use Net::LDAPS;
|
|||
|
||||
sub auth($c) {
|
||||
my $v = $c->validation;
|
||||
return $c->render('login/login') unless $v->has_data;
|
||||
|
||||
$v->required('username', 'trim')->size(1,32)->like(qr/^([a-z_][a-z0-9_-]*[\$]?)$/);
|
||||
$v->required('password');
|
||||
return $c->render('login/login') if $v->has_error;
|
||||
|
||||
|
||||
my $username = $c->param('username');
|
||||
my $password = $c->param('password');
|
||||
|
@ -32,11 +35,6 @@ sub auth($c) {
|
|||
$c->flash(message => "Logged in.");
|
||||
$c->redirect_to('/my');
|
||||
});
|
||||
|
||||
$c->render(openapi => {
|
||||
count => 0,
|
||||
results => [],
|
||||
});
|
||||
}
|
||||
|
||||
sub login($c) {
|
||||
|
|
|
@ -2,6 +2,7 @@ package IpfsUpload::Model::Users;
|
|||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use experimental q/signatures/;
|
||||
use Crypt::Random qw( makerandom_octet );
|
||||
|
||||
use Mojo::Base -base, -signatures;
|
||||
|
||||
|
@ -19,6 +20,25 @@ sub token_info_p($self, $token) {
|
|||
});
|
||||
}
|
||||
|
||||
sub gen_token($self, $uid, $app_name) {
|
||||
my $size = 512;
|
||||
my $r = makerandom_octet(Size => $size, Strength => 0);
|
||||
my $s = unpack "H*", pack "B*", '0' x ( $size%8 ? 8-$size % 8 : 0 ).
|
||||
unpack "b$size", $r;
|
||||
|
||||
return $self->pg->db->insert_p(
|
||||
'access_token',
|
||||
{
|
||||
uid => $uid,
|
||||
app_name => $app_name,
|
||||
token => $s,
|
||||
},
|
||||
{returning => ['token']}
|
||||
)->then(sub ($res) {
|
||||
return $res->hash->{token};
|
||||
});
|
||||
}
|
||||
|
||||
sub list_tokens($self, $uid) {
|
||||
return $self->pg->db->select_p('access_token', ['uid', 'app_name', 'id'], {
|
||||
uid => $uid,
|
||||
|
@ -38,4 +58,5 @@ sub getOrMake($self, $username) {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
% layout "default";
|
||||
% title "Uploads";
|
||||
<h1>New Token</h1>
|
||||
|
||||
%= form_for '/my/tokens/generate' => (method => 'POST') => begin
|
||||
<p>
|
||||
%= label_for app_name => 'App name:'
|
||||
%= text_field 'app_name', id => 'app_name'
|
||||
</p>
|
||||
%= submit_button
|
||||
% end
|
||||
|
|
@ -3,6 +3,14 @@
|
|||
<h1>Tokens</h1>
|
||||
<p>Here you can delete or generate tokens.</p>
|
||||
|
||||
% if (my $msg = flash 'msg') {
|
||||
<p>
|
||||
<b>
|
||||
%= $msg
|
||||
</b>
|
||||
</p>
|
||||
% }
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Token ID</th>
|
||||
|
|
Loading…
Reference in New Issue