creating and deleting the entities users and networks via the rtc api, when a reseller is created or modified Change-Id: I2e9c785cacec680d1b22827983abca6037cdee3bchanges/58/3658/10
parent
7ebf28c5b6
commit
81c4dde54f
@ -0,0 +1,46 @@
|
||||
package NGCP::Panel::Form::ResellerAPI;
|
||||
|
||||
use HTML::FormHandler::Moose;
|
||||
extends 'NGCP::Panel::Form::Reseller';
|
||||
|
||||
use HTML::FormHandler::Widget::Block::Bootstrap;
|
||||
|
||||
has '+widget_wrapper' => ( default => 'Bootstrap' );
|
||||
has_field 'submitid' => ( type => 'Hidden' );
|
||||
sub build_render_list {[qw/submitid fields actions/]}
|
||||
sub build_form_element_class { [qw/form-horizontal/] }
|
||||
|
||||
has_field 'enable_rtc' => (
|
||||
type => 'Boolean',
|
||||
required => 0,
|
||||
default => 0,
|
||||
element_attr => {
|
||||
rel => ['tooltip'],
|
||||
title => ['Whether an RTC-entity should be created for this reseller.'],
|
||||
}
|
||||
);
|
||||
|
||||
has_field 'rtc_networks' => (
|
||||
type => 'Multiple', # Select
|
||||
required => '0',
|
||||
widget => 'CheckboxGroup',
|
||||
options => [
|
||||
{ value => 'sip', label => 'SIP Only' },
|
||||
{ value => 'xmpp', label => 'XMPP Only' },
|
||||
{ value => 'sipwise', label => 'SIP and XMPP' },
|
||||
{ value => 'webrtc', label => 'WebRTC Only' },
|
||||
],
|
||||
element_attr => {
|
||||
rel => ['tooltip'],
|
||||
title => ['The RTC networks that should be preinitialized for this reseller.'],
|
||||
}
|
||||
);
|
||||
|
||||
has_block 'fields' => (
|
||||
tag => 'div',
|
||||
class => [qw/modal-body/],
|
||||
render_list => [qw/contract name status enable_rtc rtc_networks/],
|
||||
);
|
||||
|
||||
1;
|
||||
# vim: set tabstop=4 expandtab:
|
@ -0,0 +1,151 @@
|
||||
package NGCP::Panel::Utils::Rtc;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use JSON qw//;
|
||||
|
||||
use NGCP::Panel::Utils::ComxAPIClient;
|
||||
|
||||
sub modify_reseller_rtc {
|
||||
my ($old_resource, $resource, $config, $reseller_item, $err_code) = @_;
|
||||
|
||||
if (!defined $err_code || ref $err_code ne 'CODE') {
|
||||
$err_code = sub { return 0; };
|
||||
}
|
||||
|
||||
if ((!defined $old_resource) && (defined $resource)) { # newly created reseller
|
||||
|
||||
# 1. enable_rtc is off -> do nothing
|
||||
if (!$resource->{enable_rtc}) {
|
||||
return;
|
||||
}
|
||||
|
||||
_create_rtc_user($resource, $config, $reseller_item, $err_code);
|
||||
|
||||
} elsif ((defined $old_resource) && (defined $resource)) {
|
||||
|
||||
if($old_resource->{status} ne 'terminated' &&
|
||||
$resource->{status} eq 'terminated' &&
|
||||
$old_resource->{enable_rtc}) { # just terminated
|
||||
|
||||
$resource->{enable_rtc} = JSON::false;
|
||||
_delete_rtc_user($config, $reseller_item, $err_code);
|
||||
|
||||
} elsif ($old_resource->{enable_rtc} &&
|
||||
!$resource->{enable_rtc}) { # disable rtc
|
||||
|
||||
_delete_rtc_user($config, $reseller_item, $err_code);
|
||||
} elsif (!$old_resource->{enable_rtc} &&
|
||||
$resource->{enable_rtc} &&
|
||||
$resource->{status} ne 'terminated') { # enable rtc
|
||||
|
||||
_create_rtc_user($resource, $config, $reseller_item, $err_code);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub _create_rtc_user {
|
||||
my ($resource, $config, $reseller_item, $err_code) = @_;
|
||||
|
||||
my $rtc_networks = $resource->{rtc_networks} // [];
|
||||
if ('ARRAY' ne (ref $rtc_networks)) {
|
||||
$rtc_networks = [$rtc_networks];
|
||||
}
|
||||
|
||||
# 2. create user w reseller-name and reseller-name _ "pass"
|
||||
my $reseller_name = $resource->{name} =~ s/\s+//rg;
|
||||
|
||||
my $comx = NGCP::Panel::Utils::ComxAPIClient->new(
|
||||
host => $config->{rtc}{schema}.'://'.
|
||||
$config->{rtc}{host}.':'.$config->{rtc}{port}.
|
||||
$config->{rtc}{path},
|
||||
);
|
||||
$comx->login(
|
||||
$config->{rtc}{user},
|
||||
$config->{rtc}{pass},
|
||||
$config->{rtc}{host}.':'.$config->{rtc}{port});
|
||||
if ($comx->login_status->{code} != 200) {
|
||||
return unless &{$err_code}(
|
||||
'Rtc Login failed. Check config settings.');
|
||||
}
|
||||
my $user = $comx->create_user(
|
||||
$reseller_name . '@ngcp.com',
|
||||
$reseller_name . 'pass12345',
|
||||
);
|
||||
if ($user->{code} != 201) {
|
||||
return unless &{$err_code}(
|
||||
'Creating rtc user failed. Error code: ' . $user->{code});
|
||||
}
|
||||
|
||||
# 3. create relation in our db
|
||||
$reseller_item->create_related('rtc_user', {
|
||||
rtc_user_id => $user->{data}{id},
|
||||
});
|
||||
|
||||
# 4. create related app
|
||||
my $app = $comx->create_app(
|
||||
$reseller_name . '_app',
|
||||
$reseller_name . 'www.sipwise.com',
|
||||
$user->{data}{id},
|
||||
);
|
||||
if ($app->{code} != 201) {
|
||||
return unless &{$err_code}(
|
||||
'Creating rtc app failed. Error code: ' . $app->{code});
|
||||
}
|
||||
|
||||
# 5. create related networks
|
||||
for my $n (@{ $rtc_networks }) {
|
||||
my $n_response = $comx->create_network(
|
||||
$reseller_name . "_$n",
|
||||
$n . '-connector',
|
||||
{xms => JSON::false},
|
||||
$user->{data}{id},
|
||||
);
|
||||
if ($user->{code} != 201) {
|
||||
return unless &{$err_code}(
|
||||
'Creating rtc network failed. Error code: ' . $user->{code});
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub _delete_rtc_user {
|
||||
my ($config, $reseller_item, $err_code) = @_;
|
||||
|
||||
my $comx = NGCP::Panel::Utils::ComxAPIClient->new(
|
||||
host => $config->{rtc}{schema}.'://'.
|
||||
$config->{rtc}{host}.':'.$config->{rtc}{port}.
|
||||
$config->{rtc}{path},
|
||||
);
|
||||
$comx->login(
|
||||
$config->{rtc}{user},
|
||||
$config->{rtc}{pass},
|
||||
$config->{rtc}{host}.':'.$config->{rtc}{port});
|
||||
if ($comx->login_status->{code} != 200) {
|
||||
return unless &{$err_code}(
|
||||
'Rtc Login failed. Check config settings.');
|
||||
}
|
||||
|
||||
my $rtc_user = $reseller_item->rtc_user;
|
||||
if (!defined $rtc_user) {
|
||||
return unless &{$err_code}(
|
||||
'No rtc user found in db for this reseller.');
|
||||
}
|
||||
# app and networks are deleted automatically
|
||||
my $delete_resp = $comx->delete_user(
|
||||
$rtc_user->rtc_user_id,
|
||||
);
|
||||
if ($delete_resp->{code} == 200) {
|
||||
$rtc_user->delete;
|
||||
} else {
|
||||
return unless &{$err_code}(
|
||||
'Deleting rtc user failed. Error code: ' . $delete_resp->{code});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: set tabstop=4 expandtab:
|
Loading…
Reference in new issue