You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-panel/lib/NGCP/Panel/Controller/API/PasswordChange.pm

96 lines
2.4 KiB

package NGCP::Panel::Controller::API::PasswordChange;
use NGCP::Panel::Utils::Generic qw(:all);
use Sipwise::Base;
use boolean qw(true);
use Data::HAL qw();
use Data::HAL::Link qw();
use HTTP::Headers qw();
use HTTP::Status qw(:constants);
use NGCP::Panel::Utils::Auth;
use NGCP::Panel::Utils::Admin;
use NGCP::Panel::Utils::Subscriber;
sub allowed_methods{
return [qw/POST OPTIONS/];
}
use parent qw/NGCP::Panel::Role::Entities NGCP::Panel::Role::API::PasswordChange/;
sub api_description {
return 'Change password of the authenticated user.';
}
sub query_params {
return [
];
}
sub resource_name{
return 'passwordchange';
}
sub dispatch_path{
return '/api/passwordchange/';
}
sub relation{
return 'http://purl.org/sipwise/ngcp-api/#rel-passwordchange';
}
__PACKAGE__->set_config({
action => {
map { $_ => {
Args => 0,
Does => [qw(CheckTrailingSlash RequireSSL)],
Method => $_,
Path => __PACKAGE__->dispatch_path,
} } @{ __PACKAGE__->allowed_methods },
},
});
sub return_representation_post {}
sub create_item {
my ($self, $c, $resource, $form, $process_extras) = @_;
my $item = $c->user;
try {
require Data::Dumper;
print Data::Dumper->Dumpxs([$resource]);
my $new_password = $resource->{new_password} // '';
my $ngcp_realm = $c->request->env->{NGCP_REALM} // 'admin';
if ($ngcp_realm eq 'admin') {
$item->update({
saltedpass => NGCP::Panel::Utils::Auth::generate_salted_hash($new_password),
});
NGCP::Panel::Utils::Admin::insert_password_journal(
$c, $item, $new_password
);
} elsif ($ngcp_realm eq 'subscriber') {
$item->update({
webpassword => $NGCP::Panel::Utils::Auth::ENCRYPT_SUBSCRIBER_WEBPASSWORDS
? NGCP::Panel::Utils::Auth::generate_salted_hash($new_password)
: $new_password,
});
NGCP::Panel::Utils::Subscriber::insert_webpassword_journal(
$c, $item, $new_password
);
}
} catch ($e) {
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to change password.", $e);
}
$c->response->status(HTTP_NO_CONTENT);
$c->response->body(q());
return $item;
}
1;
# vim: set tabstop=4 expandtab: