/[pub]/suikawiki/wikidata/suikawiki-config.ph
Suika

Diff of /suikawiki/wikidata/suikawiki-config.ph

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.12.4.6 by wakaba, Mon Mar 29 03:23:15 2004 UTC revision 1.19 by wakaba, Sun Jul 25 06:55:01 2004 UTC
# Line 27  use strict; Line 27  use strict;
27    }    }
28    use Message::Util::Error;    use Message::Util::Error;
29    
30    use Message::Util::QName::General [q<ExpandedURI>], {
31      'log' => q<http://suika.fam.cx/~wakaba/-temp/2004/05/01/reqlog#>,
32      'media-type' => q<http://suika.fam.cx/~wakaba/-temp/2004/04/24/mt#>,
33      'pe' => q<http://suika.fam.cx/~wakaba/archive/2004/7/20/sw-propedit#>,
34      'relrev' => q<http://suika.fam.cx/~wakaba/archive/2004/7/25/html-relrev#>,
35      'ss' => q<http://suika.fam.cx/~wakaba/archive/2004/05/sw-stylesheet#>,
36      'sw' => q<http://suika.fam.cx/~wakaba/archive/2004/7/20/sw#>,
37      'sw09' => q<http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki%2F0.9#>,
38    };
39    
40    BEGIN {
41      if ($main::ENV{REQUEST_URI} =~ /\#/) {
42        require SuikaWiki::Output::HTTP;
43        my $out = SuikaWiki::Output::HTTP->new;
44        $out->{status_code} = 401;
45        $out->{status_phrase} = q<Request-URI MUST NOT have Fragment Identifier>;
46        $out->{entity}->{media_type} = q<text/html>;
47        $out->{entity}->{charset} = q<iso-8859-1>;
48        $out->{entity}->{language} = [q<en>];
49        $out->{entity}->{body_is_octet_stream} = 1;
50        my $ua = $main::ENV{HTTP_USER_AGENT};
51        for ($ua) {
52          s/&/&amp;/g; s/</&lt;/g; s/([^\x20-\x7E])/sprintf '&#x%02X;', ord $1/ge;
53        };
54        $out->{entity}->{body} = qq<
55          <!DOCTYPE html SYSTEM>
56          <title>401 Bad Request-URI</title>
57          <h1>Bad Request-URI</h1>
58          <p>Your Request-URI has fragment identifier but it is not allowed here.
59          It might be a bug of your user agent ($ua).  Please contact to the UA
60          vendor.</p>
61        >;
62        $out->output (output => 'http-cgi');
63        exit;
64      }
65    }
66    
67  push our @Config, sub ($) {  push our @Config, sub ($) {
68    my $WIKI = shift;    my $WIKI = shift;
69    use Cwd qw(abs_path);    use FindBin q($Bin);
70      use File::Spec;
71        
72    ## -- Filesystem path mapping    ## -- Filesystem path mapping
73    for (    for (
74       [db__cache__dir          => q"./wikidata/lock/"],       [db__cache__dir          => q"./wikidata/cache/"],
75       [db__cache_struct__file  => q"./wikidata/lock/struct.db"],       [db__cache_struct__file  => q"./wikidata/cache/struct.db"],
76       [db__content__dir        => q"./wikidata/page/"],       [db__content__dir        => q"./wikidata/page/"],
77       [db__content__error_log  => q"./wikidata/log/db-content.log"],       [db__content__error_log  => q"./wikidata/log/db-content.log"],
78       [db__bdb__home_dir       => q"./wikidata/lock/"],       [db__bdb__home_dir       => q"./wikidata/lock/"],
# Line 44  push our @Config, sub ($) { Line 82  push our @Config, sub ($) {
82       [db__lock__dir           => q"./wikidata/lock/"],       [db__lock__dir           => q"./wikidata/lock/"],
83       [db__lock__log_file      => q"./wikidata/log/lock.log"],       [db__lock__log_file      => q"./wikidata/log/lock.log"],
84       [db__log__dir            => q"./wikidata/log/"],       [db__log__dir            => q"./wikidata/log/"],
85         [db__request_log__dir    => q"./wikidata/rlog/"],
86         [db__static__dir         => q"./wikidata/static/"],
87       [db__temp__dir           => q"./wikidata/lock/"],       [db__temp__dir           => q"./wikidata/lock/"],
88       [namazu__index_dir       => q"/var/namazu/index/suikawiki"],       [namazu__index_dir       => q"/var/namazu/index/suikawiki"],
89    ) {    ) {
90      ## On system that does not set current directory as main script      ## On system that does not set current directory as main script
91      ## directory, you should specify it instead of using "abs_path".      ## directory, you should specify it instead of using "abs_path".
92      $WIKI->{config}->{path_to}->{$_->[0]} = abs_path $_->[1];      $WIKI->{config}->{path_to}->{$_->[0]} = File::Spec->rel2abs ($_->[1], $Bin);
93    }    }
94        
95    ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --    ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
# Line 92  push our @Config, sub ($) { Line 132  push our @Config, sub ($) {
132                
133        ## Main content        ## Main content
134        $wiki->{db}->_set_prop_db (content => {-db_open => sub {        $wiki->{db}->_set_prop_db (content => {-db_open => sub {
135          require SuikaWiki::DB::FileSystem::YukiWikiDBNS;          require SuikaWiki::DB::FileSystem::LeafFile;
136          SuikaWiki::DB::FileSystem::YukiWikiDBNS->new          SuikaWiki::DB::FileSystem::LeafFile->new
137            (directory => $wiki->{config}->{path_to}->{db__content__dir},            (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
138             logfile   => $wiki->{config}->{path_to}->{db__content__error_log},             directory_suffix => '.ns',
139             suffix    => '.txt',             file_suffix    => '.txt',
140               root_key => $wiki->{config}->{page}->{Default},
141             -lock => $wiki->{var}->{db}->{lock_prop}->('content'));             -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
142        }, -db_close => sub {        }, -db_close => sub {
143          my %opt = @_;          my %opt = @_;
144          $opt{prop_info}->{-db}->close;          $opt{prop_info}->{-db}->close;
145          delete $opt{prop_info}->{-db};          delete $opt{prop_info}->{-db};
146        }});        }});
147    
148          ## Properties
149          $wiki->{db}->_set_prop_db (content_prop => {-db_open => sub {
150            require SuikaWiki::DB::FileSystem::LeafProp;
151            SuikaWiki::DB::FileSystem::LeafProp->new
152              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
153               directory_suffix => '.ns',
154               file_suffix    => '.prop',
155               root_key => $wiki->{config}->{page}->{Default},
156               -lock => $wiki->{var}->{db}->{lock_prop}->('content_prop'));
157          }, -db_close => sub {
158            my %opt = @_;
159            $opt{prop_info}->{-db}->close;
160            delete $opt{prop_info}->{-db};
161          }});
162                
163        ## Last modified        ## Last modified
164        $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {        $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
# Line 116  push our @Config, sub ($) { Line 172  push our @Config, sub ($) {
172          delete $opt{prop_info}->{-db};          delete $opt{prop_info}->{-db};
173        }});        }});
174                
175          ## Static version
176          $wiki->{db}->_set_prop_db (static__css => {-db_open => sub {
177            require SuikaWiki::DB::FileSystem::LeafFileP;
178            SuikaWiki::DB::FileSystem::LeafFileP->new
179              (base_directory => $wiki->{config}->{path_to}->{db__static__dir},
180               directory_suffix => '.ns',
181               file_suffix    => '.css',
182               root_key => $wiki->{config}->{page}->{Default});
183          }, -db_close => sub {
184            my %opt = @_;
185            $opt{prop_info}->{-db}->close;
186            delete $opt{prop_info}->{-db};
187          }});
188          $wiki->{config}->{ExpandedURI q<ss:use-static>} = 1;
189          ## URI maker for LeafFileP generated files
190          $wiki->{config}->{ExpandedURI q<ss:wikiname-to-uri>} = sub {
191            my (undef, %opt) = @_;
192            my $page = join '.ns/',
193                       map {s/([^0-9A-Za-z_-])/sprintf '+%02X', ord $1/ge;$_}
194                       @{$opt{wikiname}};
195            return URI->new ('wikidata/static/' . $page . '.css');
196          };
197          ## Reverse mapping of generate-uri
198          $wiki->{config}->{ExpandedURI q<ss:uri-to-wikiname>} = sub {
199            my (undef, %opt) = @_;
200            $opt{uri} =~ s!^.+/wikidata/static/!!g;
201            $opt{uri} =~ s/\?[^?]*$//g;
202            $opt{uri} =~ s/\.css$//g;
203            return $opt{wiki}->name
204              ([map {s/\+([0-9A-Fa-f_-][0-9A-Fa-f_-])/pack 'CC', hex $1/ge;$_}
205                split m!.ns/!, $opt{uri}]);
206          };
207    
208    
209        ## Cache DBs        ## Cache DBs
210        require SuikaWiki::DB::FileSystem::SuikaWikiCache09;        require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
211        my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new        my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
# Line 169  push our @Config, sub ($) { Line 259  push our @Config, sub ($) {
259                
260        ## Referer Database (See Referer plugin module)        ## Referer Database (See Referer plugin module)
261        $wiki->{db}->_set_prop_db (referer => {-db_open => sub {        $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
262          require SuikaWiki::DB::Hash;          require SuikaWiki::DB::FileSystem::Count;
263          new SuikaWiki::DB::Hash constructor => sub {          SuikaWiki::DB::FileSystem::Count->new
264            tie my %db, 'BerkeleyDB::Hash',            (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
265                          -Filename => 'referer.db',             directory_suffix => '.ns',
266                          -Env => $bdbenv,             file_suffix    => '.ref',
267                          -Flags => DB_CREATE,             root_key => $wiki->{config}->{page}->{Default},
268                          -Mode => 0644;             auto_mkdir => 0,
269            \%db;             -lock => $wiki->{var}->{db}->{lock_prop}->('referer'));
270         };        }, -db_close => sub {
271            my %opt = @_;
272            $opt{prop_info}->{-db}->close;
273            delete $opt{prop_info}->{-db};
274        }});        }});
275    
276        ## HTTP Request Logging Database (See RequestLog plugin module)        ## HTTP Request Logging Database (See RequestLog plugin module)
277        $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {        $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
278          require SuikaWiki::DB::Hash;          require SuikaWiki::DB::FileSystem::Count;
279          new SuikaWiki::DB::Hash constructor => sub {          SuikaWiki::DB::FileSystem::Count->new
280            tie my %db, 'BerkeleyDB::Hash',            (base_directory => $wiki->{config}->{path_to}->{db__request_log__dir},
281                          -Filename => 'http-request-log.db',             directory_suffix => '.ns',
282                          -Env => $bdbenv,             file_suffix    => '.rlog',
283                          -Flags => DB_CREATE,             root_key => $wiki->{config}->{page}->{Default},
284                          -Mode => 0644;             auto_mkdir => 1);
285            \%db;        }, -db_close => sub {
286         };          my %opt = @_;
287            $opt{prop_info}->{-db}->close;
288            delete $opt{prop_info}->{-db};
289        }});        }});
290                
291        ## Additional WikiDB properties should be defined here        ## Additional WikiDB properties should be defined here
# Line 200  push our @Config, sub ($) { Line 295  push our @Config, sub ($) {
295    push @{$WIKI->{event}->{input_close}}, sub {    push @{$WIKI->{event}->{input_close}}, sub {
296      my ($wiki, $event) = @_;      my ($wiki, $event) = @_;
297      try {      try {
       SuikaWiki::Plugin->module_package ('Referer')  
                      ->add_referer (wiki => $wiki,  
                                     uri => $wiki->{input}->meta_variable  
                                              ('HTTP_REFERER'));  
     } catch SuikaWiki::Plugin::error with {  
       my $err = shift;  
       $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';  
     };  
     try {  
298        SuikaWiki::Plugin->module_package ('RequestLog')        SuikaWiki::Plugin->module_package ('RequestLog')
299                       ->http_request_log (wiki => $wiki,                       ->http_request_log (wiki => $wiki,
300                                           prop => 'log__http_request');                                           prop => 'log__http_request');
# Line 218  push our @Config, sub ($) { Line 304  push our @Config, sub ($) {
304      };      };
305    };    };
306    
307      $WIKI->{config}->{engine_max_access} = 15;
308    
309    ## -- WikiName of special purpose WikiPages    ## -- WikiName of special purpose WikiPages
310    $WIKI->{config}->{page} = {    $WIKI->{config}->{page} = {
311      Default         => $WIKI->name ([qw/HomePage/]),      Default         => $WIKI->name ([qw/HomePage/]),
312      InterWikiName   => $WIKI->name ([qw/Wiki InterWikiName/]),      InterWikiName   => $WIKI->name ([qw/Wiki InterWikiName/]),
313      NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),      NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
314      'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),      'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
315        ExpandedURI q<log:root> => $WIKI->name ([]),
316    };    };
317        
318    ## -- WikiNamespace constants    ## -- WikiNamespace constants
# Line 232  push our @Config, sub ($) { Line 321  push our @Config, sub ($) {
321      separator_reg => qr#\s*//\s*#,      separator_reg => qr#\s*//\s*#,
322      self => '.',      self => '.',
323      parent => '..',      parent => '..',
324        root => '//',
325    };    };
326        
327    ## -- Default character codes    ## -- Default character codes
# Line 250  push our @Config, sub ($) { Line 340  push our @Config, sub ($) {
340      ## Fragment identifier in URI reference      ## Fragment identifier in URI reference
341        uri_fragment => 'x-punycode',     ## Reserved for possible future use        uri_fragment => 'x-punycode',     ## Reserved for possible future use
342    };    };
343    
344      ## -- User option for media types
345      $WIKI->{config}->{ExpandedURI q<media-type:accept-media-type>} = {
346        q<IMT:text/css##> => 1,
347        q<IMT:text/plain##> => 1,
348        q<IMT:text/x-suikawiki;version="0.9"##> => 1,
349        q<IMT:application/x.suikawiki.config;version="2.0"##> => 1,
350      };
351        
352    ## -- Expires duration templates    ## -- Expires duration templates
353    $WIKI->{config}->{entity}->{expires} = {    $WIKI->{config}->{entity}->{expires} = {
354      edit      => {delta => 60},      edit      => {delta => 60},
355      view      => {delta => 2*3600},      view      => {delta => 2*3600},
356        list      => {delta => 60},
357      lm_flaged => {delta => 30*24*3600},      lm_flaged => {delta => 30*24*3600},
358      stylesheet => {delta => 30*24*3600},      stylesheet => {delta => 30*24*3600},
359      error     => {delta => 60},      error     => {delta => 60},
360    };    };
361    
362      ## -- User-editable content properties
363      $WIKI->{config}->{ExpandedURI q<pe:prop>} = {
364        'abstract' => {uri => ExpandedURI q<sw:abstract>},
365        'abstract--type' => {uri => ExpandedURI q<sw:abstract--type>,
366                             type => ExpandedURI q<media-type:media-type>,
367                             depend => [qw/abstract/]},
368        'category' => {uri => ExpandedURI q<sw:category>, is_list => 1},
369        'keyword' => {uri => ExpandedURI q<sw:keyword>, is_list => 1},
370        'obsoleted' => {uri => ExpandedURI q<sw09:obsoleted>},
371        'rel-contents' => {uri => ExpandedURI q<relrev:contents>},
372        'rel-index' => {uri => ExpandedURI q<relrev:index>},
373        'rel-next' => {uri => ExpandedURI q<relrev:next>},
374        'rel-prev' => {uri => ExpandedURI q<relrev:prev>},
375        'rel-up' => {uri => ExpandedURI q<relrev:up>},
376      };
377    
378    ## -- Debug mode    ## -- Debug mode
379    $WIKI->{config}->{debug} = {    $WIKI->{config}->{debug} = {
380      general => 0,      general => 0,

Legend:
Removed from v.1.12.4.6  
changed lines
  Added in v.1.19

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24