Add views and controller for new global rewrite rule set configuration.

3.1
Andreas Granig 15 years ago
parent 711644bc23
commit c9de68f1c6

@ -0,0 +1,437 @@
package admin::Controller::rewrite;
use strict;
use warnings;
use base 'Catalyst::Controller';
use Data::Dumper;
use admin::Utils;
=head1 NAME
admin::Controller::rewrite - Catalyst Controller
=head1 DESCRIPTION
Catalyst Controller.
=head1 METHODS
=head2 index
Configure SIP rewrites
=cut
sub index : Private {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/rewrite.tt';
my $rule_sets;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_rewrite_rule_sets',
undef,
\$rule_sets
);
$c->stash->{rule_sets} = $rule_sets if eval { @$rule_sets };
$c->stash->{editid} = $c->request->params->{editid};
if(exists $c->session->{garefill}) {
$c->stash->{garefill} = $c->session->{garefill};
delete $c->session->{garefill};
}
return 1;
}
=head2 do_delete_set
Delete a rewrite set
=cut
sub delete_set : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/rewrite.tt';
my %messages;
my %settings;
my $setid = $c->request->params->{setid};
if($c->model('Provisioning')->call_prov( $c, 'voip', 'delete_rewrite_rule_set',
{ id => $setid
},
undef
))
{
$messages{epeermsg} = 'Server.Voip.RewriteRuleSetDeleted';
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite");
return;
}
$c->response->redirect("/rewrite");
return;
}
=head2 create_set
Create a rewrite set
=cut
sub create_set : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/rewrite.tt';
my %messages = ();
my %settings = ();
$settings{name} = $c->request->params->{setname};
$messages{cpeererr} = 'Client.Syntax.MalformedRewriteRuleSetName'
unless $settings{name} =~ /^[a-zA-Z0-9_\-]+/;
$settings{description} = $c->request->params->{setdesc};
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'create_rewrite_rule_set',
{ %settings },
undef
))
{
$messages{cpeermsg} = 'Server.Voip.SavedSettings';
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite");
return;
}
} else {
$messages{cpeererr} = 'Client.Voip.InputErrorFound';
}
$c->session->{garefill} = \%settings;
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite#create_set");
return;
}
=head2 edit_set
Edit a rewrite set
=cut
sub edit_set : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/rewrite.tt';
my %messages;
my %settings;
my $setid = $c->request->params->{setid};
$settings{description} = $c->request->params->{setdesc};
#$c->log->debug('*** edit set');
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'update_rewrite_rule_set',
{ id => $setid,
data => \%settings,
},
undef
))
{
$messages{epeermsg} = 'Server.Voip.SavedSettings';
}
}
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite");
return;
}
=head2 detail
Show rewrite rules for a given set
=cut
sub detail : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/rewrite_detail.tt';
my $setid = $c->request->params->{set_id};
my $set_details;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_rewrite_rule_set',
{ id => $setid },
\$set_details
);
$c->stash->{set} = $set_details;
$c->stash->{editid} = $c->request->params->{editid};
return 1;
}
=head2 create_rewrite
Create a rewrite rule for a given peer with defined direction and field
=cut
sub create_rewrite : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/rewrite_detail.tt';
my %messages;
my %settings;
my $setid = $c->request->params->{setid};
my $match_pattern = $c->request->params->{match_pattern};
my $replace_pattern = $c->request->params->{replace_pattern};
my $description = $c->request->params->{description};
my $direction = $c->request->params->{direction};
my $field = $c->request->params->{field};
my $priority = $c->request->params->{priority};
my $a = "";
if($field eq 'caller') { $a = 'caller'.$a; }
elsif($field eq 'callee') { $a = 'callee'.$a; }
if($direction eq 'in') { $a = 'i'.$a; }
elsif($direction eq 'out') { $a = 'o'.$a; }
my $m = $a.'msg'; my $e = $a.'err'; my $d = $a.'detail';
# $messages{crulerr} = 'Client.Syntax.MalformedPeerGroupName'
# unless $callee_prefix =~ /^[a-zA-Z0-9_\.\-\@\:]+/;
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'create_rewrite_rule',
{ set_id => $setid,
data => {
match_pattern => $match_pattern,
replace_pattern => $replace_pattern,
description => $description,
direction => $direction,
field => $field,
priority => $priority,
},
},
undef
))
{
$messages{$m} = 'Server.Voip.SavedSettings';
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite/detail?set_id=$setid#$a");
return;
}
else
{
$messages{$e} = 'Client.Voip.InputErrorFound';
if($c->session->{prov_error_object}) {
$c->flash->{$d} = $c->session->{prov_error_object};
}
}
} else {
# TODO: add proper values here and set them in tt
my %arefill = ();
# $arefill{name} = $setname;
# $arefill{desc} = $setdesc;
$c->stash->{arefill} = \%arefill;
}
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite/detail?set_id=$setid#$a");
return;
}
=head2 update_rewrite_priority
Updates the priority of rewrite rules upon re-order
=cut
sub update_rewrite_priority : Local {
my ( $self, $c ) = @_;
my %messages;
my %settings;
my $prio = 0;
my $rules = $c->request->params->{'rule[]'};
foreach my $rule_id(@$rules)
{
my $rule = undef;
$c->model('Provisioning')->call_prov( $c, 'voip', 'get_rewrite_rule',
{ id => $rule_id },
\$rule
);
$c->model('Provisioning')->call_prov( $c, 'voip', 'update_rewrite_rule',
{ id => $rule_id,
data => {
match_pattern => $rule->{match_pattern},
replace_pattern => $rule->{replace_pattern},
description => $rule->{description},
direction => $rule->{direction},
field => $rule->{field},
priority => $prio,
},
},
undef
);
$prio++;
}
$c->session->{messages} = \%messages;
$c->response->redirect("/");
return;
}
=head2 delete_rewrite
Delete a rewrite rule
=cut
sub delete_rewrite : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/rewrite_detail.tt';
my %messages;
my %settings;
my $setid = $c->request->params->{setid};
my $rewriteid = $c->request->params->{rewriteid};
my $direction = $c->request->params->{direction};
my $field = $c->request->params->{field};
my $a = "";
if($field eq 'caller') { $a = 'caller'.$a; }
elsif($field eq 'callee') { $a = 'callee'.$a; }
if($direction eq 'in') { $a = 'i'.$a; }
elsif($direction eq 'out') { $a = 'o'.$a; }
my $m = $a.'msg'; my $e = $a.'err';
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'delete_rewrite_rule',
{ id => $rewriteid
},
undef
))
{
$messages{$m} = 'Server.Voip.SavedSettings';
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite/detail?set_id=$setid#$a");
return;
}
} else {
}
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite/detail?set_id=$setid#$a");
return;
}
=head2 edit_rewrite
Updates a rewrite rule
=cut
sub edit_rewrite : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/rewrite_detail.tt';
my %messages;
my %settings;
my $setid = $c->request->params->{setid};
my $rewriteid = $c->request->params->{rewriteid};
my $match_pattern = $c->request->params->{match_pattern};
my $replace_pattern = $c->request->params->{replace_pattern};
my $description = $c->request->params->{description};
my $direction = $c->request->params->{direction};
my $field = $c->request->params->{field};
my $priority = $c->request->params->{priority};
my $a = "";
if($field eq 'caller') { $a = 'caller'.$a; }
elsif($field eq 'callee') { $a = 'callee'.$a; }
if($direction eq 'in') { $a = 'i'.$a; }
elsif($direction eq 'out') { $a = 'o'.$a; }
my $m = $a.'msg'; my $e = $a.'err'; my $d = $a.'detail';
# $messages{crulerr} = 'Client.Syntax.MalformedPeerGroupName'
# unless $callee_prefix =~ /^[a-zA-Z0-9_\.\-\@\:]+/;
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'update_rewrite_rule',
{ id => $rewriteid,
data => {
match_pattern => $match_pattern,
replace_pattern => $replace_pattern,
description => $description,
direction => $direction,
field => $field,
priority => $priority,
},
},
undef
))
{
$messages{$m} = 'Server.Voip.SavedSettings';
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite/detail?set_id=$setid#$a");
return;
}
else
{
$messages{$e} = 'Client.Voip.InputErrorFound';
if($c->session->{prov_error_object}) {
$c->flash->{$d} = $c->session->{prov_error_object};
}
}
} else {
# TODO: add proper values here and set them in tt
my %arefill = ();
# $arefill{name} = $setname;
# $arefill{desc} = $setdesc;
$c->stash->{arefill} = \%arefill;
}
$c->session->{messages} = \%messages;
$c->response->redirect("/rewrite/detail?set_id=$setid#$a");
return;
}
=head1 BUGS AND LIMITATIONS
=over
=item currently none
=back
=head1 SEE ALSO
Provisioning model, Sipwise::Provisioning::Billing, Catalyst
=head1 AUTHORS
=over
=item Andreas Granig <agranig@sipwise.com>
=back
=head1 COPYRIGHT
The rewrite controller is Copyright (c) 2009-2011 Sipwise GmbH, Austria.
You should have received a copy of the licences terms together with the
software.
=cut
# ende gelaende
1;

