diff --git a/core/Cargo.toml b/core/Cargo.toml index 2b4f6d5..db6568b 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -14,6 +14,8 @@ dotenv = "0.15.0" tokio = "1.21.2" futures = "0.3.25" +infer = "0.9" + # crypto argon2 = { version = "0.4", features = ["std"] } age = { version = "0.9", features = ["async"] } diff --git a/core/src/filetype.rs b/core/src/filetype.rs new file mode 100644 index 0000000..2d13ea7 --- /dev/null +++ b/core/src/filetype.rs @@ -0,0 +1,40 @@ +pub fn filetype_is_pdf(buffer: &[u8]) -> bool { + infer::archive::is_pdf(buffer) +} + +pub fn filetype_is_zip(buffer: &[u8]) -> bool { + infer::archive::is_zip(buffer) +} + +mod tests { + + #[test] + fn test_filetype_is_pdf() { + const PDF: &[u8] = &[37, 80, 68, 70, 45, 49, 46, 49, 10, 37, 194, 165, 194, 177, 195, 171, 10, 10, 49, 32, 48, 32, 111, 98, 106, 10, 32, 32, 60, 60, 32, 47, 84, 121, 112, 101, 32, 47, 67, 97, 116, 97, 108, 111, 103, 10, 32, 32, 32, 32, 32, 47, 80, 97, 103, 101, 115, 32, 50, 32, 48, 32, 82, 10, 32, 32, 62, 62, 10, 101, 110, 100, 111, 98, 106, 10, 10, 50, 32, 48, 32, 111, 98, 106, 10, 32, 32, 60, 60, 32, 47, 84, 121, 112, 101, 32, 47, 80, 97, 103, 101, 115, 10, 32, 32, 32, 32, 32, 47, 75, 105, 100, 115, 32, 91, 51, 32, 48, 32, 82, 93, 10, 32, 32, 32, 32, 32, 47, 67, 111, 117, 110, 116, 32, 49, 10, 32, 32, 32, 32, 32, 47, 77, 101, 100, 105, 97, 66, 111, 120, 32, 91, 48, 32, 48, 32, 51, 48, 48, 32, 49, 52, 52, 93, 10, 32, 32, 62, 62, 10, 101, 110, 100, 111, 98, 106, 10, 10, 51, 32, 48, 32, 111, 98, 106, 10, 32, 32, 60, 60, 32, 32, 47, 84, 121, 112, 101, 32, 47, 80, 97, 103, 101, 10, 32, 32, 32, 32, 32, 32, 47, 80, 97, 114, 101, 110, 116, 32, 50, 32, 48, 32, 82, 10, 32, 32, 32, 32, 32, 32, 47, 82, 101, 115, 111, 117, 114, 99, 101, 115, 10, 32, 32, 32, 32, 32, 32, 32, 60, 60, 32, 47, 70, 111, 110, 116, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 60, 32, 47, 70, 49, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 60, 32, 47, 84, 121, 112, 101, 32, 47, 70, 111, 110, 116, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 83, 117, 98, 116, 121, 112, 101, 32, 47, 84, 121, 112, 101, 49, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 66, 97, 115, 101, 70, 111, 110, 116, 32, 47, 84, 105, 109, 101, 115, 45, 82, 111, 109, 97, 110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 62, 62, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 62, 62, 10, 32, 32, 32, 32, 32, 32, 32, 62, 62, 10, 32, 32, 32, 32, 32, 32, 47, 67, 111, 110, 116, 101, 110, 116, 115, 32, 52, 32, 48, 32, 82, 10, 32, 32, 62, 62, 10, 101, 110, 100, 111, 98, 106, 10, 10, 52, 32, 48, 32, 111, 98, 106, 10, 32, 32, 60, 60, 32, 47, 76, 101, 110, 103, 116, 104, 32, 53, 53, 32, 62, 62, 10, 115, 116, 114, 101, 97, 109, 10, 32, 32, 66, 84, 10, 32, 32, 32, 32, 47, 70, 49, 32, 49, 56, 32, 84, 102, 10, 32, 32, 32, 32, 48, 32, 48, 32, 84, 100, 10, 32, 32, 32, 32, 40, 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 41, 32, 84, 106, 10, 32, 32, 69, 84, 10, 101, 110, 100, 115, 116, 114, 101, 97, 109, 10, 101, 110, 100, 111, 98, 106, 10, 10, 120, 114, 101, 102, 10, 48, 32, 53, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 54, 53, 53, 51, 53, 32, 102, 32, 10, 48, 48, 48, 48, 48, 48, 48, 48, 49, 56, 32, 48, 48, 48, 48, 48, 32, 110, 32, 10, 48, 48, 48, 48, 48, 48, 48, 48, 55, 55, 32, 48, 48, 48, 48, 48, 32, 110, 32, 10, 48, 48, 48, 48, 48, 48, 48, 49, 55, 56, 32, 48, 48, 48, 48, 48, 32, 110, 32, 10, 48, 48, 48, 48, 48, 48, 48, 52, 53, 55, 32, 48, 48, 48, 48, 48, 32, 110, 32, 10, 116, 114, 97, 105, 108, 101, 114, 10, 32, 32, 60, 60, 32, 32, 47, 82, 111, 111, 116, 32, 49, 32, 48, 32, 82, 10, 32, 32, 32, 32, 32, 32, 47, 83, 105, 122, 101, 32, 53, 10, 32, 32, 62, 62, 10, 115, 116, 97, 114, 116, 120, 114, 101, 102, 10, 53, 54, 53, 10, 37, 37, 69, 79, 70, 10]; + + assert!(super::filetype_is_pdf(PDF)); + } + + #[test] + fn test_filetype_is_pdf_2() { + const EMPTY: &[u8] = &[]; + + assert!(!super::filetype_is_pdf(EMPTY)); + } + + #[test] + fn test_filetype_is_zip() { + const ZIP: &[u8] = &[80, 75, 3, 4, 20, 0, 8, 0, 8, 0, 47, 158, 92, 85, 0, 0, 0, 0, 0, 0, 0, 0, 227, 2, 0, 0, 9, 0, 32, 0, 98, 108, 97, 110, 107, 46, 112, 100, 102, 85, 84, 13, 0, 7, 43, 22, 92, 99, 65, 22, 92, 99, 67, 22, 92, 99, 117, 120, 11, 0, 1, 4, 246, 1, 0, 0, 4, 20, 0, 0, 0, 109, 82, 61, 111, 194, 48, 16, 221, 253, 43, 110, 137, 212, 14, 52, 49, 137, 161, 3, 98, 128, 130, 42, 181, 85, 81, 136, 212, 1, 49, 152, 198, 208, 84, 33, 174, 108, 35, 209, 254, 159, 78, 157, 250, 23, 232, 31, 227, 156, 175, 6, 130, 167, 187, 231, 247, 238, 221, 157, 237, 204, 238, 166, 29, 122, 67, 137, 115, 248, 62, 252, 254, 253, 16, 66, 193, 3, 185, 122, 39, 0, 131, 1, 184, 209, 231, 135, 0, 119, 204, 13, 79, 229, 6, 49, 60, 238, 140, 111, 132, 134, 46, 242, 66, 68, 134, 67, 34, 178, 216, 42, 72, 247, 130, 52, 39, 151, 194, 135, 36, 214, 176, 240, 173, 112, 89, 66, 99, 185, 203, 12, 208, 50, 123, 18, 113, 194, 71, 114, 15, 11, 15, 73, 190, 231, 1, 13, 130, 229, 169, 137, 223, 52, 105, 186, 20, 53, 108, 172, 4, 214, 172, 250, 203, 177, 80, 104, 185, 83, 175, 85, 39, 69, 131, 83, 153, 153, 42, 175, 49, 218, 68, 42, 180, 48, 57, 231, 151, 199, 157, 239, 86, 38, 39, 88, 90, 75, 111, 25, 35, 174, 133, 85, 35, 37, 217, 10, 221, 9, 229, 150, 103, 231, 68, 156, 241, 98, 86, 71, 184, 172, 204, 224, 104, 26, 130, 246, 238, 131, 147, 221, 63, 138, 108, 99, 222, 128, 49, 75, 209, 70, 9, 190, 197, 155, 81, 148, 87, 194, 33, 129, 222, 66, 180, 206, 51, 187, 233, 40, 206, 195, 171, 123, 145, 166, 18, 94, 164, 74, 227, 107, 136, 108, 177, 73, 100, 29, 202, 10, 149, 215, 94, 137, 53, 241, 128, 17, 175, 62, 208, 99, 204, 103, 176, 134, 26, 67, 135, 226, 38, 251, 199, 250, 253, 22, 70, 251, 109, 94, 192, 26, 60, 163, 120, 146, 10, 85, 189, 119, 40, 37, 254, 151, 230, 219, 206, 147, 47, 129, 189, 64, 49, 42, 87, 38, 111, 143, 245, 24, 113, 156, 201, 243, 148, 28, 1, 80, 75, 7, 8, 145, 156, 25, 92, 90, 1, 0, 0, 227, 2, 0, 0, 80, 75, 3, 4, 20, 0, 8, 0, 8, 0, 47, 158, 92, 85, 0, 0, 0, 0, 0, 0, 0, 0, 40, 1, 0, 0, 20, 0, 32, 0, 95, 95, 77, 65, 67, 79, 83, 88, 47, 46, 95, 98, 108, 97, 110, 107, 46, 112, 100, 102, 85, 84, 13, 0, 7, 43, 22, 92, 99, 65, 22, 92, 99, 70, 22, 92, 99, 117, 120, 11, 0, 1, 4, 246, 1, 0, 0, 4, 20, 0, 0, 0, 99, 96, 21, 99, 103, 96, 98, 96, 240, 77, 76, 86, 240, 15, 86, 136, 80, 128, 2, 144, 24, 3, 39, 16, 27, 1, 241, 55, 32, 6, 242, 25, 53, 24, 136, 2, 142, 33, 33, 65, 16, 22, 88, 199, 1, 32, 206, 64, 83, 194, 4, 21, 23, 96, 96, 144, 74, 206, 207, 213, 75, 44, 40, 200, 73, 213, 203, 73, 44, 46, 41, 45, 78, 77, 73, 73, 44, 73, 85, 14, 8, 134, 170, 189, 0, 196, 17, 12, 12, 162, 8, 117, 133, 165, 137, 69, 137, 121, 37, 153, 121, 169, 12, 102, 98, 49, 201, 32, 69, 231, 148, 106, 192, 174, 43, 212, 55, 48, 176, 48, 182, 54, 51, 54, 77, 54, 52, 51, 74, 178, 70, 104, 10, 78, 76, 75, 44, 202, 4, 82, 121, 41, 73, 249, 21, 78, 69, 249, 217, 169, 69, 122, 21, 5, 201, 214, 78, 70, 78, 38, 198, 6, 38, 198, 186, 166, 150, 142, 46, 186, 38, 38, 6, 46, 186, 150, 46, 6, 134, 186, 6, 230, 46, 206, 70, 78, 206, 46, 230, 102, 38, 230, 12, 0, 80, 75, 7, 8, 47, 121, 186, 89, 194, 0, 0, 0, 40, 1, 0, 0, 80, 75, 1, 2, 20, 3, 20, 0, 8, 0, 8, 0, 47, 158, 92, 85, 145, 156, 25, 92, 90, 1, 0, 0, 227, 2, 0, 0, 9, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 129, 0, 0, 0, 0, 98, 108, 97, 110, 107, 46, 112, 100, 102, 85, 84, 13, 0, 7, 43, 22, 92, 99, 65, 22, 92, 99, 67, 22, 92, 99, 117, 120, 11, 0, 1, 4, 246, 1, 0, 0, 4, 20, 0, 0, 0, 80, 75, 1, 2, 20, 3, 20, 0, 8, 0, 8, 0, 47, 158, 92, 85, 47, 121, 186, 89, 194, 0, 0, 0, 40, 1, 0, 0, 20, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 129, 177, 1, 0, 0, 95, 95, 77, 65, 67, 79, 83, 88, 47, 46, 95, 98, 108, 97, 110, 107, 46, 112, 100, 102, 85, 84, 13, 0, 7, 43, 22, 92, 99, 65, 22, 92, 99, 70, 22, 92, 99, 117, 120, 11, 0, 1, 4, 246, 1, 0, 0, 4, 20, 0, 0, 0, 80, 75, 5, 6, 0, 0, 0, 0, 2, 0, 2, 0, 185, 0, 0, 0, 213, 2, 0, 0, 0, 0]; + + assert!(super::filetype_is_zip(ZIP)); + } + + #[test] + fn test_filetype_is_zip_2() { + const EMPTY: &[u8] = &[]; + + assert!(!super::filetype_is_zip(EMPTY)); + } + +} + diff --git a/core/src/lib.rs b/core/src/lib.rs index 71b5ace..7da383a 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -2,6 +2,7 @@ mod mutation; mod query; pub mod crypto; pub mod token; +pub mod filetype; pub mod services; pub mod error;