diff options
author | Jannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de> | 2022-05-06 02:24:42 +0200 |
---|---|---|
committer | Jannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de> | 2022-05-06 02:24:42 +0200 |
commit | e629a35ea29dd9da9f61511130cbbee6d910e4cf (patch) | |
tree | 97c25c1da8f29967e8205902142a9b038b1684e3 /lib | |
parent | 3fbc68b0892b2914471eeab7885bd4f9e7f9175f (diff) |
switched to toml config format
improved security with load over require
Diffstat (limited to 'lib')
-rw-r--r-- | lib/JWebmail.pm | 6 | ||||
-rw-r--r-- | lib/JWebmail/Plugin/TOMLConfig.pm | 61 |
2 files changed, 65 insertions, 2 deletions
diff --git a/lib/JWebmail.pm b/lib/JWebmail.pm index 98001a1..8c01596 100644 --- a/lib/JWebmail.pm +++ b/lib/JWebmail.pm @@ -2,6 +2,8 @@ package JWebmail v1.2.0; use Mojo::Base Mojolicious; +use Module::Load 'load'; + use JWebmail::Controller::Webmail; use JWebmail::Model::ReadMails::Role; use JWebmail::Model::ReadMails::QMailAuthuser; @@ -43,7 +45,7 @@ sub startup { # load plugins push @{$self->plugins->namespaces}, 'JWebmail::Plugin'; - $self->plugin('INIConfig'); + $self->plugin('TOMLConfig'); #die unless $self->validateConf; $self->plugin('ServerSideSessionData'); @@ -57,7 +59,7 @@ sub startup { my $read_mails = do { if ($mode eq 'development') { my $cls = $self->config->{development}{read_mock}; - eval "require $cls" || die "Issue for module $cls with: $@"; + eval { load $cls; 1 } || die "Issue for module $cls with: $@"; $cls->new; } else { diff --git a/lib/JWebmail/Plugin/TOMLConfig.pm b/lib/JWebmail/Plugin/TOMLConfig.pm new file mode 100644 index 0000000..20a2950 --- /dev/null +++ b/lib/JWebmail/Plugin/TOMLConfig.pm @@ -0,0 +1,61 @@ +package JWebmail::Plugin::TOMLConfig; + +use Mojo::Base Mojolicious::Plugin::Config; + +use TOML::Tiny 'from_toml'; + + +has parse_func => sub { \&from_toml }; + + +sub parse { + my ($self, $content, $_file, $_plugin_conf, $_app) = @_; + + my $config = $self->parse_func->($content); + die "parse_func must return hash ref" unless ref $config eq 'HASH'; + + return $config; +} + +sub register { shift->SUPER::register(shift, {ext => 'toml', %{shift()}}) } + + +1 + +__END__ + +=encoding utf-8 + +=head1 NAME + +TOMLConfig - Reads in TOML config files. + +=head1 SYNOPSIS + + $app->plugin('TOMLConfig'); + + @@ my_app.toml + + # global section + key = "val" # line comment + [section] + other_key = "other_val" + number_key = 5 + [other.section] + values = ["key1", "key2", "key3"] + +=head1 DESCRIPTION + +TOML is my favorite config format :) + +=head1 OPTIONS + +=head2 default + +Sets default configuration values. + +=head1 DEPENDENCIES + +TOML::Tiny + +=cut |