summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de>2022-05-06 02:24:42 +0200
committerJannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de>2022-05-06 02:24:42 +0200
commite629a35ea29dd9da9f61511130cbbee6d910e4cf (patch)
tree97c25c1da8f29967e8205902142a9b038b1684e3 /lib
parent3fbc68b0892b2914471eeab7885bd4f9e7f9175f (diff)
switched to toml config format
improved security with load over require
Diffstat (limited to 'lib')
-rw-r--r--lib/JWebmail.pm6
-rw-r--r--lib/JWebmail/Plugin/TOMLConfig.pm61
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