#!/usr/bin/perl
use strict;
use File::Spec;
use Config::Tiny;
use Data::Dumper;
use LIMS::Local::Utils;
my $path_to_app_root = LIMS::Local::Utils::find_home
|| die "Couldn't find path to application directory"; # warn $path_to_app_root;
# open my $fh, '>' . '/tmp/env.txt'; print $fh Dumper \%ENV;
my $config = Config::Tiny->new();
# $ENV{CENTRE} is set in init.d lims_fastcgi_* scripts but not crons or .t
$ENV{CENTRE} ||= 'leeds';
my $local = do {
my $src = sprintf '%s/config/settings/%s.txt', $path_to_app_root, $ENV{CENTRE};
$config->read($src) or die $Config::Tiny::errstr;
}; # warn Dumper $local;
my $global = do {
my $src = sprintf '%s/config/settings/global.txt', $path_to_app_root;
$config->read($src) or die $Config::Tiny::errstr;
}; # warn Dumper $global;
my %settings = map %{ $local->{$_} }, qw(sys_admin local_admin); # warn Dumper \%settings;
# need to add $ENV{CENTRE} to settings as it's not visible to app (check not
# already set):
die "already have a settings entry for '_centre': $settings{_centre}"
if $settings{_centre};
$settings{_centre} = $ENV{CENTRE};
$settings{yaml_dir} = '.' . $ENV{CENTRE};
# add global settings (check first no key name clashes with local settings):
do { # warn Dumper $_;
die "$_ is already in use" if $settings{$_};
$settings{$_} = $global->{_}->{$_};
} for keys %{ $global->{_} }; # warn Dumper \%settings;
my %dbh_params = (
driver => 'mysql',
userid => $settings{db_user_id},
pwd => $settings{db_password},
db => $settings{development_db}, # default to devel db - overridden in mod_perl config
);
my %cfg = (
settings => \%settings,
# authen_cfg => { } # doesn't work here if using instance(); see 'unused configs'
# # block in __END__ for details; moved to LIMS::_configure_plugins()
db => {
development => $settings{development_db},
production => $settings{production_db},
},
dbh_params => [
"dbi:$dbh_params{driver}:$dbh_params{db}",
$dbh_params{userid},
$dbh_params{pwd},
],
dfv_defaults => {
missing_optional_valid => 1,
filters => 'trim', # trims white space pre/post field param
field_filters => { }, # use for forcing field formats eg foo => 'uc'
msgs => {
any_errors => 'dfv_errors', # default err__
# invalid_separator => '
', # needs to be in own
to format OK
prefix => 'error_', # default err_
invalid => 'invalid', # default 'Invalid'
missing => 'missing', # already 'Missing'
format => '« %s',
},
},
path_to_app_root => $path_to_app_root,
path_to_www_docs => $path_to_app_root . '/static/',
session_config => {
CGI_SESSION_OPTIONS => [], # defined in cgiapp_init
DEFAULT_EXPIRY => '24h', # for forgotten_password expiry
SEND_COOKIE => 1,
COOKIE_PARAMS => {
-path => '/',
},
},
session_options_file => {
Directory => $path_to_app_root.'/sessions',
IDFile => $path_to_app_root.'/sessions/cgisession.id',
IDInit => 1000, # start at
IDIncr => 1, # increment by
},
tmpdir => File::Spec->tmpdir(),
tt_config => {
TEMPLATE_OPTIONS => {
WRAPPER => 'site/tt_wrapper',
PRE_PROCESS => 'site/tt_pre_process',
# PRE_CHOMP => 1, # screwing template format
POST_CHOMP => 1,
# need to sort dir permissions for mod_perl & server.pl:
# COMPILE_DIR => $path_to_app_root.'/compiled_tmpl',
INCLUDE_PATH => [
$path_to_app_root.'/src',
$path_to_app_root.'/templates',
],
},
},
# permissions that allow unlocking records:
unlock_actions => [ qw(edit_pid modify_results report) ],
use_cgi_ajax => 1,
);
return \%cfg;
__END__
# unused configs:
# authz_cfg => { # CAP::Authorization config; see update_widget() in pod for eg of complex config
# DRIVER => [ 'DBI',
# TABLES => [ 'users u', 'user_functions f', 'user_permission p' ],
# JOIN_ON => 'u.id = p.user_id AND p.function_id = f.id',
# USERNAME => 'username',
# CONSTRAINTS => {
# function => '__PARAM_1__',
# # username => 'ADMIN', # need to make this an 'OR'
# },
# ],
# FORBIDDEN_RUNMODE => 'forbidden', # doesn't work as expected - using template->fill() method instead
# },
# dbi_driver => [ # using Generic driver now
# 'DBI',
# DBH => undef, # defined in cgiapp_init()
# TABLE => 'users',
# CREDENTIALS => [ qw(authen_username authen_password) ], # default & correspond to login form field names
# CONSTRAINTS => {
# username => '__CREDENTIAL_1__',
# active => 'yes',
# },
# COLUMNS => {
# 'sha1_base64:password' => '__CREDENTIAL_2__' # using SHA1
# },
# ],
# dbic_driver => [
# 'DBIC',
# SCHEMA => undef, # defined in cgiapp_init() $c->param('schema'),
# CLASS => 'Users', # = My::DBIC::Users
# FIELD_METHODS => [ qw(username password) ], # qw(user MD5:passphrase)
# CREDENTIALS => [ qw(authen_username authen_password) ],
# ],
# flash => [
# session_key => 'FLASH',
# auto_cleanup => 1,
# ],
=begin # doesn't work if using Class::Singleton instance() method of loading config
authen_cfg => { # CAP::Authentication
DRIVER => [ ], # defined in cgiapp_init()
LOGIN_SESSION_TIMEOUT => {
IDLE_FOR => '24h', # same as session default - overridden under CUSTOM:
EVERY => '1d',
CUSTOM => \&custom_timeout, # returns true if the session should be timed out
},
LOGIN_RUNMODE => 'login', # redirect_after_login requires destination field in .tt if used
# LOGIN_URL => '/hmds/login', # causes redirection loop & don't need if using LOGIN_RUNMODE
# POST_LOGIN_URL => '', # leave these blank to re-direct to original requested page
# POST_LOGIN_RUNMODE => '', # will override POST_LOGIN_URL
STORE => 'Session', # ie CAP::Store::Session
# STORE => [
# 'Cookie',
# NAME => 'HILISAuthentication',
# SECRET => 'HILIS4',
# EXPIRY => '30m',
# ],
},
=cut
|