From b1749da9be9233c9e772673c978f17a4059189a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Wed, 21 Mar 2018 01:07:48 +0100 Subject: [PATCH] Fixed cipher API response to always uppercase first letter of JSON object keys --- src/api/core/ciphers.rs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/api/core/ciphers.rs b/src/api/core/ciphers.rs index 9c650d18..6bcd9464 100644 --- a/src/api/core/ciphers.rs +++ b/src/api/core/ciphers.rs @@ -176,26 +176,30 @@ fn update_cipher_from_data(cipher: &mut Cipher, data: CipherData, headers: &Head }; // Copy the type data and change the names to the correct case - if !copy_values(&type_data, &mut values) { - err!("Data invalid") - } + copy_values(&type_data, &mut values); cipher.data = values.to_string(); Ok(()) } -fn copy_values(from: &Value, to: &mut Value) -> bool { - let map = match from.as_object() { - Some(map) => map, - None => return false - }; +fn copy_values(from: &Value, to: &mut Value) { + if let Some(map) = from.as_object() { + for (key, val) in map { + copy_values(val, &mut to[util::upcase_first(key)]); + } - for (key, val) in map { - to[util::upcase_first(key)] = val.clone(); + } else if let Some(array) = from.as_array() { + // Initialize array with null values + *to = json!(vec![Value::Null; array.len()]); + + for (index, val) in array.iter().enumerate() { + copy_values(val, &mut to[index]); + } + + } else { + *to = from.clone(); } - - true } use super::folders::FolderData;