From 6ae1fb3f6bb6ac15cecb3c795af9046951050878 Mon Sep 17 00:00:00 2001 From: FliegendeWurst <2012gdwu+github@posteo.de> Date: Mon, 31 Jul 2023 16:01:17 +0200 Subject: [PATCH] Extend mailbox adapter to eml files --- exampledir/test/github_email.eml | 69 ++ exampledir/test/mail_with_attachment.mbox | 984 ++++++++++++++++++++++ test.mbx => exampledir/test/test.mbx | 0 src/adapters/mbox.rs | 181 ++-- 4 files changed, 1161 insertions(+), 73 deletions(-) create mode 100644 exampledir/test/github_email.eml create mode 100644 exampledir/test/mail_with_attachment.mbox rename test.mbx => exampledir/test/test.mbx (100%) diff --git a/exampledir/test/github_email.eml b/exampledir/test/github_email.eml new file mode 100644 index 0000000..1116068 --- /dev/null +++ b/exampledir/test/github_email.eml @@ -0,0 +1,69 @@ +Return-Path: +Date: Mon, 31 Jul 2023 01:34:57 -0700 +From: "github-actions[bot]" +To: KeYProject/key +In-Reply-To: +References: +Subject: Re: [KeYProject/key] Fix more UI bugs (PR #3232) +Mime-Version: 1.0 +Content-Type: multipart/alternative; + boundary="--==_mimepart_64c77231630fb_12bafdd0c012685"; + charset=UTF-8 +Content-Transfer-Encoding: 7bit +Precedence: list +X-GitHub-Sender: github-actions[bot] +X-GitHub-Recipient: FliegendeWurst +X-GitHub-Reason: author +List-ID: KeYProject/key +List-Archive: https://github.com/KeYProject/key +X-Auto-Response-Suppress: All +destinations: 2012gdwu+github@posteo.de +X-GitHub-Recipient-Address: 2012gdwu+github@posteo.de + + +----==_mimepart_64c77231630fb_12bafdd0c012685 +Content-Type: text/plain; + charset=UTF-8 +Content-Transfer-Encoding: 7bit + +Thank you for your contribution. + +The test artifacts are available on [Artiweb](https://keyproject.github.io/artiweb/3232/). +The newest artifact is [here](https://keyproject.github.io/artiweb/3232/833812796/). + +-- +Reply to this email directly or view it on GitHub: +https://github.com/KeYProject/key/pull/3232#issuecomment-1657918122 +You are receiving this because you authored the thread. + +Message ID: +----==_mimepart_64c77231630fb_12bafdd0c012685 +Content-Type: text/html; + charset=UTF-8 +Content-Transfer-Encoding: 7bit + +

+

Thank you for your contribution.

+

The test artifacts are available on Artiweb.
+The newest artifact is here.

+ +


Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.Message ID: <KeYProject/key/pull/3232/c1657918122@github.com>

+ +----==_mimepart_64c77231630fb_12bafdd0c012685-- diff --git a/exampledir/test/mail_with_attachment.mbox b/exampledir/test/mail_with_attachment.mbox new file mode 100644 index 0000000..bd90af2 --- /dev/null +++ b/exampledir/test/mail_with_attachment.mbox @@ -0,0 +1,984 @@ +From - Mon Jul 31 15:15:47 2023 +X-Mozilla-Status: 0001 +X-Mozilla-Status2: 00000000 +X-Mozilla-Keys: +Content-Type: multipart/mixed; + boundary="------------4qicfcop0idtQJYkG05sMt93" +Message-ID: <68b5f6c4-8de4-02e9-fd09-8157d8ccd29b@student.kit.edu> +Date: Mon, 31 Jul 2023 15:15:41 +0200 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 + Thunderbird/102.13.0 +From: Arne Keller +Content-Language: de-DE +To: +Subject: Subject line +X-Enigmail-Draft-Status: N00200 +X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; + attachmentreminder=0; deliveryformat=0 +X-Identity-Key: id6 +Fcc: imap://KIT%5Cuskyk@imap.kit.edu/Sent +MIME-Version: 1.0 + +--------------4qicfcop0idtQJYkG05sMt93 +Content-Type: text/html; charset="UTF-8" +Content-Transfer-Encoding: 7bit + + + + + + +

regular text
+

+ + +--------------4qicfcop0idtQJYkG05sMt93 +Content-Type: application/pdf; name="short.pdf" +Content-Disposition: attachment; filename="short.pdf" +Content-Transfer-Encoding: base64 + +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 +zhUtk8I7g3h4jsfChVS2tUNJq1N+OJE3vqwROtkY10wlDXg14G1wP75PSZe7tp6tNH8Qb+UYvCMB +AW2GfhBJF0GzzkP2fLXAtiXFVbHWVESLFCUAFDmT0UmoY/olFaeqgN3iKY9Ito12a5ztA9xS08bb +Haoda/mb9xVo+p2oQFGrMVQVWp5bbbhgjmPXQYxxH/WJFm1JTrYz+51bGnBdgvFPabjN9V9kzTKM +NwgepRzRkUONVYg2xRHgncX1zyxtAR88djaeW4WduN9op/OGhbHlWGeIrXVKVo8rH+CUmhy1JxrE +huS88JI+ePYKOu6ZtjH4ASJA586XTmBClwFaXgAM0lVW3k6l+XD4p57ebrYyYXJjfC5bHeeIzFMQ +9X4JyOmZZZGQn76lOUFQHih+P4JPSok/9KyVuKbIvCVRwOK6EeY3DG8pKWxsfGRf+ybNpKVRzubu +dZG5jBFGP3otS07e3LP6bana84rPRFTwkBYey2m56oWHb5m82mRPF5Bf7be+vreENpasmU3WmvhF +j4xaMX7sPdujePleVw5ip9GiYgYVih2wl52dzKppK9xhbKvWbcmtbCDr4jO12xw5umWLLFCgVrub +WU2lZXgWrQeds9LbyzO46E5/f+5x5doy3mRNgZ1Sr+3tiNNEtOd7qvEA3KiTU3KOsOYKVtIR0kpD +gCeHDXVViUURH3pzPN/QkfIaqYvzaIQJCy7TPKlww2I77PGRqMgz3/v6V6yNyVcncLOW5PPXLJkL +yf2UzDXu3KqgObOOuzA83eRUWckXYZkpc51+ptNhgFM0PL97j1XhokJBlCcZ/P8AhORPCgplbmRz +dHJlYW0KZW5kb2JqCjMxIDAgb2JqCjw8Ci9BdXRob3IoKS9UaXRsZSgpL1N1YmplY3QoKS9DcmVh +dG9yKFwzNzZcMzc3XDAwMExcMDAwYVwwMDBUXDAwMGVcMDAwWFwwMDBcMDQwXDAwMHZcMDAwaVww +MDBhXDAwMFwwNDBcMDAwcFwwMDBhXDAwMG5cMDAwZFwwMDBvXDAwMGMpL1Byb2R1Y2VyKHBkZlRl +WC0xLjQwLjE5KS9LZXl3b3JkcygpCi9DcmVhdGlvbkRhdGUgKEQ6MjAxOTA2MDUxNTA5MjArMDIn +MDAnKQovTW9kRGF0ZSAoRDoyMDE5MDYwNTE1MDkyMCswMicwMCcpCi9UcmFwcGVkIC9GYWxzZQov +UFRFWC5GdWxsYmFubmVyIChUaGlzIGlzIHBkZlRlWCwgVmVyc2lvbiAzLjE0MTU5MjY1LTIuNi0x +LjQwLjE5IChUZVggTGl2ZSAyMDE4L0FyY2ggTGludXgpIGtwYXRoc2VhIHZlcnNpb24gNi4zLjAp +Cj4+CmVuZG9iagoyIDAgb2JqCjw8Ci9UeXBlIC9PYmpTdG0KL04gMjUKL0ZpcnN0IDE3OAovTGVu +Z3RoIDExMjkgICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnjarVZtc9s2DP6u +X4GP8XYWxXfyrtc7J667rEnaS7Kua5IPms3a2imWT5Iv7b8fIMmW7cxd9vLBNAk+APEAIAUOCUiQ +HAxwwcECNxIciMSAB6E8KBBeAFcgbYKboBIO3IGyScQ9aJMgFryyIBCVaFJCSw7V0KImIdq0ijZR +Dw1yjhoJLgQIriVwCUImJhJoQiqHSmgCjxfohdIIRpPaoo94kvYyevUK2A2wt8VtAWwMdxIZXAOb +ZPUDvH6N2xG7/bYKwD6k8xCxs2JZh2VdgSZcxK5DVazLaaiQWSO4DLMsPS2+wl2CAoNuWS8eIlQv +UY/cI1hnuT/v02+fcU/E1jiwiY7R4+U6zx+OIWWDNMbG3Lv/G2p1zM0BdILEgYI1wQTxpIsSZhAT +0M4x38iW5qjCPpTF9CbUcIeRG0+A3YavNXTW9iJ+UoVpnRXLH2I+IM2Te2kN/uw9pnVBQ6Ah3w4F +DfeJSuj/aSspt4DZILpTWElYBrEFmmnOY96te6nQOtbguI0dVp6IRYdrR0IowQmbuNiDxOxgIu+E +bfBYci/9tRrtaJ+NytLJnUQnmH0XS7CikRqJJxuXxAaMFoRwCj0inDStr4RotY3Q4Lnp9jtZo9tZ +l4Y0kLXZ2CecpnyK7fGaqpZM90S7Wauok52dVqaUwkDuzmVC8x7RanRS0YfDYcnJDtOjW4T0FHzp +G3uOUtDsYgqIKBHHW6ywZJvk6Ya+5DTrpJ7GVuKl7RA9tt1X2uNaNRqqRzV7jnQfdt4AugTjUE3L +bFUXZXsprtJH3Ln6+eOby/MfLy6vi8d0ycXwtMhnCMjTOT4NLfK0eRaGyhoYCodPl7b4mHFp8XkY +VVN6HoxD7Fm6+ilk80W3pANpb8g9rs7rNM+mo+U8D5BE7KYOjx8xfz5inzolzADaWKQlXb8TNmOB +LVjOClayp0HrySRDbcF3n6K/I3h+dT2+erclmAyvw3ydp+URjvi8DoXHylL0YHOxx9Hvc/Qv4mh2 +KUq+SzFFghn7gxXLwFahzIoZq1jN1nts5T9hOxp9fns+3mHbunSErHYdWenoPRT635IdcrWhq81R +uoHY7XHTz7m9WU6LWbac43HZly8BPz70kcJ3sYsQKE/xAm9ZivWTUJ3gv2pDiTPHcuTCWYGjwtpp +Iopzz54enocR3V7/XjdLEqK/p2kVmo/G0buxF3364Dcf0ElWVjWRJa8idpFuVhxD92s2qxcV9QgN +dkOSuoK/zO733PpORR94pg49U2bPMbt1DHuY/+7Y8eI78Ms8jxjfc8z0jrkXOEYtTkU9zpo6lYi9 +y2ZV1yEcpPz9us6zJYGbw6nLaszT2dvFxs5GM6uxVnnn9IiawGbWdUZizyG6hnj2ybiYDm/qtKwH +0OzDySLkeTF8Ksp8NgDXylboOLUPpl3udhS+9Z5dZI9ZfWBxF9j3RKFCnHDPw3OWYh6KedTGadPK +bWOxYdD5LvyG3jxcFrPAfqlCH7b3q7AcNYfD9hn+E7Q51S0KZW5kc3RyZWFtCmVuZG9iagozMiAw +IG9iago8PAovVHlwZSAvWFJlZgovSW5kZXggWzAgMzNdCi9TaXplIDMzCi9XIFsxIDIgMV0KL1Jv +b3QgMzAgMCBSCi9JbmZvIDMxIDAgUgovSUQgWzxCMjE4QUE3ODgwNDhGMjQ0QjUyRUNDMkJCRjdG +REUzNz4gPEIyMThBQTc4ODA0OEYyNDRCNTJFQ0MyQkJGN0ZERTM3Pl0KL0xlbmd0aCA4OSAgICAg +ICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42hXLyQGCUBRD0eShjMqkIG3Rg+3Y +iKXohhrowTXevzhJNpF0hEL+vsgwcqtLO5DhhDN6DBhxQ4EJJTpUqNHYRfpfvO6pr37/Ure4Y8YD +iz+St6f+7n0I1gplbmRzdHJlYW0KZW5kb2JqCnN0YXJ0eHJlZgo1MzM0OAolJUVPRgo= + +--------------4qicfcop0idtQJYkG05sMt93-- + diff --git a/test.mbx b/exampledir/test/test.mbx similarity index 100% rename from test.mbx rename to exampledir/test/test.mbx diff --git a/src/adapters/mbox.rs b/src/adapters/mbox.rs index 52b2622..2923000 100644 --- a/src/adapters/mbox.rs +++ b/src/adapters/mbox.rs @@ -1,25 +1,24 @@ -use crate::adapted_iter::one_file; - use super::*; use anyhow::Result; use async_stream::stream; use lazy_static::lazy_static; -use tokio::io::{BufReader, AsyncReadExt}; +use mime2ext::mime2ext; +use tokio::io::AsyncReadExt; -use std::{path::{Path, PathBuf}, sync::Mutex, io::Cursor}; +use std::{ + collections::VecDeque, + io::Cursor, +}; -static EXTENSIONS: &[&str] = &["mbox", "mbx"]; -static MIME_TYPES: &[&str] = &[ - "application/mbox", -]; +static EXTENSIONS: &[&str] = &["mbox", "mbx", "eml"]; +static MIME_TYPES: &[&str] = &["application/mbox", "message/rfc822"]; lazy_static! { static ref METADATA: AdapterMeta = AdapterMeta { - name: "mbox".to_owned(), + name: "mail".to_owned(), version: 1, - description: - "Reads mailbox files and runs extractors on the contents and attachments." - .to_owned(), + description: "Reads mailbox/mail files and runs extractors on the contents and attachments." + .to_owned(), recurses: true, fast_matchers: EXTENSIONS .iter() @@ -49,25 +48,13 @@ impl GetMetadata for MboxAdapter { } } -fn get_inner_filename(filename: &Path) -> PathBuf { - let extension = filename - .extension() - .map(|e| e.to_string_lossy()) - .unwrap_or(Cow::Borrowed("")); - let stem = filename - .file_stem() - .expect("no filename given?") - .to_string_lossy(); - let new_extension = match extension.as_ref() { - "tgz" | "tbz" | "tbz2" => ".tar", - _other => "", - }; - filename.with_file_name(format!("{}{}", stem, new_extension)) -} - +#[async_trait] impl FileAdapter for MboxAdapter { - fn adapt(&self, ai: AdaptInfo, _detection_reason: &FileMatcher) -> Result { - println!("running mbox adapter"); + async fn adapt( + &self, + ai: AdaptInfo, + _detection_reason: &FileMatcher, + ) -> Result { let AdaptInfo { filepath_hint, mut inp, @@ -88,17 +75,26 @@ impl FileAdapter for MboxAdapter { let mail_bytes = mail.as_bytes(); // &content[offset..offset2]; let mail_content = mail_bytes.splitn(2, |x| *x == b'\n').skip(1).next().unwrap(); let mail = mailparse::parse_mail(mail_content)?; - let mail_body = mail.get_body()?; - println!("body {:?}", mail_body); + let mut todos = VecDeque::new(); + todos.push_back(mail); + + while let Some(mail) = todos.pop_front() { let mut path = filepath_hint.clone(); - println!("{:?}", mail.ctype.mimetype); + let filename = mail.get_content_disposition().params.get("filename").cloned(); match &*mail.ctype.mimetype { - "text/html" => { - path.push("mail.html"); - }, - _ => { - path.push("mail.txt"); + x if x.starts_with("multipart/") => { + todos.extend(mail.subparts); + continue; + } + mime => { + if let Some(name) = filename { + path.push(name); + } else if let Some(extension) = mime2ext(mime) { + path.push(format!("data.{extension}")); + } else { + path.push("data"); + } } } @@ -109,12 +105,13 @@ impl FileAdapter for MboxAdapter { filepath_hint: path, is_real_file: false, archive_recursion_depth: archive_recursion_depth + 1, - inp: Box::pin(Cursor::new(mail_body.into_bytes())), + inp: Box::pin(Cursor::new(mail.get_body_raw()?)), line_prefix: line_prefix.to_string(), config: config, postprocess, }; ais.push(ai2); + } } for a in ais { yield(Ok(a)); @@ -131,54 +128,92 @@ mod tests { use crate::test_utils::*; use pretty_assertions::assert_eq; use tokio::fs::File; - - #[test] - fn test_inner_filename() { - for (a, b) in &[ - ("hi/test.tgz", "hi/test.tar"), - ("hi/hello.gz", "hi/hello"), - ("a/b/initramfs", "a/b/initramfs"), - ("hi/test.tbz2", "hi/test.tar"), - ("hi/test.tbz", "hi/test.tar"), - ("hi/test.hi.bz2", "hi/test.hi"), - ("hello.tar.gz", "hello.tar"), - ] { - assert_eq!(get_inner_filename(&PathBuf::from(a)), PathBuf::from(*b)); - } - } + use tokio_stream::StreamExt; #[tokio::test] - async fn gz() -> Result<()> { + async fn mail_simple() -> Result<()> { let adapter = MboxAdapter; - let filepath = test_data_dir().join("hello.gz"); + let filepath = test_data_dir().join("github_email.eml"); let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); - let r = adapter.adapt(a, &d)?; - let o = adapted_to_vec(r).await?; - assert_eq!(String::from_utf8(o)?, "hello\n"); + let mut r = adapter.adapt(a, &d).await?; + let mut count = 0; + while let Some(file) = r.next().await { + let mut file = file?; + let mut buf = Vec::new(); + file.inp.read_to_end(&mut buf).await?; + match file.filepath_hint.components().last().unwrap().as_os_str().to_str().unwrap() { + "data.txt" | "data.html" => { + assert!(String::from_utf8(buf)?.contains("Thank you for your contribution")); + }, + x => panic!("unexpected filename {x:?}"), + } + count += 1; + } + assert_eq!(2, count); Ok(()) } #[tokio::test] - async fn pdf_gz() -> Result<()> { + async fn mbox_simple() -> Result<()> { let adapter = MboxAdapter; - let filepath = test_data_dir().join("short.pdf.gz"); + let filepath = test_data_dir().join("test.mbx"); let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); - let r = loop_adapt(&adapter, d, a)?; - let o = adapted_to_vec(r).await?; - assert_eq!( - String::from_utf8(o)?, - "PREFIX:Page 1: hello world -PREFIX:Page 1: this is just a test. -PREFIX:Page 1: -PREFIX:Page 1: 1 -PREFIX:Page 1: -PREFIX:Page 1: -" - ); + let mut r = adapter.adapt(a, &d).await?; + let mut count = 0; + while let Some(file) = r.next().await { + let mut file = file?; + assert_eq!( + "data.html", + file.filepath_hint.components().last().unwrap().as_os_str() + ); + let mut buf = Vec::new(); + file.inp.read_to_end(&mut buf).await?; + assert_eq!("\r\n \r\n \r\n \r\n \r\n

>From

\r\n

Another word >From
\r\n

\r\n \r\n", String::from_utf8(buf)?.trim()); + count += 1; + } + assert_eq!(3, count); + Ok(()) + } + + #[tokio::test] + async fn mbox_attachment() -> Result<()> { + let adapter = MboxAdapter; + + let filepath = test_data_dir().join("mail_with_attachment.mbox"); + + let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); + let mut r = loop_adapt(&adapter, d, a).await?; + let mut count = 0; + while let Some(file) = r.next().await { + let mut file = file?; + let path = file + .filepath_hint + .components() + .last() + .unwrap() + .as_os_str() + .to_str() + .unwrap(); + let mut buf = Vec::new(); + file.inp.read_to_end(&mut buf).await?; + match path { + "data.html.txt" => { + assert_eq!("PREFIX:regular text\nPREFIX:\n", String::from_utf8(buf)?); + } + "short.pdf.txt" => { + assert_eq!("PREFIX:Page 1: hello world\nPREFIX:Page 1: this is just a test.\nPREFIX:Page 1: \nPREFIX:Page 1: 1\nPREFIX:Page 1: \nPREFIX:Page 1: \n", String::from_utf8(buf)?); + } + _ => { + panic!("unrelated {path:?}"); + } + } + count += 1; + } + assert_eq!(2, count); // one message + one attachment Ok(()) } }