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, + } };