#!/usr/bin/perl -w # # main cgiscript for yawex # # $Header: /var/local/cvs/yawex/bin/yawex.pl,v 1.3 2004/10/03 14:24:08 bernd Exp $ # use strict; use CGI qw/:standard/; use CGI::Carp 'fatalsToBrowser'; $CGI::POST_MAX=1024 * 100; # max 100k POSTs $CGI::DISABLE_UPLOADS = 1; # no uploads use Yawex::PageLookUp; use Yawex::PageActions; use Yawex::Page; use Yawex::Auth; use Yawex::Errors; use Yawex::Debug; use Conf::TestWiki; print header(); #die und warn sauber abhandeln $SIG{__DIE__} = $SIG{__WARN__} = sub { Yawex::Errors::handler(@_); }; #laufzeit begrenzen alarm(20); #check for POST size error my $dummy = param('dummy'); if (cgi_error()) { print header(-status => cgi_error()); exit 0; } #arbeitsverzeichnis setzen chdir "testwiki" || chdir "/var/www/bernd-worsch.de/friendswiki/pages" || chdir "/var/www/testwiki/pages" || instant_install(); #umask setzen umask 0000; #request hash initialisieren # #simpler wäre es mit der CGI param() Funktion weiter zu arbeiten. #kann aber nicht sagen wie ich dann action und page parameter #modifiziert bekomme :( # my %request = (); foreach (param()) { $request{$_} = param($_); } $request{'full_url'} = url(); $request{'relative_url'} = url(-relative=>1); $request{'absolute_url'} = url(-absolute=>1); $request{'url_with_path'} = url(-path_info=>1); $request{'url_with_path_and_query'} = url(-path_info=>1, -query=>1); $request{'netloc'} = url(-base=>1); $request{'referer'} = referer() || $Conf::default_referer; $request{'user'} = Yawex::Auth::resolve_user(remote_user()); $request{'debug'} = param('debug'); unless ($request{'debug'} && ($request{'debug'} == 1)) { if ($request{'referer'} =~ /debug=1/) { $request{'debug'} = 1; } } Yawex::Debug::show_request(\%request, "raw") if $request{'debug'}; sub instant_install { print "Welcome to Yawex!"; print header(), "Sorry 'instant_install()' not implemented. Exiting!"; exit 0; } sub lastpage { my $result; if ($request{'referer'} =~ /page=([^&]+)/) { $result = $1; } else { $result = "UnknownPage"; #fake name of lastpage if necessary } if (-d $result) { $result .= "/$result"; } return $result; } # resolve action and page (needs cleanup) if ($request{'relative_url'} eq 'register') { $request{'page'} = "NewUser"; $request{'relative_url'} = $Conf::publicurl; } elsif (exists $request{'form_quicksearch'} && $request{'form_quicksearch'}) { #todo: jump to page if appropriate #$request{'page'} = $request{'form_quicksearch'}; #$request{'action'} = "open"; $request{'page'} = Yawex::Page::topic($request{'page'}) . "/SearchPage"; $request{'action'} = "open"; delete $request{'form-button'}; } else { $request{'page'} = param('page') || param('newpage'); } $request{'lastpage'} = lastpage(); Yawex::Debug::show_request(\%request, "1") if $request{'debug'}; Yawex::PageActions::resolve_action(\%request); Yawex::Debug::show_request(\%request, "action resolved") if $request{'debug'}; my $original_page = $request{'page'}; ($request{'state'}, $request{'page'}) = Yawex::PageLookUp::lookup_page($request{'page'}, $request{'lastpage'}); if ($request{'state'} == 8) { # do not change to virtual pages $request{'virtualpage'} = $request{'page'}; $request{'page'} = $original_page; } Yawex::Debug::show_request(\%request, "page resolved") if $request{'debug'}; # what to do when page resolution failed if ($request{'state'} == 0 && $request{'action'} ne 'create') { $request{'action'} = 'new'; Yawex::Debug::show_request(\%request, "unknown page") if $request{'debug'}; } eval('Yawex::PageActions::action_'.$request{'action'}.'(\%request)');