summaryrefslogtreecommitdiff
path: root/lib/Config/ClawsMail.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Config/ClawsMail.pm')
-rw-r--r--lib/Config/ClawsMail.pm78
1 files changed, 78 insertions, 0 deletions
diff --git a/lib/Config/ClawsMail.pm b/lib/Config/ClawsMail.pm
new file mode 100644
index 0000000..3ad6ab2
--- /dev/null
+++ b/lib/Config/ClawsMail.pm
@@ -0,0 +1,78 @@
+package Config::ClawsMail;
+use v5.26;
+use Moo;
+# VERSION
+use experimental 'signatures';
+
+use Config::ClawsMail::Account;
+use Config::ClawsMail::PasswordStore;
+use Config::ClawsMail::MainConfigParser;
+use Config::ClawsMail::PasswordStoreParser;
+use Types::Standard qw(HashRef InstanceOf);
+use Types::Path::Tiny qw(Path);
+use namespace::clean;
+
+# ABSTRACT: Claws-Mail config parser
+
+has basedir => (
+ is => 'ro',
+ isa => Path,
+ coerce => 1,
+ default => '~/.claws-mail',
+);
+
+has master_password => ( is => 'ro' );
+
+has main_config => (
+ is => 'lazy',
+ isa => HashRef,
+);
+
+sub _build_main_config($self) {
+ Config::ClawsMail::MainConfigParser->read_file($self->basedir->child('clawsrc'));
+}
+
+has password_store => (
+ is => 'lazy',
+ isa => InstanceOf['Config::ClawsMail::PasswordStore'],
+);
+
+sub _build_password_store($self) {
+ my $raw_data = Config::ClawsMail::PasswordStoreParser->read_file(
+ $self->basedir->child('passwordstorerc'),
+ );
+
+ Config::ClawsMail::PasswordStore->new({
+ raw_data => $raw_data,
+ master_password => $self->master_password,
+ master_salt_bs64 => $self->main_config->{Common}{master_passphrase_salt},
+ });
+}
+
+has accounts => (
+ is => 'lazy',
+ isa => HashRef[InstanceOf['Config::ClawsMail::Account']],
+);
+
+sub _build_accounts($self) {
+ my $raw_accounts = Config::INI::Reader->read_file(
+ $self->basedir->child('accountrc'),
+ );
+
+ my %accounts;
+
+ for my $account_id (keys $raw_accounts->%*) {
+
+ my $account = Config::ClawsMail::Account->new_from_config({
+ account_section => $account_id,
+ account_config => $raw_accounts->{$account_id},
+ password_store => $self->password_store,
+ }) or next;
+
+ $accounts{ $account->account_name } = $account;
+ }
+
+ return \%accounts;
+}
+
+1;