MT#9177 API for autoprov. Not tested yet.

changes/93/493/1
Irina Peshinskaya 11 years ago
parent c518e74530
commit a6527bb4c7

@ -9,6 +9,7 @@ use HTTP::Status qw(:constants);
use MooseX::ClassAttribute qw(class_has);
use Data::Dumper;
use NGCP::Panel::Utils::DateTime;
use NGCP::Panel::Utils::DeviceBootstrap;
BEGIN { extends 'Catalyst::Controller::ActionRole'; }
require Catalyst::ActionRole::ACL;
require Catalyst::ActionRole::CheckTrailingSlash;
@ -257,7 +258,10 @@ sub POST :Allow {
}
try {
my $sync_parameters = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_prefetch($c, undef, $resource);
$item = $c->model('DB')->resultset('autoprov_devices')->create($resource);
NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_store($c, $item, $sync_parameters);
foreach my $range(@{ $linerange }) {
unless(ref $range eq "HASH") {
$c->log->error("all elements in linerange must be hashes, but this is " . ref $range . ": " . Dumper $range);

@ -8,6 +8,7 @@ use HTTP::Headers qw();
use HTTP::Status qw(:constants);
use MooseX::ClassAttribute qw(class_has);
use NGCP::Panel::Utils::DateTime;
use NGCP::Panel::Utils::DeviceBootstrap;
BEGIN { extends 'Catalyst::Controller::ActionRole'; }
require Catalyst::ActionRole::ACL;
require Catalyst::ActionRole::CheckTrailingSlash;

@ -8,6 +8,7 @@ use NGCP::Panel::Form::Device::Firmware;
use NGCP::Panel::Form::Device::Config;
use NGCP::Panel::Form::Device::Profile;
use NGCP::Panel::Utils::Navigation;
use NGCP::Panel::Utils::DeviceBootstrap;
BEGIN { extends 'Catalyst::Controller'; }
@ -178,9 +179,9 @@ sub devmod_create :Chained('base') :PathPart('model/create') :Args(0) :Does(ACL)
}
my $linerange = delete $form->params->{linerange};
my $sync_parameters = $c->forward('devmod_sync_parameters_prefetch',[$schema,undef,$form->params] );
my $sync_parameters = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_prefetch($c, undef, $form->params);
my $devmod = $schema->resultset('autoprov_devices')->create($form->params);
$c->forward('devmod_sync_parameters_store',[$schema,$devmod,$sync_parameters] );
NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_store($c, $devmod, $sync_parameters);
foreach my $range(@{ $linerange }) {
delete $range->{id};
@ -344,15 +345,15 @@ sub devmod_edit :Chained('devmod_base') :PathPart('edit') :Args(0) :Does(ACL) :A
delete $form->params->{mac_image_type};
}
my $linerange = delete $form->params->{'linerange'};
my $sync_parameters = $c->forward('devmod_sync_parameters_prefetch',[$schema,$c->stash->{devmod},$form->params] );
my $linerange = delete $form->params->{linerange};
my $sync_parameters = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_prefetch($c, $c->stash->{devmod}, $form->params);
$c->stash->{devmod}->update($form->params);
$schema->resultset('autoprov_sync')->search_rs({
device_id => $c->stash->{devmod}->id,
})->delete;
$c->forward('devmod_sync_parameters_store',[$schema,$c->stash->{devmod},$sync_parameters] );
NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_store($c, $c->stash->{devmod}, $sync_parameters);
my @existing_range = ();
my $range_rs = $c->stash->{devmod}->autoprov_device_line_ranges;
@ -432,37 +433,6 @@ sub devmod_edit :Chained('devmod_base') :PathPart('edit') :Args(0) :Does(ACL) :A
form => $form,
);
}
sub devmod_sync_parameters_prefetch :Private {
my($self,$c,$schema,$devmod,$params) = @_;
#$schema ||= $c->model('DB');
my $bootstrap_method = $params->{'bootstrap_method'};
my $bootstrap_params_rs = $schema->resultset('autoprov_sync_parameters')->search_rs({
'me.bootstrap_method' => $bootstrap_method,
});
my @parameters = ();
foreach ($bootstrap_params_rs->all){
my $sync_parameter = {
device_id => $devmod ? $devmod->id : undef,
parameter_id => $_->id,
parameter_value => delete $params->{'bootstrap_config_'.$bootstrap_method.'_'.$_->parameter_name},
};
push @parameters,$sync_parameter;
}
foreach (keys %$params){
if($_ =~/^bootstrap_config_/i){
delete $params->{$_};
}
}
return \@parameters;
}
sub devmod_sync_parameters_store :Private {
my($self,$c,$schema,$devmod,$sync_parameters) = @_;
foreach my $sync_parameter (@$sync_parameters){
$sync_parameter->{device_id} ||= $devmod ? $devmod->id : undef
$schema->resultset('autoprov_sync')->create($sync_parameter);
}
}
sub devmod_download_frontimage_by_profile :Chained('devprof_base') :PathPart('frontimage') :Args(0) {
my ($self, $c) = @_;

@ -7,7 +7,7 @@ use Moose::Util::TypeConstraints;
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/reseller vendor model linerange sync_uri sync_method sync_params/],
render_list => [qw/reseller vendor model linerange bootstrap_method bootstrap_config_http_sync_uri bootstrap_config_http_sync_method bootstrap_config_http_sync_params/],
);
override 'field_list' => sub {

@ -15,6 +15,7 @@ use JSON qw();
use File::Type;
use Data::Dumper;
use NGCP::Panel::Form::Device::ModelAPI;
use NGCP::Panel::Utils::DeviceBootstrap;
sub get_form {
my ($self, $c) = @_;
@ -156,7 +157,9 @@ sub update_item {
$resource->{mac_image_type} = $ft->mime_type($resource->{mac_image});
}
my $sync_parameters = NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_prefetch($c, $item, $resource);
$item->update($resource);
NGCP::Panel::Utils::DeviceBootstrap::devmod_sync_parameters_store($c, $item, $sync_parameters);
my @existing_range = ();
my $range_rs = $item->autoprov_device_line_ranges;

@ -7,41 +7,6 @@ use Net::HTTPS::Any qw/https_post/;
use RPC::XML::Parser::LibXML;
use Data::Dumper;
sub bootstrap_config{
my($c, $fdev, $contract) = @_;
my $err = 0;
my $device = $fdev->profile->config->device;
if(!$contract){
$contract = $c->stash->{contract};
}
my $credentials = $contract->vendor_credentials->search_rs({
'me.vendor' => lc($device->vendor),
})->first;
if($credentials){
my $vendor_credentials = { map { $_ => $credentials->$_ } qw/user password/};
my $sync_params_rs = $device->autoprov_sync->search_rs({
'autoprov_sync_parameters.parameter_name' => 'sync_params',
},{
join => 'autoprov_sync_parameters',
select => ['me.parameter_value'],
});
my $sync_params = $sync_params_rs->first ? $sync_params_rs->first->parameter_value : '';
NGCP::Panel::Utils::DeviceBootstrap::bootstrap({
c => $c,
mac => $fdev->identifier,
bootstrap_method => $device->bootstrap_method,
redirect_uri_params => $sync_params,
credentials => $vendor_credentials,
});
}else{
$err = 1;
}
return $err;
}
sub bootstrap{
my ($params) = @_;
my $c = $params->{c};
@ -150,7 +115,71 @@ sub get_bootstrap_uri{
$uri .= $uri_params;
return $uri;
}
sub bootstrap_config{
my($c, $fdev, $contract) = @_;
my $err = 0;
my $device = $fdev->profile->config->device;
if(!$contract){
$contract = $c->stash->{contract};
}
my $credentials = $contract->vendor_credentials->search_rs({
'me.vendor' => lc($device->vendor),
})->first;
if($credentials){
my $vendor_credentials = { map { $_ => $credentials->$_ } qw/user password/};
my $sync_params_rs = $device->autoprov_sync->search_rs({
'autoprov_sync_parameters.parameter_name' => 'sync_params',
},{
join => 'autoprov_sync_parameters',
select => ['me.parameter_value'],
});
my $sync_params = $sync_params_rs->first ? $sync_params_rs->first->parameter_value : '';
NGCP::Panel::Utils::DeviceBootstrap::bootstrap({
c => $c,
mac => $fdev->identifier,
bootstrap_method => $device->bootstrap_method,
redirect_uri_params => $sync_params,
credentials => $vendor_credentials,
});
}else{
$err = 1;
}
return $err;
}
sub devmod_sync_parameters_prefetch{
my($c,$devmod,$params) = @_;
my $schema = $c->model('DB');
my $bootstrap_method = $params->{'bootstrap_method'};
my $bootstrap_params_rs = $schema->resultset('autoprov_sync_parameters')->search_rs({
'me.bootstrap_method' => $bootstrap_method,
});
my @parameters = ();
foreach ($bootstrap_params_rs->all){
my $sync_parameter = {
device_id => $devmod ? $devmod->id : undef,
parameter_id => $_->id,
parameter_value => delete $params->{'bootstrap_config_'.$bootstrap_method.'_'.$_->parameter_name},
};
push @parameters,$sync_parameter;
}
foreach (keys %$params){
if($_ =~/^bootstrap_config_/i){
delete $params->{$_};
}
}
return \@parameters;
}
sub devmod_sync_parameters_store {
my($c,$devmod,$sync_parameters) = @_;
my $schema = $c->model('DB');
foreach my $sync_parameter (@$sync_parameters){
$sync_parameter->{device_id} ||= $devmod ? $devmod->id : undef
$schema->resultset('autoprov_sync')->create($sync_parameter);
}
}
1;
=head1 NAME

Loading…
Cancel
Save