aboutsummaryrefslogtreecommitdiffstats
path: root/license-generator/src
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
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')
-rw-r--r--license-generator/src/errors.rs2
-rw-r--r--license-generator/src/lib.rs2
-rw-r--r--license-generator/src/zip.rs48
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();
+ }
+}