- # only works for GET requests
- chdir("$config{wikistatedir}/xapian") || error("chdir: $!");
- $ENV{OMEGA_CONFIG_FILE}="./omega.conf";
- $ENV{CGIURL}=IkiWiki::cgiurl();
- IkiWiki::loadindex();
- $ENV{HELPLINK}=htmllink("", "", "ikiwiki/searching",
- noimageinline => 1, linktext => "Help");
- exec($config{omega_cgi}) || error("$config{omega_cgi} failed: $!");
- }
- }
+ if (defined $cgi->param('DB')) {
+ my @db = map {split('/', $_)} ($cgi->param('DB'));
+ my @search = map {
+ my $db = $_;
+ grep { $db eq $_->{db} } @{$config{search}};
+ } @db;
+ my $auth_needed = 0;
+ foreach (@search) {
+ if ($_->{auth}) {
+ $auth_needed = 1;
+ last;
+ }
+ }
+ if (not $auth_needed) {
+ # only works for GET requests
+ chdir("$config{wikistatedir}/xapian") || error("chdir: $!");
+ $ENV{OMEGA_CONFIG_FILE}="./omega.conf";
+ $ENV{CGIURL}=IkiWiki::cgiurl();
+ IkiWiki::loadindex();
+ $ENV{HELPLINK}=htmllink("", "", "ikiwiki/searching",
+ noimageinline => 1, linktext => "Help");
+ exec($config{omega_cgi}) || error("$config{omega_cgi} failed: $!");
+ }
+ }
+ }
+ }
+}
+
+sub sessioncgi ($) {
+ my $cgi=shift;
+ my $session=shift;
+
+ if ($cgi->param('do') eq 'search') {
+ eval q{use CGI qw(-oldstyle_urls)};
+ # NOTE: ampersands separators are required for xapian-omega
+ IkiWiki::needsignin($cgi, $session);
+ IkiWiki::cgi_savesession($session);
+ my $headers;
+ do {
+ open(my $STDOUT_diverted, '>', \$headers) or die;
+ my $STDOUT_original = select $STDOUT_diverted;
+ IkiWiki::printheader($session);
+ select $STDOUT_original;
+ close $STDOUT_diverted;
+ local $/ = "\r\n";
+ chomp $headers;
+ };
+ print $headers;
+ chdir("$config{wikistatedir}/xapian") || error("chdir: $!");
+ $ENV{OMEGA_CONFIG_FILE}="./omega.conf";
+ $ENV{CGIURL}=IkiWiki::cgiurl();
+ $ENV{REQUEST_METHOD}='GET';
+ $ENV{QUERY_STRING}=$cgi->query_string();
+ IkiWiki::loadindex();
+ $ENV{HELPLINK}=htmllink("", "", "ikiwiki/searching",
+ noimageinline => 1, linktext => "Help");
+ exec($config{omega_cgi}) || error("$config{omega_cgi} failed: $!");
+ }