package OpenILS::WWW::Redirect;
use strict; use warnings;
-use Socket;
+use Socket;
use Apache2 ();
use Apache2::Log;
use Apache2::Const -compile => qw(OK REDIRECT :log);
use APR::Const -compile => qw(:error SUCCESS);
-use Template;
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use CGI ();
use OpenSRF::AppSession;
use OpenSRF::System;
-use OpenILS::Utils::Fieldmapper;
use OpenSRF::Utils::Logger qw/$logger/;
use vars '$lib_ips_hash';
+my $lib_ips_hash;
my $bootstrap_config_file;
sub import {
OpenSRF::System->bootstrap_client( config_file => $bootstrap_config_file );
}
+sub parse_ips_file {
+ my $class = shift;
+ my $ips_file = shift;
+
+ if( open(F, $ips_file) ) {
+
+ while( my $data = <F> ) {
+ chomp($data);
+
+ my( $shortname, $ip1, $ip2 ) = split(/\s+/, $data);
+ next unless ($shortname and $ip1 and $ip2);
+
+ $lib_ips_hash->{$shortname} = [] unless $lib_ips_hash->{$shortname};
+ push( @{$lib_ips_hash->{$shortname}}, [ $ip1, $ip2 ] );
+ }
+
+ close(F);
+
+ } else {
+ $logger->error("Unable to open lib IP redirector file $ips_file");
+ }
+}
+
sub handler {
$logger->debug("Apache client connecting from $user_ip");
- if( my $lib_data = redirect_libs( $user_ip ) ) {
- my $region = $lib_data->[0];
- my $library = $lib_data->[1];
+ if(my $shortname = redirect_libs($user_ip)) {
- $logger->info("Apache redirecting $user_ip to $region / $library");
+ $logger->info("Apache redirecting $user_ip to $shortname");
my $session = OpenSRF::AppSession->create("open-ils.storage");
- my $shortname = "$region-$library";
my $org = $session->request(
"open-ils.storage.direct.actor.org_unit.search.shortname",
$shortname)->gather(1);
if($org) { $url .= "?ol=" . $org->id; }
-
}
print "Location: $url\n\n";
my $source_ip = shift;
my $aton_binary = inet_aton( $source_ip );
- if( ! $aton_binary ) { return 0; }
+ return 0 unless $aton_binary;
# do this the linear way for now...
- for my $reg (keys %$lib_ips_hash) {
-
- for my $lib( keys %{$lib_ips_hash->{$reg}} ) {
-
- for my $block (@{$lib_ips_hash->{$reg}->{$lib}}) {
-
- if(defined($block->[0]) && defined($block->[1]) ) {
- my $start_binary = inet_aton( $block->[0] );
- my $end_binary = inet_aton( $block->[1] );
- unless( $start_binary and $end_binary ) { next; }
- if( $start_binary le $aton_binary and
- $end_binary ge $aton_binary ) {
- return [ $reg, $lib ];
- }
- }
- }
- }
+ for my $shortname (keys %$lib_ips_hash) {
+
+ for my $block (@{$lib_ips_hash->{$shortname}}) {
+
+ if(defined($block->[0]) && defined($block->[1]) ) {
+ my $start_binary = inet_aton( $block->[0] );
+ my $end_binary = inet_aton( $block->[1] );
+ next unless( $start_binary and $end_binary );
+ if( $start_binary le $aton_binary and
+ $end_binary ge $aton_binary ) {
+ return $shortname;
+ }
+ }
+ }
}
return 0;
}