Clustericious
view release on metacpan or search on metacpan
lib/Clustericious/App.pm view on Meta::CPAN
package Clustericious::App;
use strict;
use warnings;
use 5.010;
use List::Util qw( first );
use MojoX::Log::Log4perl;
use Mojo::UserAgent;
use Data::Dumper;
use Clustericious::Log;
use Mojo::URL;
use Scalar::Util qw( weaken );
use Mojo::Base 'Mojolicious';
use File::Glob qw( bsd_glob );
use File::Path qw( mkpath );
use Carp qw( croak carp );
use Clustericious;
use Clustericious::Controller;
use Clustericious::Config;
use Clustericious::Commands;
use Path::Class::Dir;
# ABSTRACT: Clustericious app base class
our $VERSION = '1.29'; # VERSION
has commands => sub {
my $commands = Clustericious::Commands->new(app => shift);
weaken $commands->{app};
return $commands;
};
sub startup {
my $self = shift;
$self->init_logging();
$self->plugins->namespaces(['Clustericious::Plugin','Mojolicious::Plugin']);
$self->controller_class('Clustericious::Controller');
$self->renderer->classes(['Clustericious::App']);
# this is questionable
my $home = $self->home;
$self->renderer->paths([ Path::Class::Dir->new($home)->subdir('templates')->stringify ]);
$self->plugin('CommonRoutes');
$self->plugin('AutodataHandler');
$self->plugin('ClustericiousHelpers');
@{ $self->static->paths } = (
Clustericious
->_dist_dir
->subdir(qw( www 1.08 ))
->stringify
);
my $config = $self->config;
my $auth_plugin;
if(my $auth_config = $config->plug_auth(default => '')) {
$self->log->info("Loading auth plugin plug_auth");
my $name = 'plug_auth';
if(ref($auth_config) && $auth_config->{plugin})
{ $name = $auth_config->{plugin} }
$auth_plugin = $self->plugin($name, plug_auth => $auth_config);
} else {
$self->log->info("No auth configured");
}
$self->startup_route_builder($auth_plugin) if $self->can('startup_route_builder');
my $url = $config->url(default => '') or do {
$self->log->warn("Configuration file should contain 'url'.");
};
$self->hook( before_dispatch => sub {
Log::Log4perl::MDC->put(remote_ip => shift->tx->remote_address || 'unknown');
});
if ( my $cors_allowed_origins = $config->cors_allowed_origins( default => '' ) ) {
$self->hook(
after_dispatch => sub {
my $c = shift;
$c->res->headers->add( 'Access-Control-Allow-Origin' => $cors_allowed_origins );
$c->res->headers->add( 'Access-Control-Allow-Headers' => 'Authorization' );
}
);
}
}
( run in 2.580 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )