summaryrefslogtreecommitdiff
path: root/lib/Config/ClawsMail.pm
blob: 3ad6ab2db0d5b24ef9e08c50c54e7b489b45bf9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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;