App-Netdisco
view release on metacpan or search on metacpan
lib/App/Netdisco/Web/Plugin/AdminTask/Users.pm view on Meta::CPAN
schema('netdisco')->resultset('User')
->find({username => param('username')})->delete;
});
return '';
};
ajax '/ajax/control/admin/users/update' => require_role setting('defanged_admin') => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
my $user = schema('netdisco')->resultset('User')
->find({username => param('username')});
return unless $user;
$user->update({
fullname => param('fullname'),
((param('auth_method') eq 'permanent_token') ? (
password => undef,
ldap => \'false', radius => \'false', tacacs => \'false',
token_auth_only => \'true',
token_no_expire => (param('auth_method') eq 'permanent_token' ? \"true" : \"false"),
token_allowed_ips => _parse_ips(),
) : (
token_auth_only => \'false',
token_no_expire => \"false",
token_allowed_ips => undef,
((param('password') and param('password') ne '********')
? (password => _make_password(param('password')))
: ()),
(param('auth_method') ? (
(ldap => (param('auth_method') eq 'ldap' ? \'true' : \'false')),
(radius => (param('auth_method') eq 'radius' ? \'true' : \'false')),
(tacacs => (param('auth_method') eq 'tacacs' ? \'true' : \'false')),
) : (
ldap => \'false',
radius => \'false',
tacacs => \'false',
)),
)),
port_control => (param('port_control') ? \'true' : \'false'),
portctl_role =>
((param('port_control') and param('port_control') ne '_global_')
? param('port_control') : ''),
admin => (param('admin') ? \'true' : \'false'),
note => param('note'),
});
});
return '';
};
ajax '/ajax/control/admin/users/token' => require_role setting('defanged_admin') => sub {
send_error('Bad Request', 400) unless _sanity_ok();
my $user = schema('netdisco')->resultset('User')
->find({ username => param('username') });
send_error('Not Found', 404) unless $user and $user->in_storage;
my $token;
schema('netdisco')->txn_do(sub {
$user->update({ token => \'md5(random()::text)', token_from => time });
$user->discard_changes();
$token = $user->token;
});
header('Content-Type' => 'text/plain');
return $token;
};
get '/ajax/content/admin/users' => require_role admin => sub {
my @results = schema('netdisco')->resultset('User')
->search(undef, {
'+columns' => {
created => \"to_char(creation, 'YYYY-MM-DD HH24:MI')",
last_seen => \"to_char(last_on, 'YYYY-MM-DD HH24:MI')",
token_hint => \"right(token, 8)",
},
order_by => [qw/fullname username/]
})->hri->all;
return unless scalar @results;
sync_portctl_roles();
my @port_control_roles = keys %{ setting('portctl_by_role') || {} };
push @port_control_roles,
schema(vars->{'tenant'})->resultset('AccessControlListName')->host_port_acl_names;
if ( request->is_ajax ) {
template 'ajax/admintask/users.tt',
{ results => \@results, port_control_roles => [ uniq sort {$a cmp $b} @port_control_roles ] },
{ layout => undef };
}
else {
header( 'Content-Type' => 'text/comma-separated-values' );
template 'ajax/admintask/users_csv.tt',
{ results => \@results, },
{ layout => undef };
}
};
true;
( run in 3.165 seconds using v1.01-cache-2.11-cpan-744e820c463 )