diff options
author | Teddy Wing | 2018-11-11 21:38:11 +0100 |
---|---|---|
committer | Teddy Wing | 2018-11-11 21:38:11 +0100 |
commit | dee0767b197f96cb4ffd4e6ad3d303feb9245d41 (patch) | |
tree | 3731371ffa116c73c1a1b9db5393a83c66dcc459 /license-generator/src | |
parent | da0d7c41da0161a56330a7d07b15b893d319a3ab (diff) | |
download | dome-key-web-dee0767b197f96cb4ffd4e6ad3d303feb9245d41.tar.bz2 |
Add `zip::license()` to make a Zip archive of a license plist
Diffstat (limited to 'license-generator/src')
-rw-r--r-- | license-generator/src/errors.rs | 2 | ||||
-rw-r--r-- | license-generator/src/lib.rs | 2 | ||||
-rw-r--r-- | license-generator/src/zip.rs | 48 |
3 files changed, 52 insertions, 0 deletions
diff --git a/license-generator/src/errors.rs b/license-generator/src/errors.rs index 0799c3e..c7aadc6 100644 --- a/license-generator/src/errors.rs +++ b/license-generator/src/errors.rs @@ -1,6 +1,7 @@ use log; use mysql; use paddle; +use zip_lib; error_chain! { foreign_links { @@ -9,6 +10,7 @@ error_chain! { Log(log::SetLoggerError); MySql(mysql::error::Error); + Zip(zip_lib::result::ZipError); Paddle(paddle::errors::Error); } diff --git a/license-generator/src/lib.rs b/license-generator/src/lib.rs index 3e8ae4b..11051cc 100644 --- a/license-generator/src/lib.rs +++ b/license-generator/src/lib.rs @@ -8,6 +8,7 @@ extern crate paddle; extern crate rand; extern crate sha1; extern crate url; +extern crate zip as zip_lib; pub mod database; @@ -16,3 +17,4 @@ pub mod params; pub mod purchaser; pub mod request; pub mod response; +pub mod zip; 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(); + } +} |