From dee0767b197f96cb4ffd4e6ad3d303feb9245d41 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 11 Nov 2018 21:38:11 +0100 Subject: Add `zip::license()` to make a Zip archive of a license plist --- license-generator/src/errors.rs | 2 ++ license-generator/src/lib.rs | 2 ++ license-generator/src/zip.rs | 48 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 license-generator/src/zip.rs (limited to 'license-generator/src') 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: 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#" + + + + Email + user@email.com + Name + Üsér Diacriticà + Signature + RIhF/3CgyXzPg2wCQ5LShf6W9khtqPcqUDLAHcAZdOIcoeR7PoOHi15423kxq5jOh1lmcztBoUJFu8mB45MHE0jmmbRw3qK6FJz9Py2gi1XvGOgH3GW713OCvQBE7vfBj4ZriP0+FS18nLfrtM6Xp0mAd1la4DD4oh7d35dlYTY= + lowercase key + Keys should be sorted case-insensitive + +"#; + + license(file, plist.as_bytes()).unwrap(); + } +} -- cgit v1.2.3