diff options
author | Jannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de> | 2022-04-25 16:52:57 +0200 |
---|---|---|
committer | Jannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de> | 2022-04-25 16:52:57 +0200 |
commit | a97f1a5eb6649e93bfd6584ed590e37c1290755f (patch) | |
tree | fe5858e3d1f23ee991566db6c0995604b0b40910 /lib/JWebmail/Model/Driver/QMailAuthuser.pm | |
parent | 5c3fa491eebc690fbac8a963996a0244882813c7 (diff) |
Refactored ReadMails into a role
Diffstat (limited to 'lib/JWebmail/Model/Driver/QMailAuthuser.pm')
-rw-r--r-- | lib/JWebmail/Model/Driver/QMailAuthuser.pm | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/lib/JWebmail/Model/Driver/QMailAuthuser.pm b/lib/JWebmail/Model/Driver/QMailAuthuser.pm deleted file mode 100644 index a310024..0000000 --- a/lib/JWebmail/Model/Driver/QMailAuthuser.pm +++ /dev/null @@ -1,138 +0,0 @@ -package JWebmail::Model::Driver::QMailAuthuser; - -use Mojo::Base -base; - -use IPC::Open2; -use File::Basename 'fileparse'; -use JSON::PP 'decode_json'; - - -has 'user'; -has 'maildir'; -has 'prefix' => ''; -has qmail_dir => '/var/qmail/'; -has prog => [fileparse(__FILE__)]->[1] . '/QMailAuthuser/Extract.pm'; -has logfile => '/dev/null'; - - -sub communicate { - my $self = shift; - my %args = @_; - - $args{challenge} //= ''; - $args{args} //= []; - - my $exec = do { - if ($args{mode} eq 'auth') { - $self->qmail_dir . "/bin/qmail-authuser true 3<&0"; - } - else { - my ($user_name) = $args{user} =~ /(\w*)@/; - - $self->qmail_dir.'/bin/qmail-authuser' - . $self->prefix . ' ' - . join(' ', map { $_ =~ s/(['\\])/\\$1/g; "'$_'" } ($self->prog, $self->maildir, $self->user, $user_name, $args{mode}, @{$args{args}})) - . ' 3<&0' - . ' 2>>'.$self->logfile; - } - }; - - my $pid = open2(my $reader, my $writer, $exec) - or die 'failed to create subprocess'; - - $writer->print("$args{user}\0$args{password}\0$args{challenge}\0") - or die 'pipe wite failed'; - close $writer - or die 'closing write pipe failed'; - - binmode $reader, ':utf8'; - my $input = <$reader>; - close $reader - or die 'closing read pipe failed'; - - waitpid($pid, 0); - my $rc = $? >> 8; - - my $resp; - if ($rc == 3 || $rc == 0) { - eval { $resp = decode_json $input; }; - if ($@) { $resp = {error => 'decoding error'} }; - } - elsif ($rc) { - $resp = {error => "qmail-authuser returned code: $rc"}; - } - - return ($resp, $rc); -} - - -1 - -__END__ - -=encoding utf-8 - -=head1 NAME - -QMailAuthuser - -=head1 SYNOPSIS - - my $m = JWebmail::Model::ReadMails->new(driver => JWebmail::Model::Driver::QMailAuthuser->new(...)); - -=head1 DESCRIPTION - -This ReadMails driver starts and communicates with L<JWebmail::Model::Driver::QMailAuthuser::Extract> over qmail-authuser. -The Extract programm runs with elevated priviliges to be able to read and modify mailboxes. - -=head1 ATTRIBUTES - -=head2 qmail_dir - -The parent directory of the bin directory where all qmail executables live. -Default C</var/qmail/>. - -=head2 prog - -The path to the extractor programm. -Default is the location of L<JWebmail::Model::Driver::QMailAuthuser::Extract> package. - -=head2 logfile - -A path to a log file that the extractor logs to. -Default '/dev/null' but highly recommended to set a real one. -Keep in mind that a different user need to be able to write to it. - -=head1 METHODS - -=head2 communicate - -Arguments: - -=over 6 - -=item mode - -=item args - -Depends on the mode - -=item user - -E-Mail address of the user - -=item password - -Corresponding e-mail user password - -=item challenge - -Challenge when using cram - -=back - -=head1 SEE ALSO - -L<JWebmail::Model::ReadMails>, L<JWebmail::Model::Driver::QMailAuthuser::Extract> - -=cut |