package Config::ClawsMail;
use v5.26;
use Moo;
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;
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;