MT#9177 Yealink added

ipeshinskaya/9177
Irina Peshinskaya 11 years ago
parent 3fa77dcdb0
commit 3779466cb6

@ -16,47 +16,10 @@ use NGCP::Panel::Utils::DeviceBootstrap::Panasonic;
# credentials => {user=>, password=>}
#};
sub redirect_register{
my ($params) = @_;
my $ret;
my $redirect_processor = get_redirect_processor($params);
if($redirect_processor){
$ret = $redirect_processor->redirect_register;
}
return $ret;
}
sub redirect_unregister{
my ($params) = @_;
my $ret;
my $redirect_processor = get_redirect_processor($params);
if($redirect_processor){
$ret = $redirect_processor->redirect_unregister;
}
return $ret;
}
sub get_redirect_processor{
my ($params) = @_;
my $c = $params->{c};
my $bootstrap_method = $params->{bootstrap_method};
$c->log->debug( "bootstrap_method=$bootstrap_method;" );
my $redirect_processor;
if('redirect_panasonic' eq $bootstrap_method){
$redirect_processor = NGCP::Panel::Utils::DeviceBootstrap::Panasonic->new( params => $params );
}elsif('redirect_linksys' eq $bootstrap_method){
}elsif('http' eq $bootstrap_method){
#$ret = panasonic_bootstrap_register($params);
}
return $redirect_processor;
}
sub bootstrap_config{
my($c, $fdev, $old_identifier) = @_;
sub dispatch{
my($c, $action, $fdev, $old_identifier) = @_;
my $device = $fdev->profile->config->device;
my $credentials = $fdev->profile->config->device->autoprov_redirect_credentials;
my $vcredentials;
if($credentials){
@ -70,16 +33,41 @@ sub bootstrap_config{
select => ['me.parameter_value'],
});
my $sync_params = $sync_params_rs->first ? $sync_params_rs->first->parameter_value : '';
my $ret = redirect_register({
my $params = {
c => $c,
mac => $fdev->identifier,
mac_old => $old_identifier,
bootstrap_method => $device->bootstrap_method,
redirect_uri_params => $sync_params,
credentials => $vcredentials,
});
};
my $redirect_processor = get_redirect_processor($params);
my $ret;
if($redirect_processor){
if('unregister' eq $action){
$ret = $redirect_processor->redirect_unregister;
}
if('register' eq $action){
$ret = $redirect_processor->redirect_register;
}
}
return $ret;
}
sub get_redirect_processor{
my ($params) = @_;
my $c = $params->{c};
my $bootstrap_method = $params->{bootstrap_method};
$c->log->debug( "bootstrap_method=$bootstrap_method;" );
my $redirect_processor;
if('redirect_panasonic' eq $bootstrap_method){
$redirect_processor = NGCP::Panel::Utils::DeviceBootstrap::Panasonic->new( params => $params );
}elsif('redirect_linksys' eq $bootstrap_method){
}elsif('http' eq $bootstrap_method){
#$ret = panasonic_bootstrap_register($params);
}
return $redirect_processor;
}
sub devmod_sync_parameters_prefetch{
my($c,$devmod,$params) = @_;
my $schema = $c->model('DB');
@ -96,12 +84,41 @@ sub devmod_sync_parameters_prefetch{
};
push @parameters,$sync_parameter;
}
return \@parameters;
}
sub devmod_sync_credentials_prefetch{
my($c,$devmod,$params) = @_;
my $schema = $c->model('DB');
my $bootstrap_method = $params->{'bootstrap_method'};
my $credentials = {
device_id => $devmod ? $devmod->id : undef,
};
foreach (qw/user password/){
$credentials->{$_} = delete $params->{'bootstrap_config_'.$bootstrap_method.'_'.$_};
}
return $credentials;
}
sub devmod_sync_credentials_store{
my($c,$devmod,$credentials) = @_;
my $schema = $c->model('DB');
my $credentials_rs = $schema->resultset('autoprov_redirect_credentials')->search_rs({
'device_id' => $devmod->id
});
if(!$credentials_rs->first){
$credentials->{device_id} = $devmod->id;
$schema->resultset('autoprov_redirect_credentials')->create($credentials);
}else{
$credentials_rs->update($credentials);
}
}
sub devmod_sync_clear {
my($c,$params) = @_;
foreach (keys %$params){
if($_ =~/^bootstrap_config_/i){
delete $params->{$_};
}
}
return \@parameters;
}
sub devmod_sync_parameters_store {
my($c,$devmod,$sync_parameters) = @_;

@ -66,16 +66,18 @@ sub init_content_params{
my $uri = $self->get_bootstrap_uri();
$self->{content_params} ||= {};
$self->content_params->{uri} = URI::Escape::uri_escape($uri);
my $mac = $self->params->{mac};
$mac =~s/[^A-F0-9]//gi;
$self->content_params->{mac} = uc($mac);
my $mac_old = $self->params->{mac_old};
if(defined $mac_old) {
$mac_old =~s/[^A-F0-9]//gi;
$mac_old = uc($mac_old);
$self->content_params->{mac_old} = $mac_old;
$self->content_params->{mac} = normalize_mac($self->params->{mac});
if(defined $self->params->{mac_old}) {
$self->content_params->{mac_old} = normalize_mac($self->params->{mac_old});
}
}
sub normalize_mac {
my ($mac) = @_;
return unless($mac);
$mac =~s/[^A-F0-9]//gi;
$mac = uc($mac);
return $mac;
}
sub get_basic_authorization{
my($self) = @_;
my $authorization = encode_base64(join(':',@{$self->params->{credentials}}{qw/user password/}));

@ -0,0 +1,116 @@
package NGCP::Panel::Utils::DeviceBootstrap::Yealink;
use strict;
use Moose;
extends 'NGCP::Panel::Utils::DeviceBootstrap::RPC';
has 'rpc_server_params' => (
is => 'rw',
isa => 'HashRef',
accessor => '_rpc_server_params',
);
has 'register_content' => (
is => 'rw',
isa => 'Str',
accessor => '_register_content',
);
has 'unregister_content' => (
is => 'rw',
isa => 'Str',
accessor => '_unregister_content',
);
sub rpc_server_params{
my $self = shift;
my $cfg = {
proto => 'https',
host => 'rps.yealink.com',
port => '443',
path => '/xmlrpc',
};
$cfg->{headers} = { $self->get_basic_authorization($self->params->{credentials}) };
$self->{rpc_server_params} = $cfg;
return $self->{rpc_server_params};
}
sub register_content {
my $self = shift;
$self->{register_content} = "<?xml version='1.0' encoding='UTF-8'?>
<methodCall>
<methodName>redirect.registerDevice</methodName>
<params>
<param>
<value><string>".$self->content_params->{mac}."</string></value>
</param>
<param>
<value><string>".$self->content_params->{uri}."</string></value>
</param>
<param>
<value><string>1</string></value>
</param></params>
</methodCall>";
return $self->{register_content};
}
sub unregister_content {
my $self = shift;
$self->{unregister_content} = "<?xml version='1.0' encoding='UTF-8'?>
<methodCall>
<methodName>redirect.deRegisterDevice</methodName>
<params>
<param>
<value><string>".$self->content_params->{mac_old}."</string></value>
</param>
</params>
</methodCall>
<?xml version=\"1.0\"?>
<methodCall>
<methodName>ipredirect.unregisterPhone</methodName>
<params>
<param><value><string>".$self->content_params->{mac_old}."</string></value></param>
</params>
</methodCall>";
return $self->{unregister_content};
}
sub parse_rpc_response{
my($self,$rpc_response) = @_;
return $rpc_response->value->value;
}
sub extract_response_description{
my($self,$response_value) = @_;
if(('HASH' eq ref $response_value) && $response_value->{faultString}){
return $response_value->{faultString};
} else {
return;
}
}
1;
=head1 NAME
NGCP::Panel::Utils::DeviceBootstrap
=head1 DESCRIPTION
Make API requests to configure remote redirect servers for requested MAC with autorpov uri.
=head1 METHODS
=head2 bootstrap
Dispatch to proper vendor API call.
=head1 AUTHOR
Irina Peshinskaya C<< <ipeshinskaya@sipwise.com> >>
=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:
Loading…
Cancel
Save