Name: RequestLog FullName: HTTP Request Header Field Body logging URI: IW:SuikaWiki:"Wiki//UserAgentList" Description: Implementation of this module is temporary. Reimplementation is needed! MODULE: our $LoggingName; sub add ($$) { my ($name, $s) = @_; return unless length $s; $s =~ s/([^\x20-\x24\x26-\x7E])/sprintf '%%%02X', unpack 'C', $1/ge; my %ua; for (split /\n/, $main::database{$main::PageName{'Log_'.$name}}) { if (/^-\{(\d+)\} (.+)$/) { my ($t, $n) = ($1, $2); $n =~ tr/\x0A\x0D//d; $ua{$n} = $t; } } $ua{$s}++; my $s = qq(#?SuikaWiki/0.9 interactive="yes"\n); for (sort {$ua{$a} <=> $ua{$b}} keys %ua) { $s .= sprintf qq(-{%d} %s\n), $ua{$_}, $_; } SuikaWiki::Plugin->_database->STORE ($main::PageName{'Log_'.$name} => $s, -touch => 0); } my $year = (gmtime)[5] + 1900; my @fields = ( [qw/ACCEPT AcceptType/], [qw/ACCEPT_CHARSET AcceptCharset/], [qw/ACCEPT_ENCODING AcceptEncoding/], [qw/ACCEPT_LANGUAGE AcceptLanguage/], [qw/TE AcceptTransferEncoding/], [qw/CONNECTION Connection/], [qw/ACCEPT_GEO AcceptGeo/], [qw/KEEP_ALIVE KeepAlive/], [qw/MIME_VERSION MIMEVersion/], [qw/UA_COLOR UserAgentDisplayColor/], [qw/UA_CPU UserAgentCPU/], [qw/UA_OS UserAgentOS/], [qw/UA_PIXELS UserAgentDisplaySize/], [qw/CACHE_CONTROL CacheControl/], [qw/PRAGMA Pragma/], [qw/IF_MODIFIED_SINCE IMS/], [qw/XONNECTION Xonnection:/], [qw/XROXY_CONNECTION Xroxy-Connection:/], [qw/UNLESS_MODIFIED_SINCE Unless-Modified-Since:/], [qw/XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX:/], [qw/XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX:/], [qw/RANGE Range:/], [qw/REQUEST_RANGE Request-Range:/], [qw/FROM From:/], [qw/DATE Date:/], [qw/CONTENT_TRANSFER_ENCODING CTE/], [qw/CONTENT_LANGUAGE Content-Language:/], [qw/CONTENT_DISPOSITION Content-Disposition:/], [qw/REFERRER Referrer:/], # [qw/ /], # [qw/ /], # [qw/ /], # [qw/ /], # [qw/ /], ); for (@fields) { $main::PageName{'Log_'.$_->[0]} = 'Wiki//Log//'.$_->[1].'//'.$year; } $main::PageName{Log_CONTENT_TYPE} = 'Wiki//Log//ContentType//'.$year; $main::PageName{Log_REQUEST_METHOD} = 'Wiki//Log//RequestMethod//'.$year; push @{$SuikaWiki::Plugin::On{WikiDatabaseLoaded}}, sub { for (map {$_->[0]} @fields) { my $s = $main::ENV{'HTTP_'.$_}; if ({qw/IF_MODIFIED_SINCE 1 DATE 1 UNLESS_MODIFIED_SINCE 1/}->{$_}) { $s =~ s/(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/[VAR[**]]:[VAR[**]]:[VAR[**]]/; $s =~ s/, (?:[012][0-9]|3[01])(?=[ -])/, [VAR[**]]/; $s =~ s/length=[0-9]+/length=[VAR[*]]/; } add ($_ => $s); } add ('CONTENT_TYPE' => $main::ENV{CONTENT_TYPE}); add ('REQUEST_METHOD' => $main::ENV{REQUEST_METHOD}); }; POD:TO DO: - better storing format - Logging method should be more customizable (what mode? what's except?...) POD:LICENSE: Copyright 2003 Wakaba %%GNUGPL2%%