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/Field/URI.pm

99 lines
2.6 KiB

package NGCP::Panel::Field::URI;
use Sipwise::Base;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler::Field::Text';
use NGCP::Panel::Utils::Subscriber;
our $class_messages = {
'uri_format' => 'URI must be in format "username", "username@domain" or phone number',
};
sub get_class_messages {
my $self = shift;
return {
%{ $self->next::method },
%$class_messages,
}
}
apply(
[
{
transform => sub {
lc($_[0]);
}
},
{
transform => sub {
my ($v, $field) = @_;
my $c = $field->form->ctx;
return $v unless($c);
my $sub = $c->stash->{subscriber};
return $v unless($sub);
$v =~ s/^sips?://;
my ($user, $domain) = split(/\@/, $v);
$domain = $sub->domain->domain unless($domain);
my $uri;
if($c->user->roles eq "subscriberadmin" || $c->user->roles eq "subscriber") {
$user = NGCP::Panel::Utils::Subscriber::apply_rewrite(
c => $c, subscriber => $sub, number => $user, direction => 'callee_in'
);
}
$uri = 'sip:' . $user . '@' . $domain;
return $uri;
}
},
{
check => sub {
my ( $value, $field ) = @_;
my ($user, $domain) = split(/\@/, $value);
my $checked = $value if $user && $domain; # TODO: proper check
$field->value($checked)
if $checked;
},
message => sub {
my ( $value, $field ) = @_;
return $field->get_message('uri_format');
},
}
]
);
has '+deflate_method' => ( default => sub { \&uri_deflate } );
sub uri_deflate {
my ( $field, $v ) = @_;
return unless($v);
my $c = $field->form->ctx;
return $v unless($c);
my $sub = $c->stash->{subscriber};
return $v unless($sub);
$v =~ s/^sips?://;
my $t;
my ($user, $domain) = split(/\@/, $v);
if($c->user->roles eq "subscriberadmin" || $c->user->roles eq "subscriber") {
$user = NGCP::Panel::Utils::Subscriber::apply_rewrite(
c => $c, subscriber => $sub, number => $user, direction => 'caller_out'
);
}
if($domain eq $sub->domain->domain) {
$v = $user;
} else {
$v = $user . '@' . $domain;
}
return $v;
}
1;
__PACKAGE__->meta->make_immutable;
use namespace::autoclean
# vim: set tabstop=4 expandtab: