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';
$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 {
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");
+ }
+ }
}
}
# 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;
}
$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');
# 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');
# 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
# 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');
############################################################
#
$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);
$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');
$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');
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');