@ -35,6 +35,7 @@
[% IF Catalyst.config.peering_features %] [% IF Catalyst.config.peering_features %]
<li [% 'class="active_menu"' IF menu.active == "peering" %]><a href="/peering">SIP Peerings</a></li> <li [% 'class="active_menu"' IF menu.active == "peering" %]><a href="/peering">SIP Peerings</a></li>
[% END %] [% END %]
<li [% 'class="active_menu"' IF menu.active == "rewrite" %]><a href="/rewrite">Rewrite Rule Sets</a></li>
</ul> </ul>
</div> </div>

@ -0,0 +1,73 @@
<h3 id="contract">Rewrite Rule Sets</h3>
[% IF messages.epeermsg %]<div class="success">[% messages.epeermsg %]</div>[% END %]
[% IF messages.epeererr %]<div class="error">[% messages.epeererr %]</div>[% END %]
[% IF messages.cpeermsg %]<div class="success">[% messages.cpeermsg %]</div>[% END %]
[% IF messages.cpeererr %]<div class="error">[% messages.cpeererr %]</div>[% END %]
<ul class="cleanlist">
<li class="ui-state-default">
<div class="span-4">Name</div>
<div class="span-10 last">Description</div>
</li>
[% id = 0 %]
[% FOREACH set = rule_sets %]
<li class="ui-state-default">
[% IF set.id == editid %]
<div class="span-4">[% set.name %]</div>
<form action="/rewrite/edit_set" method="post">
<input type="hidden" name="setid" value="[% set.id %]" />
<div class="span-10">
<input type="text" id="addtxt" title="string, description of rewrite rule set"
name="setdesc" value="[% set.description %]" />
</div>
<div class="span-1">
<button class="button-save" id="setsave[% id %]">Save</button>
</div>
</form>
<div class="span-1 last">
<a href="/rewrite"><span class="button-cancel">Cancel</span></a>
</div>
[% ELSE %]
<div class="span-4"><a href="/rewrite/detail?set_id=[%set.id%]">[% set.name %]</a></div>
<div class="span-10">[% set.description %]</div>
<div class="span-1">
[% UNLESS Catalyst.session.admin.read_only %]
<a href="/rewrite?editid=[% set.id %]"><span class="button-edit">Edit</span></a>
[% END %]
</div>
<form action="/rewrite/delete_set" method="post">
<input type="hidden" name="setid" value="[% set.id %]" />
<div class="span-1 last">
[% UNLESS Catalyst.session.admin.read_only %]
<button class="button-delete" id="setdel[% id %]">Delete</button>
[% END %]
</div>
[% END %]
</form>
</li>
[% id = id + 1 %]
[% END %]
[% UNLESS Catalyst.session.admin.read_only %]
<form action="/rewrite/create_set" method="post">
<li class="ui-state-default">
<div class="span-4">
<input type="text" size="20" name="setname" title="string, name of rewrite rule set"
id="addtxt" value="[% garefill.name %]" />
</div>
<div class="span-10">
<input type="text" size="20" name="setdesc" title="string, description of rewrite rule set"
id="addtxt" value="[% garefill.description %]" />
</div>
<div class="span-1 last">
<button class="button-add" id="setadd">Add</button>
</div>
</li>
</form>
</ul>
[% END %]

