diff options
Diffstat (limited to 'lib/Config/ClawsMail.pm')
-rw-r--r-- | lib/Config/ClawsMail.pm | 78 |
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; |