From 8ee2d7149baa58ea225cb40e0f95030ee21f1081 Mon Sep 17 00:00:00 2001 From: "Jannis M. Hoffmann" Date: Mon, 13 Mar 2023 21:34:03 +0100 Subject: Split up Helper plugin and added Views instead --- lib/JWebmail/Plugin/RenderMail.pm | 182 -------------------------------------- 1 file changed, 182 deletions(-) delete mode 100644 lib/JWebmail/Plugin/RenderMail.pm (limited to 'lib/JWebmail/Plugin/RenderMail.pm') diff --git a/lib/JWebmail/Plugin/RenderMail.pm b/lib/JWebmail/Plugin/RenderMail.pm deleted file mode 100644 index 22edbbd..0000000 --- a/lib/JWebmail/Plugin/RenderMail.pm +++ /dev/null @@ -1,182 +0,0 @@ -package JWebmail::Plugin::RenderMail; - -use Mojo::Base 'Mojolicious::Plugin'; - -use Mojo::ByteStream; -use Mojo::Util 'xml_escape'; - - -sub render_text_plain { - my ($_c, $_subtype, $content, $_path) = @_; - - $content = xml_escape($content); - $content =~ s/\n/
/g; - - return qq'
\n $content
\n'; -} - -sub render_text_html { - my ($c, $_subtype, $_content, $path) = @_; - - my $url = $c->url_for('raw', id => $c->stash('id')); - $url = $url->query(path => join('.', @$path)) if @$path; - - return qq'\n'; -} - -sub render_multipart_alternative { - my ($c, $_subtype, $content, $path) = @_; - - my $parts = $content->{parts}; - my $R = qq'
'; - my $i = 0; - my $end; - - for (reverse @$parts) { - if (!$end) { - my $x = mime_render($c, to_mime_types($_->{head}), $_->{body}, [@$path, $#$parts-$i]); - if ($x) { - $R .= $x; - $end = 1; - } - } - else { - $R .= '
'; - $R .= ''; - $R .= to_mime_type($_->{head}); - $R .= "\n"; - $R .= mime_render($c, to_mime_types($_->{head}), $_->{body}, [@$path, $#$parts-$i]); - $R .= "
\n"; - } - ++$i; - } - return $R . "
\n"; -} - -sub render_multipart { - my ($c, $_subtype, $content, $path) = @_; - - my $parts = $content->{parts}; - my $R = qq'
'; - my $i = 0; - - for (@$parts) { - if ( !$_->{head}{content_disposition} - || lc $_->{head}{content_disposition} eq 'none' - || lc $_->{head}{content_disposition} eq 'inline') { - - $R .= mime_render($c, to_mime_types($_->{head}), $_->{body}, [@$path, $i]); - } - elsif (lc $_->{head}{content_disposition} eq 'attachment') { - $R .= '

'; - $R .= $c->link_to($c->url_for(raw => id => $c->stash('id'))->query(path => join('.', @$path, $i)), (download => $_->{head}{filename}) => sub { - 'Attachment ' . xml_escape($_->{head}{filename}) . ' of type ' . to_mime_type($_->{head}); - }); - $R .= "

\n"; - } - else { - warn "unknown Content-Disposition '$_->{head}{content_disposition}'"; - $R .= "

unknown Content-Disposition '$_->{head}{content_disposition}'

\n"; - } - ++$i; - } - return $R . "
\n"; -} - -sub _format_header { - my ($c, $category, $value) = @_; - - my $R = ''; - - if (ref $value eq 'ARRAY' && $value->@*) { - $R .= '
' . xml_escape(uc $c->l($category)) . "
\n"; - for ($value->@*) { - $R .= '
'; - $R .= xml_escape($_->{display_name} ? qq("$_->{display_name}" <$_->{address}>) : "$_->{address}"); - $R .= "
\n"; - } - } - return $R; -} - -sub render_message { - my ($c, $subtype, $msg, $path) = @_; - - warn "unkown mime-subtype $subtype" unless $subtype eq 'rfc822'; - - my $R .= '
'; - - $R .= '
'; - $R .= '
' . xml_escape(uc $c->l('subject')) . '
'; - $R .= '
' . xml_escape($msg->{head}{subject}) . "
\n"; - $R .= _format_header($c, from => $msg->{head}{from}); - $R .= _format_header($c, to => $msg->{head}{to}); - $R .= _format_header($c, cc => $msg->{head}{cc}); - $R .= _format_header($c, bcc => $msg->{head}{bcc}); - $R .= '
' . xml_escape(uc $c->l('date')) . '
'; - $R .= '
' . xml_escape($msg->{head}{date}) . "
\n"; - $R .= '
' . xml_escape(uc $c->l('content-type')) . '
'; - $R .= '
' . to_mime_type($msg->{head}{mime}) . "
\n"; - $R .= "
\n"; - - #my $content = ref $msg->{body} && exists $msg->{body}{parts} ? $msg->{body}{parts} : $msg->{body}; - - $R .= mime_render($c, to_mime_types($msg->{head}{mime}), $msg->{body}, [@$path, 0]); - - return $R . "
\n"; -} - -our %MIME_Render_Subs = ( - 'text/plain' => \&render_text_plain, - 'text/html' => \&render_text_html, - 'multipart/alternative' => \&render_multipart_alternative, - 'multipart' => \&render_multipart, - 'message' => \&render_message, -); - -sub mime_render { - my ($c, $maintype, $subtype, $content, $path) = @_; - - my $renderer = $MIME_Render_Subs{"$maintype/$subtype"} || $MIME_Render_Subs{$maintype}; - - unless ($renderer) { - return "

Unsupported MIME type of $maintype/$subtype.

\n"; - } - - return $renderer->($c, $subtype, $content, $path); -} - - -sub to_mime_type { lc xml_escape("$_[0]->{content_maintype}/$_[0]->{content_subtype}") } -sub to_mime_types { return xml_escape($_[0]->{content_maintype}), xml_escape($_[0]->{content_subtype}) } - - -sub register { - my ($self, $app, $conf) = @_; - $conf //= {}; - - $app->helper('render_mail.format_mail' => sub { Mojo::ByteStream->new(mime_render($_[0], 'message', 'rfc822', $_[1], [])) }); - $app->helper(to_mime_type => sub { shift; to_mime_type(@_) }); -} - -1 - -__END__ - -=encoding utf-8 - -=head1 NAME - -JWebmail::Plugin::RenderMail - Does the heavy lifting of converting an E-Mail to HTML - -=head1 HELPERS - -=head2 render_mail.format_mail - -Renders a mail to html recursively. - -=head2 to_mime_type - -Combines the content_maintype and content_subtype attributes into the regular MIME description. -These attributes are found in a mail head mime section or as head for multipart messages. - -- cgit v1.2.3