File Coverage

web/htdocs/mod_perl/resolve
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             #!/usr/bin/perl -w
2              
3             # $Id: resolve,v 1.9 2008-04-11 12:03:31 mike Exp $
4             #
5             # This is the front end for Keystone Resolver when invoked either as
6             # an OpenURL 0.1 resolver, or as a Z39.88 (OpenURL 1.0) resolver using
7             # any of the transports
8             # info:ofi/tsp:http:openurl-by-val
9             # info:ofi/tsp:http:openurl-by-ref
10             # info:ofi/tsp:http:openurl-inline
11             # or their secure HTTPS equivalents, as defined in Part 1, section
12             # 15.1 of the standard, and as described in Part 2, section 9. It
13             # works using both HTTP GET and HTTP POST.
14             #
15             # The classes that do the actual work are designed to work with other
16             # Z39.88 transports too, but none have been defined yet.
17              
18 1     1   1210 use strict;
  1         2  
  1         42  
19 1     1   5 use warnings;
  1         2  
  1         32  
20 1     1   1973 use CGI;
  1         14081  
  1         8  
21 1     1   708 use Keystone::Resolver;
  0            
  0            
22              
23             Keystone::Resolver::Utils::apache_non_moronic_logging();
24              
25             {
26             my $cgi = new CGI();
27             if (0) {
28             ### Temporary measure. We will want better logging down the line.
29             my $file = "/usr/local/src/cvs/resolver/samples/openurls/samples";
30             open F, ">>$file"
31             or die "can't write to OpenURL log file '$file': $!";
32              
33             print F $cgi->query_string(), "\n";
34             close F;
35             }
36              
37             binmode STDERR, ":utf8"; # For any temporary debugging output
38             my $referer = $ENV{HTTP_REFERER} || "http://made.up.referrer/foo";
39             my $resolver = new Keystone::Resolver();
40             my $openURL = Keystone::Resolver::OpenURL->newFromCGI($resolver, $cgi, $referer);
41              
42             my($type, $content);
43             eval {
44             ($type, $content) = $openURL->resolve();
45             }; if ($@ && !ref $@ && $@ =~ /DBI connect.*failed/) {
46             print <<__EOT__;
47             It was not possible to connect to the Keystone Resolver database.
48             Please see /usr/share/libkeystone-resolver-perl/db/README
49              
50             Detailed error message follows, but you can probably ignore it:
51             --
52             $@
53             __EOT__
54             } elsif ($@ && (!ref $@ || $@->isa("HTML::Mason::Exception")) && $@ =~ /Unknown column/) {
55             print <<__EOT__;
56             A column was missing from a table in the Keystone Resolver database.
57             This probably means that the structure of your database is out of date
58             Please see /usr/share/libkeystone-resolver-perl/db/README.update
59              
60             Detailed error message follows, but you can probably ignore it:
61             --
62             $@
63             __EOT__
64             return;
65             } elsif ($@) {
66             print "Uh-oh!\n$@";
67             exit;
68             }
69              
70             my $r = Keystone::Resolver::Utils::apache_request($cgi);
71             $r->content_type($type);
72             print $content;
73             }