Skip to content

Commit 274f0f1

Browse files
committed
CloudKit sharing and Shared Passwords
1 parent 706dcc8 commit 274f0f1

23 files changed

Lines changed: 3310 additions & 529 deletions

build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ fn main() -> Result<()> {
44
let mut prost_build = prost_build::Config::new();
55
// Enable a protoc experimental feature.
66
prost_build.protoc_arg("--experimental_allow_proto3_optional");
7-
prost_build.compile_protos(&["src/icloud/mmcs.proto", "src/ids/ids.proto", "src/facetime.proto", "src/statuskit.proto", "src/imessage/cloud_messages.proto"], &["src/"])?;
7+
prost_build.compile_protos(&["src/icloud/mmcs.proto", "src/ids/ids.proto", "src/facetime.proto", "src/statuskit.proto", "src/imessage/cloud_messages.proto", "src/passwords.proto"], &["src/"])?;
88
Ok(())
99
}

cloudkit-derive/src/lib.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ struct CloudKitAttributes {
2121
rename: Option<String>,
2222
encrypted: Flag,
2323
unencrypted: Flag,
24+
skip: Flag,
2425
}
2526

2627
fn snake_to_camel(s: &str) -> String {
@@ -56,8 +57,9 @@ pub fn cloudkitrecord_derive(input: TokenStream) -> TokenStream {
5657
let mut fields: Vec<proc_macro2::TokenStream> = vec![];
5758
let mut read_fields: Vec<proc_macro2::TokenStream> = vec![];
5859
for mut field in s.fields {
59-
let CloudKitAttributes { rename, encrypted, unencrypted } = deluxe::extract_attributes(&mut field).unwrap();
60+
let CloudKitAttributes { rename, encrypted, unencrypted, skip } = deluxe::extract_attributes(&mut field).unwrap();
6061

62+
if skip.into() { continue }
6163
let mut is_encrypted: bool = record_encrypted.into();
6264
if encrypted.into() {
6365
is_encrypted = true;
@@ -83,9 +85,8 @@ pub fn cloudkitrecord_derive(input: TokenStream) -> TokenStream {
8385
if is_encrypted {
8486
fields.push(quote! {
8587
{
86-
let e = encryptor.as_ref().expect("No encryption key provided for record decryption!");
87-
let tag = format!("{}-{}-{}", e.1.zone_identifier.as_ref().unwrap().value.as_ref().unwrap().name(), e.1.value.as_ref().unwrap().name(), #name_lit);
88-
if let Some(field) = cloudkit_proto::CloudKitEncryptedValue::to_value_encrypted(&self.#ident, e.0, tag.as_bytes()) {
88+
let e = encryptor.expect("No encryption key provided for record decryption!");
89+
if let Some(field) = cloudkit_proto::CloudKitEncryptedValue::to_value_encrypted(&self.#ident, e, #name_lit) {
8990
results.push(cloudkit_proto::record::Field {
9091
identifier: Some(cloudkit_proto::record::field::Identifier {
9192
name: Some(#name.to_string())
@@ -97,9 +98,8 @@ pub fn cloudkitrecord_derive(input: TokenStream) -> TokenStream {
9798
});
9899
read_fields.push(quote! {
99100
#name => {
100-
let e = encryptor.as_ref().expect("No encryption key provided for record decryption!");
101-
let tag = format!("{}-{}-{}", e.1.zone_identifier.as_ref().unwrap().value.as_ref().unwrap().name(), e.1.value.as_ref().unwrap().name(), #name_lit);
102-
default.#ident = cloudkit_proto::CloudKitEncryptedValue::from_value_encrypted(data.value.as_ref().expect("No Value??"), e.0, tag.as_bytes()).expect(&format!("Field {} not found!", #name_lit));
101+
let e = encryptor.expect("No encryption key provided for record decryption!");
102+
default.#ident = cloudkit_proto::CloudKitEncryptedValue::from_value_encrypted(data.value.as_ref().expect("No Value??"), e, #name_lit).expect(&format!("Field {} not found!", #name_lit));
103103
}
104104
})
105105
} else {
@@ -123,15 +123,15 @@ pub fn cloudkitrecord_derive(input: TokenStream) -> TokenStream {
123123

124124
quote! {
125125
impl cloudkit_proto::CloudKitRecord for #name {
126-
fn to_record_encrypted(&self, encryptor: Option<(&impl CloudKitEncryptor, &RecordIdentifier)>) -> Vec<cloudkit_proto::record::Field> {
126+
fn to_record_encrypted(&self, encryptor: Option<&impl CloudKitEncryptor>) -> Vec<cloudkit_proto::record::Field> {
127127
let mut results = Vec::with_capacity(#field_count);
128128

129129
#(#fields)*
130130

131131
results
132132
}
133133

134-
fn from_record_encrypted(value: &[cloudkit_proto::record::Field], encryptor: Option<(&impl CloudKitEncryptor, &RecordIdentifier)>) -> Self
134+
fn from_record_encrypted(value: &[cloudkit_proto::record::Field], encryptor: Option<&impl CloudKitEncryptor>) -> Self
135135
where
136136
Self: Sized {
137137
let mut default = Self::default();

0 commit comments

Comments
 (0)