diff --git a/lib/NGCP/Panel/Controller/API/PbxDeviceModels.pm b/lib/NGCP/Panel/Controller/API/PbxDeviceModels.pm index 4dd5446449..f09ca5c0f9 100644 --- a/lib/NGCP/Panel/Controller/API/PbxDeviceModels.pm +++ b/lib/NGCP/Panel/Controller/API/PbxDeviceModels.pm @@ -259,7 +259,10 @@ sub POST :Allow { try { my $sync_parameters = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_prefetch($c, undef, $resource); + my $credentials = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_credentials_prefetch($c, undef, $resource); + NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_clear($c, $resource); $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); foreach my $range(@{ $linerange }) { diff --git a/lib/NGCP/Panel/Controller/Device.pm b/lib/NGCP/Panel/Controller/Device.pm index 723c8eec7f..ce70df5c99 100644 --- a/lib/NGCP/Panel/Controller/Device.pm +++ b/lib/NGCP/Panel/Controller/Device.pm @@ -180,7 +180,10 @@ sub devmod_create :Chained('base') :PathPart('model/create') :Args(0) :Does(ACL) my $linerange = delete $form->params->{linerange}; my $sync_parameters = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_prefetch($c, undef, $form->params); + my $credentials = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_credentials_prefetch($c, undef, $form->params); + NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_clear($c, $form->params); 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); foreach my $range(@{ $linerange }) { @@ -347,9 +350,12 @@ sub devmod_edit :Chained('devmod_base') :PathPart('edit') :Args(0) :Does(ACL) :A my $linerange = delete $form->params->{linerange}; my $sync_parameters = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_prefetch($c, $c->stash->{devmod}, $form->params); + my $credentials = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_credentials_prefetch($c, $c->stash->{devmod}, $form->params); + NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_clear($c, $form->params); $c->stash->{devmod}->update($form->params); + NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_credentials_store($c, $c->stash->{devmod}, $credentials); $schema->resultset('autoprov_sync')->search_rs({ device_id => $c->stash->{devmod}->id, })->delete; diff --git a/lib/NGCP/Panel/Role/API/PbxDeviceModels.pm b/lib/NGCP/Panel/Role/API/PbxDeviceModels.pm index 01a2a0c293..8340400c51 100644 --- a/lib/NGCP/Panel/Role/API/PbxDeviceModels.pm +++ b/lib/NGCP/Panel/Role/API/PbxDeviceModels.pm @@ -158,7 +158,13 @@ sub update_item { } my $sync_parameters = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_prefetch($c, $item, $resource); + my $credentials = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_credentials_prefetch($c, $item, $resource); + NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_clear($c, $resource); $item->update($resource); + $c->model('DB')->resultset('autoprov_sync')->search_rs({ + device_id => $item->id, + })->delete; + NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_credentials_store($c, $item, $credentials); NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_store($c, $item, $sync_parameters); my @existing_range = (); diff --git a/lib/NGCP/Panel/Utils/DeviceBootstrap.pm b/lib/NGCP/Panel/Utils/DeviceBootstrap.pm index 4ca027c031..519fe1aa59 100644 --- a/lib/NGCP/Panel/Utils/DeviceBootstrap.pm +++ b/lib/NGCP/Panel/Utils/DeviceBootstrap.pm @@ -53,12 +53,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) = @_; diff --git a/share/templates/device/list.tt b/share/templates/device/list.tt index ed83c395d4..d1c54692c5 100644 --- a/share/templates/device/list.tt +++ b/share/templates/device/list.tt @@ -13,13 +13,17 @@ function bootstrapDynamicFields(selectedValue){ $('.ngcp-bootstrap-config-'+selectedValue).css("display","block"); } function vendor2bootstrapMethod(vendorField){ - if(!vendorField){ - var bootstrapMethodFields = document.getElementsByName('bootstrap_method'); + var bootstrapMethodField; + if(!vendorField){//initial load - no vendor field passed at all + bootstrapMethodFields = document.getElementsByName('bootstrap_method'); if(bootstrapMethodFields && bootstrapMethodFields.length){ - vendorField = bootstrapMethodFields[0].form['vendor']; + bootstrapMethodField = bootstrapMethodFields[0];//we will use default defined in Perl module to show linked fields + vendorField = bootstrapMethodField.form['vendor'];//for load after error - we will check if it's value isn't empty } + }else{ + bootstrapMethodField = vendorField.form['bootstrap_method']; } - if(vendorField){ + if(vendorField && vendorField.value){//onchange and on load after error var bootstrapMethod=''; switch(vendorField.value.toLowerCase()){ case "cisco": @@ -39,15 +43,18 @@ function vendor2bootstrapMethod(vendorField){ break; ; } - var bootstrapMethodField = vendorField.form['bootstrap_method']; - var length = bootstrapMethodField.options.length; - for(var i=0; i < length; i++){ - if(bootstrapMethodField.options[i].value == bootstrapMethod){ - bootstrapMethodField.options[i].selected = true; + if(bootstrapMethod){ + var length = bootstrapMethodField.options.length; + for(var i=0; i < length; i++){ + if(bootstrapMethodField.options[i].value == bootstrapMethod){ + bootstrapMethodField.options[i].selected = true; + } } } - bootstrapDynamicFields(bootstrapMethod); + }else if(bootstrapMethodField){//as said above - for initial load, to use Perl defined select default to show linked fields + bootstrapMethod = bootstrapMethodField.options[bootstrapMethodField.selectedIndex].value; } + bootstrapDynamicFields(bootstrapMethod); } $( document ).ready(function() { vendor2bootstrapMethod();