diff options
author | Gianni Ceccarelli <gianni.ceccarelli@broadbean.com> | 2023-06-22 09:31:31 +0100 |
---|---|---|
committer | Gianni Ceccarelli <gianni.ceccarelli@broadbean.com> | 2023-06-22 09:31:31 +0100 |
commit | bdde70ae5b4ce272946f1b7bcad3fcc1581f4bdc (patch) | |
tree | a2048e53fab867589b0066eeff15fe2a86d1eb14 /lib/Config/ClawsMail.pm | |
parent | cope with other account types/protocols (diff) | |
download | config-clawsmail-bdde70ae5b4ce272946f1b7bcad3fcc1581f4bdc.tar.gz config-clawsmail-bdde70ae5b4ce272946f1b7bcad3fcc1581f4bdc.tar.bz2 config-clawsmail-bdde70ae5b4ce272946f1b7bcad3fcc1581f4bdc.zip |
handles new claws encryption
Diffstat (limited to 'lib/Config/ClawsMail.pm')
-rw-r--r-- | lib/Config/ClawsMail.pm | 78 |
1 files changed, 55 insertions, 23 deletions
diff --git a/lib/Config/ClawsMail.pm b/lib/Config/ClawsMail.pm index 848113e..3ad6ab2 100644 --- a/lib/Config/ClawsMail.pm +++ b/lib/Config/ClawsMail.pm @@ -1,46 +1,78 @@ package Config::ClawsMail; +use v5.26; use Moo; # VERSION -use Config::INI::Reader; +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 Path::Tiny; +use Types::Path::Tiny qw(Path); use namespace::clean; # ABSTRACT: Claws-Mail config parser -has accounts => ( +has basedir => ( is => 'ro', - isa => HashRef[InstanceOf['Config::ClawsMail::Account']], - default => sub { +{}; }, + isa => Path, + coerce => 1, + default => '~/.claws-mail', ); -sub BUILDARGS { - my ($class,@etc) = @_; +has master_password => ( is => 'ro' ); - my $args = $class->next::method(@etc); - return $args if $args->{accounts}; +has main_config => ( + is => 'lazy', + isa => HashRef, +); - my $config_file = delete $args->{config_file} - || path($ENV{HOME},'.claws-mail','accountrc'); - my $config_hash = Config::INI::Reader->read_file( - $config_file, +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'), ); - my $password_file = delete $args->{password_file} - || path($ENV{HOME},'.claws-mail','passwordstorerc'); - my $password_hash = Config::ClawsMail::PasswordStoreParser->read_file( - $password_file, + + 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'), ); - for my $account_id (keys %{$config_hash}) { - my $account_conf = $config_hash->{$account_id}; - my $password_conf = $password_hash->{$account_id}; - my $account = Config::ClawsMail::Account->new_from_config($account_conf,$password_conf) or next; - $args->{accounts}{$account->account_name} = $account; + 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 $args; + return \%accounts; } 1; |