Apache-ProxyRewrite
view release on metacpan or search on metacpan
ProxyRewrite.pm view on Meta::CPAN
# and distribution of the Program as soon as reasonably practicable.
# However, Recipient's obligations under this Agreement and any
# licenses granted by Recipient relating to the Program shall continue
# and survive.
#
# IBM may publish new versions (including revisions) of this Agreement
# from time to time. Each new version of the Agreement will be given a
# distinguishing version number. The Program (including Contributions)
# may always be distributed subject to the version of the Agreement
# under which it was received. In addition, after a new version of the
# Agreement is published, Contributor may elect to distribute the
# Program (including its Contributions) under the new version. No one
# other than IBM has the right to modify this Agreement. Except as
# expressly stated in Sections 2(a) and 2(b) above, Recipient receives
# no rights or licenses to the intellectual property of any
# Contributor under this Agreement, whether expressly, by implication,
# estoppel or otherwise. All rights in the Program not expressly
# granted under this Agreement are reserved.
#
# This Agreement is governed by the laws of the State of New York and
# the intellectual property laws of the United States of America. No
# party to this Agreement will bring a legal action under this
# Agreement more than one year after the cause of action arose. Each
# party waives its rights to a jury trial in any resulting litigation.
#
###############################################################################
# Package name
package Apache::ProxyRewrite;
# Required libraries
use strict;
use Apache;
use Apache::Constants qw(OK AUTH_REQUIRED DECLINED DONE);
use Apache::Log;
use Apache::URI;
use LWP::UserAgent;
use Socket;
use URI::Escape qw(uri_unescape);
# Global variables
$Apache::ProxyRewrite::VERSION = '0.17';
$Apache::ProxyRewrite::PRODUCT = 'ProxyRewrite/' .
$Apache::ProxyRewrite::VERSION;
my %LINK_ELEMENTS =
( # These represent all the possible valid tags that have links in them
'a' => 'href',
'applet' => {
'archive' => 1,
'code' => 1,
'codebase' => 1,
},
'area' => 'href',
'base' => 'href',
'body' => 'background',
'embed' => 'src',
'form' => 'action',
'frame' => 'src',
'img' => {
'src' => 1,
'lowsrc' => 1,
'usemap' => 1,
},
'input' => 'src',
'isindex' => 'action',
'link' => {
'href' => 1,
'src' => 1,
},
'meta' => {
'content' => 1,
'http-equiv' => 1,
},
'object' => {
'classid' => 1,
'codebase' => 1,
'data' => 1,
'name' => 1,
'usemap' => 1,
},
'script' => 'src',
'td' => 'background',
'th' => 'background',
'tr' => 'background',
);
###############################################################################
###############################################################################
# handler: hook into Apache/mod_perl API
###############################################################################
###############################################################################
sub handler {
my $r = shift;
my %mappings = ();
my ($auth_info, $auth_redirect, $remote_location) = undef;
%mappings = split(/\s*(?:=>|,)\s*/, $r->dir_config('ProxyRewrite'));
$auth_info = $r->dir_config('ProxyAuthInfo');
$auth_redirect = $r->dir_config('ProxyAuthRedirect') || 'Off';
if ($r->dir_config('ProxyTo')) {
$remote_location = $r->dir_config('ProxyTo');
} else {
$r->log->error("ProxyRewrite::handler: ProxyTo directive must be defined");
return DECLINED;
}
# Automatically add a mapping for the remote relative URI and the
# current location. Also capture remote site information.
$remote_location =~ m!^([^:]+://[^/]+)(/?.*)!;
my $remote_site = $1;
if ($2) {
$mappings{$2} = $r->location;
} elsif ($r->location eq '/') {
$mappings{'/'} = $r->location;
} else {
$mappings{'/'} = $r->location . '/';
}
( run in 1.659 second using v1.01-cache-2.11-cpan-df04353d9ac )