- 1
//! Office document tools (docs/design/72-openxml-documents.md): `doc_read` - 2
//! is a path-scoped read, `office_apply` a path-scoped write. - 3
- 4
#![allow(clippy::unwrap_used, clippy::expect_used)] - 5
- 6
use serde_json::json; - 7
use vak_permission::{Decision, Mode, PermissionEngine}; - 8
- 9
fn decide(tool: &str, path: &str, mode: Mode) -> Decision { - 10
let workspace = std::env::temp_dir().join(format!( - 11
"vak-perm-documents-{}-{:?}", - 12
std::process::id(), - 13
std::thread::current().id() - 14
)); - 15
std::fs::create_dir_all(&workspace).unwrap(); - 16
let decision = - 17
PermissionEngine::default().evaluate(tool, &json!({ "path": path }), mode, &workspace); - 18
let _ = std::fs::remove_dir_all(&workspace); - 19
decision - 20
} - 21
- 22
#[test] - 23
fn doc_read_is_a_read_confined_to_the_workspace() { - 24
for mode in [Mode::ReadOnly, Mode::WorkspaceWrite] { - 25
assert!( - 26
matches!(decide("doc_read", "report.docx", mode), Decision::Allow), - 27
"{mode:?}" - 28
); - 29
assert!( - 30
matches!( - 31
decide("doc_read", "/etc/passwd", mode), - 32
Decision::Deny { .. } - 33
), - 34
"{mode:?}" - 35
); - 36
} - 37
} - 38
- 39
#[test] - 40
fn office_apply_is_a_write() { - 41
assert!(matches!( - 42
decide("office_apply", "report.docx", Mode::WorkspaceWrite), - 43
Decision::Allow - 44
)); - 45
assert!(matches!( - 46
decide( - 47
"office_apply", - 48
"/elsewhere/report.docx", - 49
Mode::WorkspaceWrite - 50
), - 51
Decision::Ask { .. } - 52
)); - 53
assert!(matches!( - 54
decide("office_apply", "report.docx", Mode::ReadOnly), - 55
Decision::Deny { .. } - 56
)); - 57
} - 58
Indexing the workspace…
Vakyartha documentation is discovering safe artifacts, anchors, and source references.