diff --git a/lib/NGCP/Panel/Controller/API/PbxDeviceModels.pm b/lib/NGCP/Panel/Controller/API/PbxDeviceModels.pm index 8677f2aa1e..d19f0594fb 100644 --- a/lib/NGCP/Panel/Controller/API/PbxDeviceModels.pm +++ b/lib/NGCP/Panel/Controller/API/PbxDeviceModels.pm @@ -275,6 +275,7 @@ sub POST :Allow { $item = $c->model('DB')->resultset('autoprov_devices')->create($resource); NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_credentials_store($c, $item, $credentials); NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_store($c, $item, $sync_parameters); + NGCP::Panel::Utils::DeviceBootstrap::dispatch_devmod($c, 'add_server', $item); foreach my $range(@{ $linerange }) { unless(ref $range eq "HASH") { diff --git a/lib/NGCP/Panel/Controller/Device.pm b/lib/NGCP/Panel/Controller/Device.pm index d6565e7073..d43c25d2af 100644 --- a/lib/NGCP/Panel/Controller/Device.pm +++ b/lib/NGCP/Panel/Controller/Device.pm @@ -185,7 +185,8 @@ sub devmod_create :Chained('base') :PathPart('model/create') :Args(0) :Does(ACL) my $devmod = $schema->resultset('autoprov_devices')->create($form->params); NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_credentials_store($c, $devmod, $credentials); NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_store($c, $devmod, $sync_parameters); - + NGCP::Panel::Utils::DeviceBootstrap::dispatch_devmod($c, 'add_server', $devmod); + foreach my $range(@{ $linerange }) { delete $range->{id}; $range->{num_lines} = @{ $range->{keys} }; # backward compatibility @@ -368,6 +369,7 @@ sub devmod_edit :Chained('devmod_base') :PathPart('edit') :Args(0) :Does(ACL) :A device_id => $c->stash->{devmod}->id, })->delete; NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_store($c, $c->stash->{devmod}, $sync_parameters); + NGCP::Panel::Utils::DeviceBootstrap::dispatch_devmod($c, 'add_server', $c->stash->{devmod} ); my @existing_range = (); my $range_rs = $c->stash->{devmod}->autoprov_device_line_ranges; diff --git a/lib/NGCP/Panel/Role/API/PbxDeviceModels.pm b/lib/NGCP/Panel/Role/API/PbxDeviceModels.pm index 8340400c51..c163e0575b 100644 --- a/lib/NGCP/Panel/Role/API/PbxDeviceModels.pm +++ b/lib/NGCP/Panel/Role/API/PbxDeviceModels.pm @@ -166,6 +166,7 @@ sub update_item { })->delete; NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_credentials_store($c, $item, $credentials); NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_store($c, $item, $sync_parameters); + NGCP::Panel::Utils::DeviceBootstrap::dispatch_devmod($c, 'add_server', $item); my @existing_range = (); my $range_rs = $item->autoprov_device_line_ranges; diff --git a/lib/NGCP/Panel/Utils/DeviceBootstrap.pm b/lib/NGCP/Panel/Utils/DeviceBootstrap.pm index dc9665f4f4..c706d2f6a1 100644 --- a/lib/NGCP/Panel/Utils/DeviceBootstrap.pm +++ b/lib/NGCP/Panel/Utils/DeviceBootstrap.pm @@ -10,14 +10,39 @@ use NGCP::Panel::Utils::DeviceBootstrap::Yealink; sub dispatch{ my($c, $action, $fdev, $old_identifier) = @_; - my $device = $fdev->profile->config->device; - my $credentials = $fdev->profile->config->device->autoprov_redirect_credentials; + my $params = { + %{$self->get_devmod_params($c, $fdev->profile->config->device)}, + mac => $fdev->identifier, + mac_old => $old_identifier, + }; + my $redirect_processor = get_redirect_processor($params); + my $ret; + if($redirect_processor){ + $ret = $redirect_processor->redirect_server_call($action); + } + return $ret; +} +sub dispatch_devmod{ + my($c, $action, $devmod) = @_; + + my $params = $self->get_devmod_params($c,$devmod); + my $redirect_processor = get_redirect_processor($c,$params); + my $ret; + if($redirect_processor){ + $ret = $redirect_processor->redirect_server_call($action); + } + return $ret; +} +sub get_devmod_params{ + my($self, $devmod) = @_; + + my $credentials = $devmod->autoprov_redirect_credentials; my $vcredentials; if($credentials){ $vcredentials = { map { $_ => $credentials->$_ } qw/user password/}; } - my $sync_params_rs = $device->autoprov_sync->search_rs({ + my $sync_params_rs = $devmod->autoprov_sync->search_rs({ 'autoprov_sync_parameters.parameter_name' => 'sync_params', },{ join => 'autoprov_sync_parameters', @@ -27,19 +52,12 @@ sub dispatch{ my $params = { c => $c, - mac => $fdev->identifier, - mac_old => $old_identifier, - bootstrap_method => $device->bootstrap_method, - redirect_uri => $device->bootstrap_uri, + bootstrap_method => $devmod->bootstrap_method, + redirect_uri => $devmod->bootstrap_uri, redirect_uri_params => $sync_params, credentials => $vcredentials, }; - my $redirect_processor = get_redirect_processor($params); - my $ret; - if($redirect_processor){ - $ret = $redirect_processor->redirect_server_call($action); - } - return $ret; + return $params; } sub get_redirect_processor{ my ($params) = @_; diff --git a/lib/NGCP/Panel/Utils/DeviceBootstrap/Yealink.pm b/lib/NGCP/Panel/Utils/DeviceBootstrap/Yealink.pm index 73e4b312a0..ec6745efd4 100644 --- a/lib/NGCP/Panel/Utils/DeviceBootstrap/Yealink.pm +++ b/lib/NGCP/Panel/Utils/DeviceBootstrap/Yealink.pm @@ -72,13 +72,14 @@ sub unregister_content { } sub add_server_content { my $self = shift; + $self->uri2server_name(); $self->{add_server_content} ||= " redirect.addServer -content_params->{uri_server_name}."]]> +content_params->{server_name}."]]> @@ -107,11 +108,10 @@ sub extract_response_description{ } sub uri2server_name{ - my($self,$uri) = @_; + my($self) = @_; #http://stackoverflow.com/questions/4826403/hash-algorithm-with-alphanumeric-output-of-20-characters-max - - - return $uri; + $self->content_params->{server_name} ||= substr(md5_hex($self->content_params->{uri}),0,20); + return $self->content_params->{server_name}; } 1;