aboutsummaryrefslogtreecommitdiffstats
path: root/license-generator/src/zip.rs
diff options
context:
space:
mode:
authorTeddy Wing2018-11-11 21:38:11 +0100
committerTeddy Wing2018-11-11 21:38:11 +0100
commitdee0767b197f96cb4ffd4e6ad3d303feb9245d41 (patch)
tree3731371ffa116c73c1a1b9db5393a83c66dcc459 /license-generator/src/zip.rs
parentda0d7c41da0161a56330a7d07b15b893d319a3ab (diff)
downloaddome-key-web-dee0767b197f96cb4ffd4e6ad3d303feb9245d41.tar.bz2
Add `zip::license()` to make a Zip archive of a license plist
Diffstat (limited to 'license-generator/src/zip.rs')
-rw-r--r--license-generator/src/zip.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/license-generator/src/zip.rs b/license-generator/src/zip.rs
new file mode 100644
index 0000000..6c08368
--- /dev/null
+++ b/license-generator/src/zip.rs
@@ -0,0 +1,48 @@
+use std::io::{Seek, Write};
+
+use zip_lib as zip;
+
+use errors::*;
+
+pub fn license<W: Write + Seek>(w: W, plist: &[u8]) -> Result<()> {
+ let mut zip = zip::ZipWriter::new(w);
+
+ zip.start_file(
+ "dome-key-license.plist",
+ zip::write::FileOptions::default()
+ )?;
+ zip.write(plist)?;
+ zip.finish()?;
+
+ Ok(())
+}
+
+
+#[cfg(test)]
+mod tests {
+ use std::fs::File;
+
+ use super::license;
+
+ #[test]
+ #[ignore]
+ fn license_produces_a_valid_zip_file() {
+ let file = File::create("/tmp/license.zip").unwrap();
+ let plist = r#"<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Email</key>
+ <string>user@email.com</string>
+ <key>Name</key>
+ <string>Üsér Diacriticà</string>
+ <key>Signature</key>
+ <data>RIhF/3CgyXzPg2wCQ5LShf6W9khtqPcqUDLAHcAZdOIcoeR7PoOHi15423kxq5jOh1lmcztBoUJFu8mB45MHE0jmmbRw3qK6FJz9Py2gi1XvGOgH3GW713OCvQBE7vfBj4ZriP0+FS18nLfrtM6Xp0mAd1la4DD4oh7d35dlYTY=</data>
+ <key>lowercase key</key>
+ <string>Keys should be sorted case-insensitive</string>
+</dict>
+</plist>"#;
+
+ license(file, plist.as_bytes()).unwrap();
+ }
+}