@ -0,0 +1,184 @@
<script type="text/javascript">
$(function() {
[% ids = ['icaller', 'icallee', 'ocaller', 'ocallee'] %]
[% FOREACH id = ids %]
$("#[% id %]list").sortable({
placeholder: 'ui-state-highlight',
forcePlaceholderSize: true,
stop: function(i) {
placeholder: 'ui-state-highlight'
$.ajax({
type: "POST",
url: "update_rewrite_priority",
data: $("#[% id %]list").sortable("serialize")
});
},
});
//$("#[% id %]").disableSelection();
[% END %]
});
</script>
<h2> Rewrite Rule Set [% set.rewrite_set.name %] </h2>
<a href="/rewrite"><span class="button-back">Back</span></a><br /><br />
[%
rewrites = [
{
header = 'Inbound Rewrite Rules for Caller',
id = 'icaller',
tag = 'if',
dir = 'in',
field = 'caller',
msg = messages.icallermsg,
err = messages.icallererr,
detail = icallerdetail,
rules = set.rewrite_in_caller,
},
{
header = 'Inbound Rewrite Rules for Callee',
id = 'icallee',
tag = 'it',
dir = 'in',
field = 'callee',
msg = messages.icalleemsg,
err = messages.icalleeerr,
detail = icalleedetail,
rules = set.rewrite_in_callee,
},
{
header = 'Outbound Rewrite Rules for Caller',
id = 'ocaller',
tag = 'of',
dir = 'out',
field = 'caller',
msg = messages.ocallermsg,
err = messages.ocallererr,
detail = ocallerdetail,
rules = set.rewrite_out_caller,
},
{
header = 'Outbound Rewrite Rules for Callee',
id = 'ocallee',
tag = 'ot',
dir = 'out',
field = 'callee',
msg = messages.ocalleemsg,
err = messages.ocalleeerr,
detail = ocalleedetail,
rules = set.rewrite_out_callee,
},
]
%]
[% FOREACH rw = rewrites %]
<h3 id="[% rw.id %]">[% rw.header %]</h3>
[% IF rw.msg %]<div class="success">[% rw.msg %]</div>[% END %]
[% IF rw.err %]<div class="error">[% rw.err %][% IF rw.detail %]<br/>[% rw.detail %][% END %]</div>[% END %]
<ul class="cleanlist">
<li class="ui-state-default">
<div class="span-1">&nbsp;</div>
<div class="span-4">Match Pattern</div>
<div class="span-4">Replacement Pattern</div>
<div class="span-4 append-3 last">Description</div>
</li>
</ul>
<ul id="[% rw.id %]list" class="cleanlist">
[% id = 0 %]
[% priority = 0 %]
[% FOREACH rule = rw.rules %]
[% priority = rule.priority %]
<li class="ui-state-default" id="rule_[% rule.id %]">
<div class="span-1"><span class='ui-icon ui-icon-arrowthick-2-n-s'></span></div>
[% IF rule.id == editid && !Catalyst.session.admin.read_only %]
<form action="/rewrite/edit_rewrite" method="post">
<input type="hidden" name="setid" value="[% set.rewrite_set.id %]" />
<input type="hidden" name="direction" value="[% rule.direction %]" />
<input type="hidden" name="field" value="[% rule.field %]" />
<input type="hidden" name="rewriteid" value="[% rule.id %]" />
<input type="hidden" name="priority" value="[% rule.priority %]" />
<div class="span-4">
<input type="text" size="15 id="addtxt" title="string, match pattern"
name="match_pattern" value="[% rule.match_pattern %]" />
</div>
<div class="span-4">
<input type="text" size="15" id="addtxt" title="string, replacement pattern"
name="replace_pattern" value="[% rule.replace_pattern %]" />
</div>
<div class="span-4 append-1">
<input type="text" size="15" id="addtxt" title="string, rewrite rule description"
name="description" value="[% rule.description %]" />
</div>
<div class="span-1">
<button class="button-save" id="[% rw.tag %]save[% id %]">Save</button>
</div>
</form>
<div class="prepend-1 span-1 last">
<a href="/rewrite/detail?set_id=[% set.rewrite_set.id %]#[% rw.id %]"><span class="button-cancel">Cancel</span></a>
</div>
[% ELSE %]
<div class="span-4">[% rule.match_pattern %]</div>
<div class="span-4">[% rule.replace_pattern %]</div>
<div class="span-4 append-1">[% rule.description %]</div>
<div class="span-1">
[% UNLESS Catalyst.session.admin.read_only %]
<a href="/rewrite/detail?set_id=[% set.rewrite_set.id %]&editid=[% rule.id %]#[% rw.id %]"><span class="button-edit">Edit</span></a>
[% END %]
</div>
<form action="/rewrite/delete_rewrite" method="post">
<input type="hidden" name="setid" value="[% set.rewrite_set.id %]" />
<input type="hidden" name="rewriteid" value="[% rule.id %]" />
<input type="hidden" name="direction" value="[% rule.direction %]" />
<input type="hidden" name="field" value="[% rule.field %]" />
<div class="prepend-1 span-1 last">
[% UNLESS Catalyst.session.admin.read_only %]
<button id="[% rw.tag %]del[% id %]" class="button-delete">Delete</button>
[% END %]
</div>
[% END %]
</form>
</li>
[% id = id + 1 %]
[% END %]
</ul>
[% UNLESS Catalyst.session.admin.read_only %]
<ul class="cleanlist">
<li class="ui-state-default">
<form action="/rewrite/create_rewrite" method="post">
<input type="hidden" name="setid" value="[% set.rewrite_set.id %]" />
<input type="hidden" name="direction" value="[% rw.dir %]" />
<input type="hidden" name="field" value="[% rw.field%]" />
<input type="hidden" name="priority" value="[% priority + 1 %]" />
<div class="span-1">&nbsp;</div>
<div class="span-4">
<input type="text" size="15" id="addtxt" title="string, match pattern"
name="match_pattern" value="" />
</div>
<div class="span-4">
<input type="text" size="15" id="addtxt" title="string, replacement pattern"
name="replace_pattern" value="" />
</div>
<div class="span-4 append-1">
<input type="text" size="15" id="addtxt" title="string, rule description"
name="description" value="" />
</div>
<div class="span-1 append-2 last">
<button class="button-add" id="[% rw.tag %]add">Add</button>
</div>
</form>
</li>
</ul>
<div class="hspace-20"></div>
[% END %]
[% END %]
Loading…
Cancel
Save