summaryrefslogtreecommitdiff
path: root/lib/Config/ClawsMail.pm
diff options
context:
space:
mode:
authorGianni Ceccarelli <gianni.ceccarelli@broadbean.com>2023-06-22 09:31:31 +0100
committerGianni Ceccarelli <gianni.ceccarelli@broadbean.com>2023-06-22 09:31:31 +0100
commitbdde70ae5b4ce272946f1b7bcad3fcc1581f4bdc (patch)
treea2048e53fab867589b0066eeff15fe2a86d1eb14 /lib/Config/ClawsMail.pm
parentcope with other account types/protocols (diff)
downloadconfig-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.pm78
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;