On 5 May 2017 at 19:17, Daniel Gruno <[email protected]> wrote: > On 05/05/2017 08:13 PM, sebb wrote: >> On 5 May 2017 at 19:01, <[email protected]> wrote: >>> Repository: incubator-ponymail >>> Updated Branches: >>> refs/heads/master 2b8b5b0da -> c4e38edb4 >>> >>> >>> Detect and convert base64 blobs >>> >>> If the archiver has saved a source blob as base64, >>> detect it and convert back to plain text when displaying. >>> This addresses issue #371. >> >> -1 >> >> This should be unnecessary, because the base64 is already decoded in >> elastic.lua, see: > > Apologies, I was unaware that this had changed. It would perhaps be > prudent with a heads up to dev@ when major internal changes like this > happen. I don't read all commits done.
As I recall, it was done in the same commit as the archiver change. > There are a few not optimal design choices in elastic.lua for detecting > base64, I'll take a look at those instead. AFAICT that is working fine. Local tests show that the Le Roux messages are stored as base64 but this is decoded properly when the current code is used. > With regards, > Daniel. > >> >> https://github.com/apache/incubator-ponymail/blob/master/site/api/lib/elastic.lua#L116 >> >> If that is not working, it should be fixed. >> >> In any case, fixing source.lua is insufficient because mbox.lua also >> reads mbox_source. >> >> That is why the fix was added to elastic.lua instead. >> >>> >>> Project: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/repo >>> Commit: >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/commit/c4e38edb >>> Tree: >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/tree/c4e38edb >>> Diff: >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/diff/c4e38edb >>> >>> Branch: refs/heads/master >>> Commit: c4e38edb4032d1613fcff161be0a3bd201986a4a >>> Parents: 2b8b5b0 >>> Author: Daniel Gruno <[email protected]> >>> Authored: Fri May 5 20:01:28 2017 +0200 >>> Committer: Daniel Gruno <[email protected]> >>> Committed: Fri May 5 20:01:28 2017 +0200 >>> >>> ---------------------------------------------------------------------- >>> site/api/source.lua | 16 ++++++++++++++++ >>> 1 file changed, 16 insertions(+) >>> ---------------------------------------------------------------------- >>> >>> >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/c4e38edb/site/api/source.lua >>> ---------------------------------------------------------------------- >>> diff --git a/site/api/source.lua b/site/api/source.lua >>> index 5de4dec..95dcc5f 100644 >>> --- a/site/api/source.lua >>> +++ b/site/api/source.lua >>> @@ -23,6 +23,18 @@ local user = require 'lib/user' >>> local cross = require 'lib/cross' >>> local utils = require 'lib/utils' >>> >>> +function is_base64(msg) >>> + -- base64 is always a multiple of 4 >>> + if #msg % 4 == 0 then >>> + -- base64 only has a-zA-Z0-9+=/ in it >>> + if not msg:match("([^a-zA-Z0-9+=/])") then >>> + -- very likely base64 :) >>> + return true >>> + end >>> + end >>> + return false >>> +end >>> + >>> function handle(r) >>> -- content is currently utf-8, see #367 >>> cross.contentType(r, "text/plain; charset=utf-8") >>> @@ -46,6 +58,10 @@ function handle(r) >>> if aaa.canAccessDoc(r, doc, account) then >>> local doc_raw = elastic.get('mbox_source', doc.request_id) >>> if doc_raw then >>> + -- If this could be base64, try to convert it. >>> + if is_base64(doc_raw.source) then >>> + pcall(function() doc_raw.source = >>> r:base64_decode(doc_raw.source) end) >>> + end >>> r:puts(doc_raw.source) >>> else >>> r:puts("Could not find the email source, sorry!") >>> >
