diff --git a/lib/admin/Controller/peering.pm b/lib/admin/Controller/peering.pm index 64a5f12..74b636e 100644 --- a/lib/admin/Controller/peering.pm +++ b/lib/admin/Controller/peering.pm @@ -208,60 +208,77 @@ Create a peering rule for a given group =cut -sub create_rule : Local { +sub save_rule : Local { my ( $self, $c ) = @_; $c->stash->{template} = 'tt/peering_detail.tt'; my %messages; - my %settings; + my $checkresult; + + my $settings = { + callee_prefix => $c->request->params->{callee_prefix} //= undef, + callee_pattern => $c->request->params->{callee_pattern} //= undef, + caller_pattern => $c->request->params->{caller_pattern} //= undef, + description => $c->request->params->{description} //= undef, + }; + my $rule_id = $c->request->params->{ruleid} //= undef; + my $group_id = $c->request->params->{grpid} //= undef; + + unless ($c->model('Provisioning')->call_prov( $c, 'voip', 'check_sip_uri_prefix', $settings->{callee_prefix}, \$checkresult)) { + $messages{rule_callee_prefix_err} = 'Client.Syntax.MalformedUri'; + $c->flash->{rule_callee_prefix_err_detail} = $c->session->{prov_error_object} if ($c->session->{prov_error_object}); + } + unless ($c->model('Provisioning')->call_prov( $c, 'voip', 'check_sip_uri_pattern', $settings->{callee_pattern}, \$checkresult)) { + $messages{rule_callee_pattern_err} = 'Client.Syntax.MalformedUri'; + $c->flash->{rule_callee_pattern_err_detail} = $c->session->{prov_error_object} if ($c->session->{prov_error_object}); + } + unless ($c->model('Provisioning')->call_prov( $c, 'voip', 'check_sip_uri_pattern', $settings->{caller_pattern}, \$checkresult)) { + $messages{rule_caller_pattern_err} = 'Client.Syntax.MalformedUri'; + $c->flash->{rule_caller_pattern_err_detail} = $c->session->{prov_error_object} if ($c->session->{prov_error_object}); + } - my $grpid = $c->request->params->{grpid}; - my $callee_prefix = $c->request->params->{callee_prefix}; - my $callee_pattern = $c->request->params->{callee_pattern}; - my $caller_pattern = $c->request->params->{caller_pattern}; - my $description = $c->request->params->{description}; + if (keys %messages) { + $c->session->{messages} = \%messages; + $c->flash->{restore_rule} = $settings; + + if (defined $rule_id and length ($rule_id)) { + $c->response->redirect("/peering/detail?group_id=$group_id&reditid=$rule_id"); + } + else { + $c->response->redirect("/peering/detail?group_id=$group_id"); + } + $c->detach; + } -# $messages{crulerr} = 'Client.Syntax.MalformedPeerGroupName' -# unless $callee_prefix =~ /^[a-zA-Z0-9_\.\-\@\:]+/; + # data ok, save it + my $result; - unless(keys %messages) { - if($c->model('Provisioning')->call_prov( $c, 'voip', 'create_peer_rule', - { group_id => $grpid, - data => { - callee_prefix => $callee_prefix, - callee_pattern => $callee_pattern, - caller_pattern => $caller_pattern, - description => $description - }, - }, - undef - )) - { - $messages{erulmsg} = 'Server.Voip.SavedSettings'; - $c->session->{messages} = \%messages; - $c->response->redirect("/peering/detail?group_id=$grpid"); - return; - } - else - { - $messages{erulerr} = 'Client.Voip.InputErrorFound'; - if ($c->session->{prov_error_object}) { - # put into flash (read-once), %messages is translated which will not work here. - $c->flash->{erulerr_detail} = $c->session->{prov_error_object}; - } - } - } else { - # TODO: add proper values here and set them in tt - my %arefill = (); -# $arefill{name} = $grpname; -# $arefill{desc} = $grpdesc; - - $c->stash->{arefill} = \%arefill; + if (defined $rule_id and length ($rule_id)) { + $result = $c->model('Provisioning')->call_prov( $c, 'voip', 'update_peer_rule', + { id => $rule_id, + data => $settings, + }, + undef, + ); + } + else { + $result = $c->model('Provisioning')->call_prov( $c, 'voip', 'create_peer_rule', + { group_id => $group_id, + data => $settings, + }, + undef, + ); } - $c->session->{messages} = \%messages; - $c->response->redirect("/peering/detail?group_id=$grpid"); - return; + if ($result) { + $messages{erulmsg} = 'Server.Voip.SavedSettings'; + $c->session->{messages} = \%messages; + $c->response->redirect("/peering/detail?group_id=$group_id"); + return; + } + else { + $messages{erulerr} = 'Client.Voip.InputErrorFound'; + } } =head2 delete_rule @@ -300,65 +317,6 @@ sub delete_rule : Local { return; } -=head2 edit_rule - -Edit a peering rule - -=cut - -sub edit_rule : Local { - my ( $self, $c ) = @_; - $c->stash->{template} = 'tt/peering_detail.tt'; - - my %messages; - my %settings; - - my $grpid = $c->request->params->{grpid}; - my $ruleid = $c->request->params->{ruleid}; - my $callee_prefix = $c->request->params->{callee_prefix}; - my $callee_pattern = $c->request->params->{callee_pattern}; - my $caller_pattern = $c->request->params->{caller_pattern}; - my $description = $c->request->params->{description}; - -# $messages{crulerr} = 'Client.Syntax.MalformedPeerGroupName' -# unless $callee_prefix =~ /^[a-zA-Z0-9_\.\-\@\:]+/; - - unless(keys %messages) { - if($c->model('Provisioning')->call_prov( $c, 'voip', 'update_peer_rule', - { id => $ruleid, - data => { - callee_prefix => $callee_prefix, - callee_pattern => $callee_pattern, - caller_pattern => $caller_pattern, - description => $description - }, - }, - undef - )) - { - $messages{erulmsg} = 'Server.Voip.SavedSettings'; - $c->session->{messages} = \%messages; - $c->response->redirect("/peering/detail?group_id=$grpid"); - return; - } - else - { - $messages{erulerr} = 'Client.Voip.InputErrorFound'; - } - } else { - # TODO: add proper values here and set them in tt - my %arefill = (); -# $arefill{name} = $grpname; -# $arefill{desc} = $grpdesc; - - $c->stash->{arefill} = \%arefill; - } - - $c->session->{messages} = \%messages; - $c->response->redirect("/peering/detail?group_id=$grpid"); - return; -} - =head2 create_peer Create a peering server for a given group diff --git a/root/tt/peering_detail.tt b/root/tt/peering_detail.tt index bf37960..f9ba5cc 100644 --- a/root/tt/peering_detail.tt +++ b/root/tt/peering_detail.tt @@ -130,6 +130,7 @@

Peering Rules

[% IF !grp.rules || grp.rules.size == 0 %]
Peering Servers of this Peering Group will not be used until at least one Peering Rule is added!
[% END %] + [% IF messages.erulmsg %]
[% messages.erulmsg %]
[% END %] [% IF messages.erulerr %]
[% messages.erulerr %] @@ -140,6 +141,22 @@
[% END %] + [% IF messages.rule_callee_prefix_err %] +
Callee prefix: [% messages.rule_callee_prefix_err %] + [% IF rule_callee_prefix_err_detail %]
[% rule_callee_prefix_err_detail %][% END %] +
+ [% END %] + [% IF messages.rule_callee_pattern_err %] +
Callee pattern: [% messages.rule_callee_pattern_err %] + [% IF rule_callee_pattern_err_detail %]
[% rule_callee_pattern_err_detail %][% END %] +
+ [% END %] + [% IF messages.rule_caller_pattern_err %] +
Caller pattern: [% messages.rule_caller_pattern_err %] + [% IF rule_caller_pattern_err_detail %]
[% rule_caller_pattern_err_detail %][% END %] +
+ [% END %] +