aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-11-07 17:52:28 +0100
committerTeddy Wing2018-11-07 17:52:28 +0100
commitab9345bbfc8683f877766f2ff9d33b7d49045770 (patch)
tree8765ff2bbafca24e6324aa3abcad75cf5499e8e9
parent70dcef3a47c11f921d8d742b2e1667e178a90b8f (diff)
downloaddome-key-web-ab9345bbfc8683f877766f2ff9d33b7d49045770.tar.bz2
AquaticPrime: Clean up `plist()`
Clean up the code from 70dcef3a47c11f921d8d742b2e1667e178a90b8f. * Remove commented code * Remove debug print statements * Rename variables to make more sense * Return the plist XML from the function * Change `sign()` to take a `HashMap<String, String>` instead of `HashMap<&str, &str>` so we don't have to convert the deserialized `HashMap<String, String>` in `plist()`
-rw-r--r--license-generator/aquatic-prime/src/lib.rs95
1 files changed, 27 insertions, 68 deletions
diff --git a/license-generator/aquatic-prime/src/lib.rs b/license-generator/aquatic-prime/src/lib.rs
index 7aea16f..8c734fd 100644
--- a/license-generator/aquatic-prime/src/lib.rs
+++ b/license-generator/aquatic-prime/src/lib.rs
@@ -38,8 +38,8 @@ struct AquaticPrime<'a> {
}
impl<'a> AquaticPrime<'a> {
- fn sign(&self, input_data: HashMap<&str, &str>) -> Result<String> {
- let mut input_data: Vec<(&str, &str)> = input_data
+ fn sign(&self, input_data: HashMap<String, String>) -> Result<String> {
+ let mut input_data: Vec<(String, String)> = input_data
.into_iter()
.collect();
input_data.sort_unstable_by_key(|el| el.0.to_lowercase());
@@ -47,7 +47,7 @@ impl<'a> AquaticPrime<'a> {
let data = input_data
.into_iter()
.map(|(_k, v)| v)
- .collect::<Vec<&str>>()
+ .collect::<Vec<String>>()
.concat();
let public_key = self.public_key.trim_left_matches("0x");
@@ -87,79 +87,35 @@ impl<'a> AquaticPrime<'a> {
Ok(base64::encode(&signature[..]))
}
- // TODO: Should take a plistable object as input
- // Serialize input_data to a Plist (input_data doesn't include signature field?)
- // Get the BTreeMap out and send it to sign()
- // Insert signature into Plist BTreeMap
- // Output plist string
- //
- // fn plist(&self, input_data: HashMap<&str, &str>) -> Result<String> {
fn plist<T: Serialize>(&self, input_data: T) -> Result<String> {
- // let signature = self.sign(input_data.clone());
- // let mut data: BTreeMap<&str, &str> = input_data
- // .into_iter()
- // .collect();
- //
- // data.insert();
- // let mut tmp = String::with_capacity(600);
- let mut tmp = Vec::with_capacity(600);
+ // Get input as `Plist`
+ let mut xml_for_plist = Vec::with_capacity(600);
- plist::serde::serialize_to_xml(&mut tmp, &input_data).unwrap();
- // let xml = String::from_utf8(tmp).unwrap();
+ plist::serde::serialize_to_xml(&mut xml_for_plist, &input_data).unwrap();
+ let xml_for_hash_map = xml_for_plist.clone();
- // println!("Serialized: {}", xml);
-
- // let le_plist: Plist = plist::serde::deserialize(Cursor::new(&tmp[..])).unwrap();
- let tmp2 = tmp.clone();
- let plist_data = Plist::read(Cursor::new(&tmp)).unwrap();
- println!("{:?}", plist_data);
+ let plist_data = Plist::read(Cursor::new(&xml_for_plist)).unwrap();
let mut plist_dict = plist_data.as_dictionary().unwrap().to_owned();
- // let hash_data: BTreeMap<String, String> = data
- // .into_iter()
- // .map(|(k, v)| (k, String::from(v)))
- // .collect();
-
- // let hash_data: BTreeMap<&str, &str> = data.into_iter().collect();
- // self.sign(data);
- // data.insert();
-
- // let data_a = BTreeMap::new();
- // for (k, v) in data.iter() {
- // data_a.insert(k, String::from(v));
- // }
-
- let data: HashMap<String, String> = plist::serde::deserialize(Cursor::new(&tmp2)).unwrap();
- println!("{:?}", data);
- let mut data_a = HashMap::new();
- for (k, v) in data.iter() {
- data_a.insert(k.as_ref(), v.as_ref());
- }
-
- let signature = self.sign(data_a).unwrap();
- println!("Signature: {}", signature);
-
- // Re-serialise to Plist
- // Add signature as Data type
+ // Get input as HashMap to send to `sign()`
+ let data: HashMap<String, String> = plist::serde::deserialize(Cursor::new(&xml_for_hash_map)).unwrap();
+ let signature = self.sign(data).unwrap();
plist_dict.insert("Signature".to_owned(), Plist::Data(signature.into_bytes()));
- let mut tmp_return = Cursor::new(Vec::with_capacity(600));
- // plist::serde::serialize_to_xml(&mut tmp_return, &plist_data).unwrap();
- // println!("Output: {}", tmp_return);
+ // Generate plist XML string
+ let mut plist_xml = Cursor::new(Vec::with_capacity(600));
{
- let mut writer = plist::xml::EventWriter::new(&mut tmp_return);
- // let plist_plist = Plist::Dictionary(plist_data);
- for item in Plist::Dictionary(plist_dict).into_events() {
- writer.write(&item).unwrap();
- }
- }
+ let mut writer = plist::xml::EventWriter::new(&mut plist_xml);
- println!("Output: {}", String::from_utf8(tmp_return.into_inner()).unwrap());
+ for item in Plist::Dictionary(plist_dict).into_events() {
+ writer.write(&item).unwrap();
+ }
+ }
- Ok(String::new())
+ Ok(String::from_utf8(plist_xml.into_inner()).unwrap())
}
}
@@ -179,8 +135,8 @@ mod tests {
};
let mut license_data = HashMap::new();
- license_data.insert("Email", "user@email.com");
- license_data.insert("Name", "User");
+ license_data.insert("Email".to_owned(), "user@email.com".to_owned());
+ license_data.insert("Name".to_owned(), "User".to_owned());
let signature = aquatic_prime.sign(license_data);
@@ -192,9 +148,12 @@ mod tests {
let mut license_data = HashMap::new();
- license_data.insert("Email", "user@email.com");
- license_data.insert("Name", "Üsér Diacriticà");
- license_data.insert("lowercase key", "Keys should be sorted case-insensitive");
+ license_data.insert("Email".to_owned(), "user@email.com".to_owned());
+ license_data.insert("Name".to_owned(), "Üsér Diacriticà".to_owned());
+ license_data.insert(
+ "lowercase key".to_owned(),
+ "Keys should be sorted case-insensitive".to_owned()
+ );
let signature = aquatic_prime.sign(license_data);