3 # USAGE: ./opac_settings.pl --bootstrap /openils/conf/opensrf_core.xml --schema m_sage
4 # Produces output that can be pasted into /etc/apache2/sites-available/eg.conf
10 use OpenSRF::EX qw/:try/;
11 use OpenSRF::Utils::Logger qw/$logger/;
13 use OpenSRF::AppSession;
14 use OpenSRF::Utils::SettingsClient;
20 binmode(STDIN, ':utf8');
21 binmode(STDOUT, ':utf8');
25 my ($config, $schema);
28 "bootstrap=s" => \$config,
29 "schema=s" => \$schema,
32 OpenSRF::System->bootstrap_client( config_file => $config );
34 # XXX Get this stuff from the settings server
35 my $sc = OpenSRF::Utils::SettingsClient->new;
36 my $db_driver = $sc->config_value( reporter => setup => database => 'driver' );
37 my $db_host = $sc->config_value( reporter => setup => database => 'host' );
38 my $db_port = $sc->config_value( reporter => setup => database => 'port' );
39 my $db_name = $sc->config_value( reporter => setup => database => 'db' );
41 $db_name = $sc->config_value( reporter => setup => database => 'name' );
42 print STDERR "WARN: <database><name> is a deprecated setting for database name. For future compatibility, you should use <database><db> instead." if $db_name;
44 my $db_user = $sc->config_value( reporter => setup => database => 'user' );
45 my $db_pw = $sc->config_value( reporter => setup => database => 'pw' );
47 die "Unable to retrieve database connection information from the settings server" unless ($db_driver && $db_host && $db_port && $db_name && $db_user);
49 my $dsn = "dbi:" . $db_driver . ":dbname=" . $db_name .';host=' . $db_host . ';port=' . $db_port;
51 my $dbh = DBI->connect($dsn,$db_user,$db_pw, {AutoCommit => 1, pg_enable_utf8 => 1, RaiseError => 1});
53 my $SQL = 'SELECT DISTINCT ou.id, ou.name FROM actor.org_unit ou, '.$schema.'.opac_settings os WHERE os.org_unit = ou.id ORDER BY ou.name';
55 my $ous = $dbh->selectcol_arrayref($SQL);
57 print "NameVirtualHost *:80\n";
58 print "NameVirtualHost *:443\n\n";
60 for my $ou_id ( @$ous ) {
62 $SQL = "SELECT * FROM actor.org_unit WHERE id = $ou_id";
63 my $ou = $dbh->selectrow_hashref( $SQL, {} );
65 $SQL = "SELECT * FROM ".$schema.".opac_settings WHERE org_unit = $ou_id";
66 my $settings = $dbh->selectall_hashref( $SQL, 'id' );
70 foreach my $key (keys %$settings) {
71 $$settings{$key}->{value} =~ s/^"//;
72 $$settings{$key}->{value} =~ s/"$//;
73 if ($$settings{$key}->{name} eq 'opac.server_alias') {
74 push @{$s{'opac.server_alias'}}, $$settings{$key}->{value};
76 $s{$$settings{$key}->{name}} = $$settings{$key}->{value};
80 print "# " . "-"x70 . "\n";
81 print "# $$ou{name} (shortname '$$ou{shortname}', id $$ou{id})\n";
82 print "# " . "-"x70 . "\n";
85 print "<VirtualHost *:80>\n";
86 print " ServerName $s{'opac.server_name'}\n";
87 foreach my $alias (@{$s{'opac.server_alias'}}) { print " ServerAlias $alias\n"; }
88 print " DocumentRoot /openils/var/web/\n";
89 print " DirectoryIndex index.xml index.html index.xhtml\n";
90 print " RedirectMatch ^/\$ http://$s{'opac.server_name'}/opac/en-US/skin/$s{'opac.directory'}/xml/index.xml?ol=$ou_id\n";
91 print " RedirectMatch default/css/colors.css\$ http://$s{'opac.server_name'}/opac/theme/$s{'opac.directory'}/css/colors.css\n";
92 print " RedirectMatch ^/favicon.ico\$ http://$s{'opac.server_name'}/opac/images/$s{'opac.directory'}/favicon.ico\n";
93 print " RedirectMatch images/main_logo.jpg\$ http://$s{'opac.server_name'}/opac/images/$s{'opac.directory'}/main_logo.jpg\n";
94 print " RedirectMatch images/small_logo.jpg\$ http://$s{'opac.server_name'}/opac/images/$s{'opac.directory'}/small_logo.jpg\n";
95 print " RedirectMatch en-US/extras/slimpac/(start|advanced).html http://$s{'opac.server_name'}/opac/en-US/extras/slimpac/\$1.html\n";
96 print " Include eg_vhost.conf\n";
97 print "</VirtualHost>\n";
100 print "<VirtualHost *:443>\n";
101 print " ServerName $s{'opac.server_name'}\n";
102 foreach my $alias (@{$s{'opac.server_alias'}}) { print " ServerAlias $alias\n"; }
103 print " DocumentRoot /openils/var/web/\n";
104 print " DirectoryIndex index.xml index.html index.xhtml\n";
105 print " RedirectMatch ^/\$ https://$s{'opac.server_name'}/opac/en-US/skin/$s{'opac.directory'}/xml/index.xml?ol=$ou_id\n";
106 print " RedirectMatch default/css/colors.css\$ https://$s{'opac.server_name'}/opac/theme/$s{'opac.directory'}/css/colors.css\n";
107 print " RedirectMatch ^/favicon.ico\$ https://$s{'opac.server_name'}/opac/images/$s{'opac.directory'}/favicon.ico\n";
108 print " RedirectMatch images/main_logo.jpg\$ https://$s{'opac.server_name'}/opac/images/$s{'opac.directory'}/main_logo.jpg\n";
109 print " RedirectMatch images/small_logo.jpg\$ https://$s{'opac.server_name'}/opac/images/$s{'opac.directory'}/small_logo.jpg\n";
110 print " RedirectMatch en-US/extras/slimpac/(start|advanced).html https://$s{'opac.server_name'}/opac/en-US/extras/slimpac/\$1.html\n";
111 print " SSLEngine on\n";
112 print " SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL\n";
113 print " SSLCertificateFile $s{'opac.ssl_cert'}\n";
114 print " SSLCertificateKeyFile $s{'opac.ssl_key'}\n";
115 print " SSLCertificateChainFile ssl/gd_bundle.crt\n";
116 print " Include eg_vhost.conf\n";
117 print " BrowserMatch \".*MSIE.*\" \\\n";
118 print " nokeepalive ssl-unclean-shutdown \\\n";
119 print " downgrade-1.0 force-response-1.0\n";
120 print "</VirtualHost>\n";