MT#5065 Validation of the codecs_list preference

Change-Id: If8e1d8604040df57cb8bafc150251e2354b4943f
changes/42/7042/27
Irina Peshinskaya 9 years ago
parent eed7aeb3d1
commit f4d293ad53

@ -1,4 +1,5 @@
package NGCP::Panel::Form::Preferences;
use Sipwise::Base;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
@ -25,12 +26,12 @@ sub field_list {
my $self = shift;
return [] unless $self->ctx;
my $is_subscriber = ($self->ctx->user->roles eq 'subscriber' ||
my $is_subscriber = ($self->ctx->user->roles eq 'subscriber' ||
$self->ctx->user->roles eq 'subscriberadmin');
my @field_list;
my $fields_data = $self->fields_data;
foreach my $row (@$fields_data) {
my $meta = $row->{meta};
my $enums = $row->{enums};
@ -89,9 +90,9 @@ sub field_list {
};
} elsif($meta->data_type eq "enum") {
my @options = map {{label => $_->label, value => $_->value}} @{ $enums };
$field = {
name => $meta->attribute,
type => 'Select',
$field = {
name => $meta->attribute,
type => 'Select',
options => \@options,
};
} elsif($meta->data_type eq "boolean") {
@ -126,10 +127,47 @@ sub field_list {
$field->{label} = $is_subscriber ? $meta->label : $meta->attribute;
push @field_list, $field;
}
return \@field_list;
}
sub validate {
my ($self) = @_;
my $c = $self->ctx;
return unless $c;
my $res = 1;
my $attribute = 'codecs_list';
if(my $field = $self->field( $attribute )){
if( my $value = $field->value ){
#todo: 1.Should we allow only some particular separator?
#todo: 2.Lengths of the provisioning.voip_usr_preferences.value and kamailio.usr_preferences.value =128,all available values length is 141. We can't insert all codecs.
my $enum = { map { lc( $_ ) => 1 } qw/AMR CelB CN DVI4 G722 G723 G728 G729 GSM H261 H263 H263-1998 h264
JPEG L16 MP2T MPA MPV nv opus PCMA PCMU QCELP speex telephone-event vp8 vp9/ };
my @codecs = split(/,/, $value);
my %codecs_dup;
foreach my $codec( @codecs){
$codec = lc($codec);
if( !exists $enum->{$codec} ){
my $err_msg = 'Value should be a comma separated list of the valid codecs.';
$field->add_error($err_msg);
$res = 0;
last;
}
if($codecs_dup{$codec}){
my $err_msg = 'Value should not contain duplicates.';
$field->add_error($err_msg);
$res = 0;
last;
}
$codecs_dup{$codec} = 1;
}
}
}
return $res;
}
has_field 'save' => (
type => 'Submit',
value => 'Save',
@ -154,7 +192,7 @@ has_block 'actions' => (
sub create_structure {
my $self = shift;
my $field_list = shift;
$self->block('fields')->render_list($field_list);
}

Loading…
Cancel
Save