diff --git a/docs/upgrades/upgrade_7.3.19-7.4.0.pl b/docs/upgrades/upgrade_7.3.19-7.4.0.pl
index 9c60a96c9..3c1d634ef 100644
--- a/docs/upgrades/upgrade_7.3.19-7.4.0.pl
+++ b/docs/upgrades/upgrade_7.3.19-7.4.0.pl
@@ -29,10 +29,10 @@ addMetaDataPostsToCS($session);
addUserInvitations($session);
addPrivateMessaging($session);
addNewsletter($session);
+addHttpProxyUrlPatternFilter($session);
finish($session); # this line required
-
#-------------------------------------------------
sub addNewsletter {
my $session = shift;
@@ -314,6 +314,15 @@ sub addPrivateMessaging {
print "OK!\n" unless $quiet;
}
+#-------------------------------------------------
+sub addHttpProxyUrlPatternFilter {
+ my $session = shift;
+ print "\tAdding HttpProxy Url Pattern Filter..." unless ($quiet);
+ $session->db->write("alter table HttpProxy add urlPatternFilter mediumtext default NULL");
+ print "OK!\n" unless ($quiet);
+}
+
+
# ---- DO NOT EDIT BELOW THIS LINE ----
diff --git a/lib/WebGUI/Asset/Wobject/HttpProxy.pm b/lib/WebGUI/Asset/Wobject/HttpProxy.pm
index 9cc9ccb92..118c18858 100644
--- a/lib/WebGUI/Asset/Wobject/HttpProxy.pm
+++ b/lib/WebGUI/Asset/Wobject/HttpProxy.pm
@@ -118,7 +118,15 @@ sub definition {
label => $i18n->get(418, 'WebGUI'),
hoverHelp => $i18n->get('418 description', 'WebGUI'),
},
-
+
+ urlPatternFilter=>{
+ fieldType => "textarea",
+ defaultValue => "",
+ tab => "display",
+ label => $i18n->get("url pattern filter label"),
+ hoverHelp => $i18n->get("url pattern filter hover help"),
+ },
+
followExternal => {
fieldType => "yesNo",
defaultValue => 1,
@@ -127,13 +135,13 @@ sub definition {
hoverHelp => $i18n->get('5 description'),
},
- rewriteUrls => {
+ rewriteUrls => {
fieldType => "yesNo",
- defaultValue => 1,
+ defaultValue => 1,
tab => 'properties',
label => $i18n->get(12),
hoverHelp => $i18n->get('12 description'),
- },
+ },
followRedirect => {
fieldType => "yesNo",
@@ -382,7 +390,7 @@ sub view {
$var{content} = $1 || $var{content};
$var{"content.trailing"} = $2;
}
- my $p = WebGUI::Asset::Wobject::HttpProxy::Parse->new($self->session, $proxiedUrl, $var{content}, $self->getId,$self->get("rewriteUrls"),$self->getUrl);
+ my $p = WebGUI::Asset::Wobject::HttpProxy::Parse->new($self->session, $proxiedUrl, $var{content}, $self->getId,$self->get("rewriteUrls"),$self->getUrl,$self->get("urlPatternFilter"));
$var{content} = $p->filter; # Rewrite content. (let forms/links return to us).
$p->DESTROY;
diff --git a/lib/WebGUI/Asset/Wobject/HttpProxy/Parse.pm b/lib/WebGUI/Asset/Wobject/HttpProxy/Parse.pm
index 332a5d947..dade9b3b2 100644
--- a/lib/WebGUI/Asset/Wobject/HttpProxy/Parse.pm
+++ b/lib/WebGUI/Asset/Wobject/HttpProxy/Parse.pm
@@ -68,7 +68,13 @@ sub new {
$self->{assetId} = shift;
$self->{rewriteUrls} = shift;
$self->{assetUrl} = shift;
- $self->{Filtered} ="";
+
+ my $pfilter = shift;
+ $pfiler =~ s/\r//g;
+ my @patterns = split(/\n/,$pfilter);
+ $self->{patternFilter} = \@patterns;
+
+ $self->{Filtered} ="";
$self->{FormAction} = "";
$self->{FormActionIsDefined} = 0;
$self->{recurseCheck} = 0;
@@ -118,7 +124,8 @@ sub session {
sub start {
my $self = shift;
my ($tag, $attr, $attrseq, $origtext) = @_;
- # Check on the div class and div id attributes to see if we're proxying ourself.
+
+ # Check on the div class and div id attributes to see if we're proxying ourself.
if($tag eq "div" && $attr->{'class'} eq 'wobjectHttpProxy' && $attr->{'id'} eq ('assetId'.$self->{assetId})) {
$self->{recurseCheck} = 1;
}
@@ -156,9 +163,23 @@ sub start {
$self->{FormAction} = $val; # set FormAction to include hidden field later
$val = $self->{assetUrl}; # Form Action returns to us
} else {
- $val =~ s/\n//g; # Bugfix 757068
- $val = $self->session->url->append($self->{assetUrl},'proxiedUrl='.$self->session->url->escape($val).';func=view'); # return to us
- }
+ $val =~ s/\n//g; # Bugfix 757068
+
+ #Determine if pattern should not be rewritten
+ $rewritePattern = 0;
+ foreach my $pattern (@{$self->{patternFilter}}) {
+ if($val =~ m/$pattern/i) {
+ $rewritePattern = 1;
+ }
+ }
+
+ if($rewritePattern) {
+ $val = URI::URL::url($val)->abs($self->{Url},1); # make absolute
+ }
+ else {
+ $val = $self->session->url->append($self->{assetUrl},'proxiedUrl='.$self->session->url->escape($val).';func=view'); # return to us
+ }
+ }
}
}
}
diff --git a/lib/WebGUI/i18n/English/Asset_HttpProxy.pm b/lib/WebGUI/i18n/English/Asset_HttpProxy.pm
index e5e806629..c227b1de0 100644
--- a/lib/WebGUI/i18n/English/Asset_HttpProxy.pm
+++ b/lib/WebGUI/i18n/English/Asset_HttpProxy.pm
@@ -279,6 +279,20 @@ be useful, others may not.|,
context => q|Translator note: the "%s" tokens in the message should not be translated.|,
lastUpdated => 1168994613
},
+
+ 'url pattern filter label' => {
+ message => q|Url Pattern Filter|,
+ lastUpdated => 1168994613,
+ },
+
+ 'url pattern filter hover help' => {
+ message => q|Enter patterns one per line (Perl regular expressions are valid) that should be filtered when re-writing urls
+
+ Ex: /bms/documents
+ /bms/documents/document_\\d+\\.pdf
+ |,
+ lastUpdated => 1168994613,
+ }
};