summaryrefslogtreecommitdiff
path: root/lib/JWebmail.pm
blob: 8def43457e4f6925fa073149798172fe83fb26e7 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package JWebmail v1.2.0;

use Mojo::Base 'Mojolicious';

use JWebmail::Controller::Webmail;
use JWebmail::Model::ReadMails::Role;
use JWebmail::Model::ReadMails::QMailAuthuser;
use JWebmail::Model::WriteMails;


sub startup {
    my $self = shift;

    $self->moniker('jwebmail');

    my $mode = $self->mode;
    $self->log->path($self->home->child('log', "$mode.log"));

    # load plugins
    push @{$self->plugins->namespaces}, 'JWebmail::Plugin';

    $self->plugin('INIConfig');
    $self->plugin('ServerSideSessionData');
    $self->plugin('Helper');
    my $i18n_route = $self->plugin('I18N2', $self->config('i18n'));

    $self->secrets( [$self->config('secret')] ) if $self->config('secret');
    delete $self->config->{secret};

    # initialize models
    my $read_mails = do {
        if ($mode eq 'development') {
            my $cls = $self->config->{development}{read_mock};
            eval "require $cls" || die "Issue for module $cls with: $@";
            $cls->new;
        }
        else {
            JWebmail::Model::ReadMails::QMailAuthuser->new(
                logfile => $self->home->child('log', 'extract.log'),
            );
        }
    };
    die "given class @{[ ref $read_mails ]} does not ReadMails"
        unless $read_mails->DOES('JWebmail::Model::ReadMails::Role');
    $self->helper(users => sub { $read_mails });
    $self->helper(send_mail => sub { my ($c, $mail) = @_; JWebmail::Model::WriteMails::sendmail($mail) });
    $JWebmail::Model::WriteMails::Block_Writes = 1 if $mode eq 'development';

    $self->defaults(version => __PACKAGE__->VERSION);

    $self->route($i18n_route);
}


sub route {
    my $self = shift;

    my $r = shift || $self->routes;

    $r->get('/' => 'noaction')->to('Webmail#noaction');
    $r->get('/about')->to('Webmail#about');
    $r->post('/login')->to('Webmail#login');
    $r->get('/logout')->to('Webmail#logout');

    my $a = $r->under('/')->to('Webmail#auth');
    $a->get('/home/:folder')->to('Webmail#displayheaders', folder => '')->name('displayheaders');
    $a->get('/read/#id' => 'read')->to('Webmail#readmail');
    $a->get('/write')->to('Webmail#writemail');
    $a->post('/write' => 'send')->  to('Webmail#sendmail');
    $a->post('/move')->to('Webmail#move');
    $a->get('/raw/#id')->to('Webmail#raw');
}


1

__END__

=encoding utf-8

=head1 NAME

JWebmail - Provides a web based e-mail client meant to be used with s/qmail.

=head1 SYNOPSIS

    hypnotoad script/jwebmail

And use a server in reverse proxy configuration. 

=head1 DESCRIPTION

=head1 CONFIGURATION

Use the I<jwebmail.conf> file or for a specific I<$mode> the I<jwebmail.$mode.conf>.

=head1 AUTHORS

Copyright (C) 2020-2022 Jannis M. Hoffmann L<jannis@fehcom.de>

=head1 BASED ON IDEAS

Copyright (C) 2001 Olivier Müller L<om@omnis.ch> (GPLv2+ project: oMail Webmail)

Copyright (C) 2000 Ernie Miller (GPL project: Neomail)

See the CREDITS file for project contributors.

=head1 LICENSE

This module is licensed under the terms of the GPLv3.
Please take a look at the provided LICENSE file shipped with this module.

=cut