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(); +    } +} | 
