summaryrefslogtreecommitdiff
path: root/lib/JWebmail.pm
blob: dc68bd2bbec74cf542073b64bc89f0b74a0bac35 (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
package JWebmail v1.1.0;

use Mojo::Base 'Mojolicious';

use JWebmail::Controller::Webmail;
use JWebmail::Model::ReadMails;
use JWebmail::Model::Driver::QMailAuthuser;
use JWebmail::Model::Driver::Mock;
use JWebmail::Model::WriteMails;


sub startup {
    my $self = shift;

    $self->moniker('jwebmail');

    # 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
    $self->helper(users => sub {
        state $x = JWebmail::Model::ReadMails->new(
            driver => $self->config->{development}{use_read_mock}
                      ? JWebmail::Model::Driver::Mock->new()
                      : JWebmail::Model::Driver::QMailAuthuser->new(
                            logfile => $self->home->child('log', 'extract.log'),
                            %{ $self->config->{model}{read}{driver} // {} },
                        )
        );
    });
    $self->helper(send_mail => sub { my ($c, $mail) = @_; JWebmail::Model::WriteMails::sendmail($mail) });
    $JWebmail::Model::WriteMails::Block_Writes = 1 if $self->config->{development}{block_writes};

    # add helper and stash values
    $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 jwebmail.conf file.

=head1 AUTHORS

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

=head1 BASED ON

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 or any later version at your option.
Please take a look at the provided LICENSE file shipped with this module.

=cut