You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-panel/lib/NGCP/Panel.pm

178 lines
5.3 KiB

package NGCP::Panel;
use Moose;
use Catalyst::Runtime 5.80;
# Set flags and add plugins for the application.
#
# Note that ORDERING IS IMPORTANT here as plugins are initialized in order,
# therefore you almost certainly want to keep ConfigLoader at the head of the
# list if you're using it.
#
# -Debug: activates the debug mode for very useful log messages
# ConfigLoader: will load the configuration from a Config::General file in the
# application's home directory
# Static::Simple: will serve static files from the application's root
# directory
use Catalyst qw/
ConfigLoader
Static::Simple
Authentication
Authorization::Roles
EnableMiddleware
Session
Session::Store::FastMmap
Session::State::Cookie
/;
use Log::Log4perl::Catalyst qw();
use NGCP::Panel::Cache::Serializer qw();
use NGCP::Panel::Middleware::HSTS qw();
#use NGCP::Panel::Middleware::TEgzip qw();
extends 'Catalyst';
our $VERSION = '0.01';
my $panel_config;
for my $path(qw#/etc/ngcp-panel/ngcp_panel.conf etc/ngcp_panel.conf ngcp_panel.conf#) {
if(-f $path) {
$panel_config = $path;
last;
}
}
$panel_config //= 'ngcp_panel.conf';
my $logger_config = '/etc/ngcp-ossbss/logging.conf';
$logger_config = $panel_config unless(-f $logger_config);
__PACKAGE__->config(
name => 'NGCP::Panel',
# Disable deprecated behavior needed by old applications
disable_component_resolution_regex_fallback => 1,
enable_catalyst_header => 1, # Send X-Catalyst header
encoding => 'UTF-8',
'Plugin::ConfigLoader' => {
file => $panel_config,
},
'View::HTML' => {
INCLUDE_PATH => [
'/usr/share/ngcp-panel/templates',
'/usr/share/ngcp-panel/layout',
'/usr/share/ngcp-panel/static',
__PACKAGE__->path_to('share', 'templates'),
__PACKAGE__->path_to('share', 'layout'),
__PACKAGE__->path_to('share', 'static'),
],
ABSOLUTE => 1,
EVAL_PERL => 1,
},
'View::JSON' => {
#Set the stash keys to be exposed to a JSON response
#(sEcho iTotalRecords iTotalDisplayRecords aaData) for datatables
expose_stash => [ qw(sEcho iTotalRecords iTotalDisplayRecords aaData) ],
},
'Plugin::Static::Simple' => {
include_path => [
'/usr/share/ngcp-panel/static',
__PACKAGE__->path_to('share', 'static'),
],
mime_types => {
woff => 'application/x-font-woff',
},
},
session => {
flash_to_stash => 1,
expires => 3600,
},
'Plugin::Authentication' => {
default => {
credential => {
class => 'Password',
password_field => 'password',
password_type => 'clear'
},
store => {
class => 'Minimal',
users => {
}
}
},
reseller => {
credential => {
class => 'Password',
password_field => 'md5pass',
password_type => 'hashed',
password_hash_type => 'MD5'
},
store => {
class => 'DBIx::Class',
user_model => 'DB::admins',
id_field => 'id',
store_user_class => 'NGCP::Panel::AuthenticationStore::RoleFromRealm',
use_userdata_from_session => 1,
}
},
admin => {
credential => {
class => 'Password',
password_field => 'md5pass',
password_type => 'hashed',
password_hash_type => 'MD5'
},
store => {
class => 'DBIx::Class',
user_model => 'DB::admins',
id_field => 'id',
store_user_class => 'NGCP::Panel::AuthenticationStore::RoleFromRealm',
use_userdata_from_session => 1,
}
},
api_admin => {
# TODO: should be NoPassword, but it's not available in our catalyst version yet
credential => {
class => 'Password',
password_field => 'is_superuser',
password_type => 'clear',
},
store => {
class => 'DBIx::Class',
user_model => 'DB::admins',
id_field => 'id',
store_user_class => 'NGCP::Panel::AuthenticationStore::RoleFromRealm',
},
use_session => 0,
},
subscriber => {
credential => {
class => 'Password',
password_field => 'webpassword',
password_type => 'clear',
},
store => {
class => 'DBIx::Class',
user_model => 'DB::provisioning_voip_subscribers',
id_field => 'id',
store_user_class => 'NGCP::Panel::AuthenticationStore::RoleFromRealm',
use_userdata_from_session => 1,
}
}
},
'Plugin::EnableMiddleware' => [
#NGCP::Panel::Middleware::TEgzip->new,
NGCP::Panel::Middleware::HSTS->new,
],
);
__PACKAGE__->config( default_view => 'HTML' );
__PACKAGE__->log(Log::Log4perl::Catalyst->new($logger_config));
# Start the application
__PACKAGE__->setup();
1;
# vim: set tabstop=4 expandtab: