OSDN Git Service

Plugin::Stories: add storiees->latest helper
[newslash/newslash.git] / src / newslash_web / lib / Newslash / Web.pm
index be8016d..a497974 100644 (file)
@@ -1,16 +1,19 @@
 package Newslash::Web;
 use Mojo::Base 'Mojolicious';
 use Mojo::Util qw(dumper);
-
-use Newslash::Model;
 use List::Util qw(any);
 
 use constant CONFIG_FILE => '/etc/newslash/newslash.conf';
+has subcommand => "";
 
 # This method will run once at server start
 sub startup {
     my $app = shift;
 
+    if ($ARGV[0]) {
+        $app->subcommand($ARGV[0]);
+    }
+
     # add commands in Newslash::Command
     push @{$app->commands->namespaces}, 'Newslash::Command';
 
@@ -20,7 +23,7 @@ sub startup {
         $app->plugin('Newslash::Plugin::YAMLConfig', file => CONFIG_FILE);
     }
     else {
-       if ($ARGV[0] && $ARGV[0] eq "configdump") {
+       if ($app->subcommand eq "configdump") {
            $app->plugin('Newslash::Plugin::YAMLConfig', default => {});
        }
        else {
@@ -38,41 +41,49 @@ sub startup {
         Carp::Always->import;
     }
 
-    # set log file
+    # system log config
     if ($app->config->{Log} && $app->config->{Log}->{system_log}) {
-        # check log is writable
-        my $pathname = $app->config->{Log}->{system_log};
-        if (-e $pathname) {
-            if (-w $pathname) {
-                $app->log->debug("logs will be outputed to $pathname ...");
-                $app->log(Mojo::Log->new);
-                $app->log->path($pathname);
-            }
-            else {
-                $app->log->error("cannot write system log to file: $pathname");
-            }
-        }
-        else {
-            if (open(my $fh, ">", $pathname)) {
-                close($fh);
-                $app->log->debug("logs will be outputed to $pathname ...");
-                $app->log(Mojo::Log->new);
-                $app->log->path($pathname);
-            }
-            else {
-                $app->log->error("cannot create system log file: $pathname");
-            }
-        }
-    }
+       my $cnf = $app->config->{Log}->{system_log};
+
+       # set log level
+       if ($cnf->{level}) {
+           my $loglv = $cnf->{level};
+           if (grep { $loglv eq $_ } qw(debug info warn error fatal)) {
+               $app->log->level($loglv);
+           }
+           else {
+               $app->log->warn('invalid log level given in config file');
+           }
+       }
 
-    # set log level
-    if ($app->config->{Log} && $app->config->{Log}->{level}) {
-        my $loglv = $app->config->{Log}->{level};
-        if (grep { $loglv eq $_ } qw(debug info warn error fatal)) {
-            $app->log->level($loglv);
-        }
-        else {
-            $app->log->warn('invalid log level given in config file');
+       # file output settings
+       if ($cnf->{mode} eq "local_file") {
+           my $pathname = $cnf->{local_file};
+           # check log is writable
+           if (!$pathname) {
+               $app->log->error("cannot write system log to file: filename not given");
+           }
+           elsif (-e $pathname) {
+               if (-w $pathname) {
+                   $app->log->debug("logs will be outputed to $pathname ...");
+                   $app->log(Mojo::Log->new);
+                   $app->log->path($pathname);
+               }
+               else {
+                   $app->log->error("cannot write system log to file: $pathname");
+               }
+           }
+           else {
+               if (open(my $fh, ">", $pathname)) {
+                   close($fh);
+                   $app->log->debug("logs will be outputed to $pathname ...");
+                   $app->log(Mojo::Log->new);
+                   $app->log->path($pathname);
+               }
+               else {
+                   $app->log->error("cannot create system log file: $pathname");
+               }
+           }
         }
     }
 
@@ -91,8 +102,10 @@ sub startup {
 
     # check if 'maintenance' mode
     my $maintenance_mode = 0;
-    if ($ARGV[0]
-       && any { $ARGV[0] eq $_ } qw[databaseinit configdump]) {
+    if ($app->subcommand
+        && any { $app->subcommand eq $_ } qw[configdump configimport databaseinit
+                                             testdatainsert useradd usermod
+                                           ]) {
        $maintenance_mode = 1;
     }
 
@@ -130,26 +143,7 @@ sub startup {
     $app->plugin('Newslash::Plugin::KeyValueStore');
 
     # add Model Loader
-    my $readonly = $app->config->{System} ? $app->config->{System}->{readonly} : 0;
-    $app->helper(model => Newslash::Model::loader($app->config,
-                                                 logger => $app->log,
-                                                 readonly => $readonly,
-                                                ));
-    $app->helper(db => sub { state $db = Newslash::Model::Base->new($app->config,
-                                                                   logger => $app->log,
-                                                                   readonly => $readonly
-                                                                  ); });
-
-    if ($maintenance_mode) {
-        $app->log->info("bypassing model startup...");
-    }
-    else {
-        Newslash::Model::startup($app->config,
-                                $app,
-                                logger => $app->log,
-                                readonly => $readonly,
-                               );
-    }
+    $app->plugin('Newslash::Plugin::Model', { bypass_startup => $maintenance_mode });
 
     # use Easy Cache ($app->ezcache)
     $app->plugin('Newslash::Plugin::EasyCache');
@@ -157,6 +151,9 @@ sub startup {
     # use Template::Toolkit 2 render
     $app->plugin('Newslash::Plugin::TT2Renderer');
 
+    # use ResponseFilter (Faculities)
+    $app->plugin('Newslash::Plugin::ResponseFilter');
+
     # use CustomBoxes
     $app->plugin('Newslash::Plugin::CustomBoxes');
 
@@ -175,10 +172,10 @@ sub startup {
     # javascript loader
     $app->plugin('Newslash::Plugin::JavaScriptLoader');
     if ($maintenance_mode) {
-        $app->log->info("bypassing javasciprt loading...");
+        $app->log->info("bypassing javascriptloader...");
     }
     else {
-       $app->javascript_loader->load_all;
+       $app->javascript_loader->load_all_bundles;
     }
 
     # user authorization
@@ -214,6 +211,17 @@ sub startup {
     # AD renderer
     $app->plugin('Newslash::Plugin::ADRenderer');
 
+    # HTTP Compression
+    $app->plugin('Newslash::Plugin::HttpCompression');
+
+    # Users helper
+    $app->plugin('Newslash::Plugin::Users');
+
+    # Stories helper
+    $app->plugin('Newslash::Plugin::Stories');
+
+    # Sendmail helper
+    $app->plugin('Newslash::Plugin::Sendmail');
 
     ############################################################
     #
@@ -232,6 +240,9 @@ sub startup {
     $r->get('/submissions')->to('timeline#submissions');
     $r->get('/polls')->to('timeline#polls');
 
+    # RSS
+    $r->get('/rss/sradjp' => [format => ['rss', 'xml']])->to('rss#sradjp');
+
     # Banned page
     $r->get('/banned')->to('index#banned', noindex => 1);
 
@@ -240,10 +251,6 @@ sub startup {
     $r->post('/login')->to('login#login');
     $r->get('/logout')->to('login#logout');
 
-    # User Register
-    $r->get('/my/newuser')->to('login#newuser');
-    $r->post('/my/newuser')->to('login#newuser', captcha_check => 1);
-
     # story page
     $r->get('/story/:sid/' => [sid => qr|\d\d/\d\d/\d\d/\d+|])
       ->to('story#single');
@@ -292,6 +299,16 @@ sub startup {
     $r->get('/my/messages')->to('my#messages', seclev => 1);
     $r->get('/my/')->to('user#home', seclev => 1);
 
+    # User Register
+    $r->get('/my/newuser')->to('login#newuser');
+    $r->post('/my/newuser')->to('login#newuser', captcha_check => 1);
+    $r->get('/my/activation')->to('login#activation');
+    $r->get('/my/resetpassword')->to('login#reset_password');
+    $r->post('/my/resetpassword')->to('login#reset_password', captcha_check => 1);
+
+    # Change Email
+    $r->get('/my/change_email')->to('my#change_email', seclev => 1);
+
     # search page
     $r->get('/search')->to('search#search');
 
@@ -341,6 +358,10 @@ sub startup {
     my $api = $r->under('/api/v1');
     $api->post('/login')->to('API::Login#login');
 
+    $api->post('/newuser/validate')->to('API::User#validate_new_user');
+    $api->post('/newuser/create')->to('API::User#create_new_user');
+    $api->post('/newuser/password')->to('API::User#newuser_password');
+
     $api->get('/sidebar/item')->to('API::SidebarItem#get', seclev => 1);
 
     $api->get('/comment')->to('API::Comment#get');