Artifact
6c9b9becf862df9a29bf6444d5d2a1be7d3657b48ce3639970d2f14e6888cec6:
0000: 75 73 65 20 63 72 61 74 65 3a 3a 43 75 72 73 6f use crate::Curso
0010: 72 3b 0a 0a 75 73 65 20 6c 61 7a 79 5f 73 74 61 r;..use lazy_sta
0020: 74 69 63 3a 3a 6c 61 7a 79 5f 73 74 61 74 69 63 tic::lazy_static
0030: 3b 0a 75 73 65 20 72 65 67 65 78 3a 3a 52 65 67 ;.use regex::Reg
0040: 65 78 3b 0a 75 73 65 20 73 74 61 63 6b 65 64 5f ex;.use stacked_
0050: 65 72 72 6f 72 73 3a 3a 7b 0a 09 62 61 69 6c 2c errors::{..bail,
0060: 0a 09 52 65 73 75 6c 74 2c 0a 7d 3b 0a 0a 6c 61 ..Result,.};..la
0070: 7a 79 5f 73 74 61 74 69 63 21 20 7b 0a 09 70 75 zy_static! {..pu
0080: 62 20 73 74 61 74 69 63 20 72 65 66 20 52 45 5f b static ref RE_
0090: 44 4f 4d 41 49 4e 3a 20 52 65 67 65 78 20 3d 20 DOMAIN: Regex =
00a0: 52 65 67 65 78 3a 3a 6e 65 77 28 72 22 5e 5b 61 Regex::new(r"^[a
00b0: 2d 7a 30 2d 39 5d 28 5b 2d 61 2d 7a 30 2d 39 5d -z0-9]([-a-z0-9]
00c0: 2a 5b 61 2d 7a 30 2d 39 5d 29 3f 28 5c 2e 5b 61 *[a-z0-9])?(\.[a
00d0: 2d 7a 30 2d 39 5d 28 5b 2d 61 2d 7a 30 2d 39 5d -z0-9]([-a-z0-9]
00e0: 2a 5b 61 2d 7a 30 2d 39 5d 29 3f 29 2a 24 22 29 *[a-z0-9])?)*$")
00f0: 2e 75 6e 77 72 61 70 28 29 3b 0a 09 70 75 62 20 .unwrap();..pub
0100: 73 74 61 74 69 63 20 72 65 66 20 52 45 5f 43 4c static ref RE_CL
0110: 4f 53 49 4e 47 3a 20 52 65 67 65 78 20 3d 20 52 OSING: Regex = R
0120: 65 67 65 78 3a 3a 6e 65 77 28 72 22 3c 2f 5b 20 egex::new(r"</[
0130: 5c 74 5d 2a 28 70 72 65 7c 63 6f 64 65 29 5b 20 \t]*(pre|code)[
0140: 5c 74 5d 2a 3e 22 29 2e 75 6e 77 72 61 70 28 29 \t]*>").unwrap()
0150: 3b 0a 7d 0a 0a 2f 2f 2f 20 60 41 74 74 61 63 68 ;.}../// `Attach
0160: 6d 65 6e 74 60 20 6f 62 6a 65 63 74 20 74 6f 20 ment` object to
0170: 73 74 6f 72 65 20 6e 75 6d 62 65 72 20 61 74 74 store number att
0180: 61 63 68 6d 65 6e 74 20 64 61 74 61 20 61 6e 64 achment data and
0190: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 66 corresponding f
01a0: 69 6c 65 20 6e 61 6d 65 0a 23 5b 64 65 72 69 76 ile name.#[deriv
01b0: 65 28 44 65 62 75 67 29 5d 0a 70 75 62 20 73 74 e(Debug)].pub st
01c0: 72 75 63 74 20 41 74 74 61 63 68 6d 65 6e 74 20 ruct Attachment
01d0: 7b 0a 09 70 75 62 20 64 61 74 61 3a 20 43 75 72 {..pub data: Cur
01e0: 73 6f 72 3c 56 65 63 3c 75 38 3e 3e 2c 0a 09 70 sor<Vec<u8>>,..p
01f0: 75 62 20 6e 61 6d 65 3a 20 53 74 72 69 6e 67 2c ub name: String,
0200: 0a 7d 0a 0a 2f 2f 2f 20 50 61 73 73 20 61 6e 79 .}../// Pass any
0210: 20 74 65 78 74 20 68 65 72 65 20 74 6f 20 62 65 text here to be
0220: 20 76 61 6c 69 64 61 74 65 64 20 61 73 20 6e 6f validated as no
0230: 74 20 62 72 65 61 6b 69 6e 67 20 66 72 6f 6d 20 t breaking from
0240: 54 65 6c 65 67 72 61 6d 20 70 72 65 66 6f 72 6d Telegram preform
0250: 61 74 74 65 64 20 62 6c 6f 63 6b 73 0a 70 75 62 atted blocks.pub
0260: 20 66 6e 20 76 61 6c 69 64 61 74 65 20 28 74 65 fn validate (te
0270: 78 74 3a 20 26 73 74 72 29 20 2d 3e 20 52 65 73 xt: &str) -> Res
0280: 75 6c 74 3c 26 73 74 72 3e 20 7b 0a 09 69 66 20 ult<&str> {..if
0290: 52 45 5f 43 4c 4f 53 49 4e 47 2e 69 73 5f 6d 61 RE_CLOSING.is_ma
02a0: 74 63 68 28 74 65 78 74 29 20 7b 0a 09 09 62 61 tch(text) {...ba
02b0: 69 6c 21 28 22 54 65 6c 65 67 72 61 6d 20 63 6c il!("Telegram cl
02c0: 6f 73 69 6e 67 20 74 61 67 20 66 6f 75 6e 64 2e osing tag found.
02d0: 22 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 ");..} else {...
02e0: 4f 6b 28 74 65 78 74 29 0a 09 7d 0a 7d 0a Ok(text)..}.}.