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/Utils/API/Calllist.pm

112 lines
3.6 KiB

package NGCP::Panel::Utils::API::Calllist;
use strict;
use warnings;
use HTTP::Status qw(:constants);
sub get_owner_data {
my ($self, $c, $schema, $source) = @_;
my $ret;
$source //= $c->req->params;
my $src_subscriber_id = $source->{subscriber_id};
my $src_customer_id = $source->{customer_id};
if($c->user->roles eq "admin" || $c->user->roles eq "reseller") {
if($src_subscriber_id) {
my $sub = $schema->resultset('voip_subscribers')->find($src_subscriber_id);
unless($sub) {
$self->error($c, HTTP_NOT_FOUND, "Invalid 'subscriber_id'.");
return;
}
if($c->user->roles eq "reseller" && $sub->contract->contact->reseller_id != $c->user->reseller_id) {
$self->error($c, HTTP_NOT_FOUND, "Invalid 'subscriber_id'.");
return;
}
return {
subscriber => $sub,
customer => $sub->contract,
};
} elsif($src_customer_id) {
my $cust = $schema->resultset('contracts')->find($src_customer_id);
unless($cust && $cust->contact->reseller_id) {
$self->error($c, HTTP_NOT_FOUND, "Invalid 'customer_id'.");
return;
}
if($c->user->roles eq "reseller" && $cust->contact->reseller_id != $c->user->reseller_id) {
$self->error($c, HTTP_NOT_FOUND, "Invalid 'customer_id'.");
return;
}
return {
subscriber => undef,
customer => $cust,
};
} else {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Mandatory parameter 'subscriber_id' or 'customer_id' missing in request");
return;
}
} elsif($c->user->roles eq "subscriberadmin") {
if($src_subscriber_id) {
my $sub = $schema->resultset('voip_subscribers')->find($src_subscriber_id);
unless($sub) {
$self->error($c, HTTP_NOT_FOUND, "Invalid 'subscriber_id'.");
return;
}
if($sub->contract_id != $c->user->account_id) {
$self->error($c, HTTP_NOT_FOUND, "Invalid 'subscriber_id'.");
return;
}
return {
subscriber => $sub,
customer => $sub->contract,
};
} else {
my $cust = $schema->resultset('contracts')->find($c->user->account_id);
unless($cust && $cust->contact->reseller_id) {
$self->error($c, HTTP_NOT_FOUND, "Invalid 'customer_id'.");
return;
}
return {
subscriber => undef,
customer => $cust,
};
}
} elsif($c->user->roles eq "subscriber") {
return {
subscriber => $c->user->voip_subscriber,
customer => $c->user->voip_subscriber->contract,
};
} else {
$self->error($c, HTTP_NOT_FOUND, "Unknown role '".$c->user->roles."' of the user.");
return;
}
}
1;
=head1 NAME
NGCP::Panel::Utils::API::Calllist
=head1 DESCRIPTION
A temporary helper to manipulate calls related data in REST API modules
=head1 METHODS
=head2 get_owner_data
Check if mandatory calls list parameters customer_id or subscriber_id are presented and get proper objects.
=head1 AUTHOR
Irina Peshinskaya
=head1 LICENSE
This library is free software. You can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
# vim: set tabstop=4 expandtab: