Struct app_store_connect::AppStoreConnectClient
source · pub struct AppStoreConnectClient { /* private fields */ }Expand description
A client for App Store Connect API.
The client isn’t generic. Don’t get any ideas.
Implementations§
source§impl AppStoreConnectClient
impl AppStoreConnectClient
pub fn register_bundle_id(
&self,
identifier: &str,
name: &str
) -> Result<BundleIdResponse>
pub fn list_bundle_ids(&self) -> Result<BundleIdsResponse>
pub fn get_bundle_id(&self, id: &str) -> Result<BundleIdResponse>
pub fn delete_bundle_id(&self, id: &str) -> Result<()>
source§impl AppStoreConnectClient
impl AppStoreConnectClient
sourcepub fn create_certificate(
&self,
csr: String,
ty: CertificateType
) -> Result<CertificateResponse>
pub fn create_certificate(
&self,
csr: String,
ty: CertificateType
) -> Result<CertificateResponse>
Examples found in repository?
src/certs_api.rs (line 29)
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
pub fn generate_signing_certificate(api_key: &Path, ty: CertificateType, pem: &Path) -> Result<()> {
let secret = RsaPrivateKey::new(&mut OsRng, 2048)?;
let key = InMemorySigningKeyPair::from_pkcs8_der(secret.to_pkcs8_der()?.as_bytes())?;
let mut builder = X509CertificateBuilder::new(key.key_algorithm().unwrap());
builder
.subject()
.append_common_name_utf8_string("Apple Code Signing CSR")
.expect("only valid chars");
let csr = builder
.create_certificate_signing_request(&key)?
.encode_pem()?;
let cer = AppStoreConnectClient::from_json_path(api_key)?
.create_certificate(csr, ty)?
.data
.attributes
.certificate_content;
let cer = pem::encode(&pem::Pem {
tag: "CERTIFICATE".into(),
contents: base64::decode(cer)?,
});
let mut f = File::create(pem)?;
f.write_all(secret.to_pkcs8_pem(LineEnding::CRLF)?.as_bytes())?;
f.write_all(cer.as_bytes())?;
Ok(())
}pub fn list_certificates(&self) -> Result<CertificatesResponse>
pub fn get_certificate(&self, id: &str) -> Result<CertificateResponse>
pub fn revoke_certificate(&self, id: &str) -> Result<()>
source§impl AppStoreConnectClient
impl AppStoreConnectClient
pub fn register_device(
&self,
name: &str,
platform: BundleIdPlatform,
udid: &str
) -> Result<DeviceResponse>
pub fn list_devices(&self) -> Result<DevicesResponse>
pub fn get_device(&self, id: &str) -> Result<DeviceResponse>
source§impl AppStoreConnectClient
impl AppStoreConnectClient
sourcepub fn create_submission(
&self,
sha256: &str,
submission_name: &str
) -> Result<NewSubmissionResponse>
pub fn create_submission(
&self,
sha256: &str,
submission_name: &str
) -> Result<NewSubmissionResponse>
Create a submission to the Notary API.
sourcepub fn get_submission(&self, submission_id: &str) -> Result<SubmissionResponse>
pub fn get_submission(&self, submission_id: &str) -> Result<SubmissionResponse>
Fetch the status of a Notary API submission.
sourcepub fn get_submission_log(&self, submission_id: &str) -> Result<Value>
pub fn get_submission_log(&self, submission_id: &str) -> Result<Value>
Fetch details about a single completed notarization.
source§impl AppStoreConnectClient
impl AppStoreConnectClient
pub fn create_profile(
&self,
name: &str,
profile_type: ProfileType,
bundle_id: &str,
certificates: &[String],
devices: Option<&[String]>
) -> Result<ProfileResponse>
pub fn list_profiles(&self) -> Result<ProfilesResponse>
pub fn get_profile(&self, id: &str) -> Result<ProfileResponse>
pub fn delete_profile(&self, id: &str) -> Result<()>
source§impl AppStoreConnectClient
impl AppStoreConnectClient
sourcepub fn from_json_path(path: &Path) -> Result<Self>
pub fn from_json_path(path: &Path) -> Result<Self>
Examples found in repository?
src/certs_api.rs (line 28)
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
pub fn generate_signing_certificate(api_key: &Path, ty: CertificateType, pem: &Path) -> Result<()> {
let secret = RsaPrivateKey::new(&mut OsRng, 2048)?;
let key = InMemorySigningKeyPair::from_pkcs8_der(secret.to_pkcs8_der()?.as_bytes())?;
let mut builder = X509CertificateBuilder::new(key.key_algorithm().unwrap());
builder
.subject()
.append_common_name_utf8_string("Apple Code Signing CSR")
.expect("only valid chars");
let csr = builder
.create_certificate_signing_request(&key)?
.encode_pem()?;
let cer = AppStoreConnectClient::from_json_path(api_key)?
.create_certificate(csr, ty)?
.data
.attributes
.certificate_content;
let cer = pem::encode(&pem::Pem {
tag: "CERTIFICATE".into(),
contents: base64::decode(cer)?,
});
let mut f = File::create(pem)?;
f.write_all(secret.to_pkcs8_pem(LineEnding::CRLF)?.as_bytes())?;
f.write_all(cer.as_bytes())?;
Ok(())
}sourcepub fn new(connect_token: ConnectTokenEncoder) -> Result<Self>
pub fn new(connect_token: ConnectTokenEncoder) -> Result<Self>
Create a new client to the App Store Connect API.
sourcepub fn get_token(&self) -> Result<String>
pub fn get_token(&self) -> Result<String>
Examples found in repository?
src/notary_api.rs (line 165)
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
pub fn create_submission(
&self,
sha256: &str,
submission_name: &str,
) -> Result<NewSubmissionResponse> {
let token = self.get_token()?;
let body = NewSubmissionRequest {
notifications: Vec::new(),
sha256: sha256.to_string(),
submission_name: submission_name.to_string(),
};
let req = self
.client
.post(APPLE_NOTARY_SUBMIT_SOFTWARE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
/// Fetch the status of a Notary API submission.
pub fn get_submission(&self, submission_id: &str) -> Result<SubmissionResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!(
"{APPLE_NOTARY_SUBMIT_SOFTWARE_URL}/{submission_id}"
))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
/// Fetch details about a single completed notarization.
pub fn get_submission_log(&self, submission_id: &str) -> Result<Value> {
let token = self.get_token()?;
let req = self
.client
.get(format!(
"{APPLE_NOTARY_SUBMIT_SOFTWARE_URL}/{submission_id}/logs"
))
.bearer_auth(token)
.header("Accept", "application/json");
let res: SubmissionLogResponse = self.send_request(req)?.json()?;
let url = res.data.attributes.developer_log_url;
let logs = self.client.get(url).send()?.json::<Value>()?;
Ok(logs)
}More examples
src/bundle_api.rs (line 14)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
pub fn register_bundle_id(&self, identifier: &str, name: &str) -> Result<BundleIdResponse> {
let token = self.get_token()?;
let body = BundleIdCreateRequest {
data: BundleIdCreateRequestData {
attributes: BundleIdCreateRequestAttributes {
identifier: identifier.into(),
name: name.into(),
platform: "UNIVERSAL".into(),
},
r#type: "bundleIds".into(),
},
};
let req = self
.client
.post(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
pub fn list_bundle_ids(&self) -> Result<BundleIdsResponse> {
let token = self.get_token()?;
let req = self
.client
.get(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn get_bundle_id(&self, id: &str) -> Result<BundleIdResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn delete_bundle_id(&self, id: &str) -> Result<()> {
let token = self.get_token()?;
let req = self
.client
.delete(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token);
self.send_request(req)?;
Ok(())
}src/certs_api.rs (line 51)
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
pub fn create_certificate(
&self,
csr: String,
ty: CertificateType,
) -> Result<CertificateResponse> {
let token = self.get_token()?;
let body = CertificateCreateRequest {
data: CertificateCreateRequestData {
attributes: CertificateCreateRequestAttributes {
certificate_type: ty.to_string(),
csr_content: csr,
},
r#type: "certificates".into(),
},
};
let req = self
.client
.post(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
pub fn list_certificates(&self) -> Result<CertificatesResponse> {
let token = self.get_token()?;
let req = self
.client
.get(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn get_certificate(&self, id: &str) -> Result<CertificateResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn revoke_certificate(&self, id: &str) -> Result<()> {
let token = self.get_token()?;
let req = self
.client
.delete(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token);
self.send_request(req)?;
Ok(())
}src/device_api.rs (line 20)
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
pub fn register_device(
&self,
name: &str,
platform: BundleIdPlatform,
udid: &str,
) -> Result<DeviceResponse> {
let token = self.get_token()?;
let body = DeviceCreateRequest {
data: DeviceCreateRequestData {
attributes: DeviceCreateRequestAttributes {
name: name.into(),
platform: platform.to_string(),
udid: udid.into(),
},
r#type: "devices".into(),
},
};
let req = self
.client
.post(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
pub fn list_devices(&self) -> Result<DevicesResponse> {
let token = self.get_token()?;
let req = self
.client
.get(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn get_device(&self, id: &str) -> Result<DeviceResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}src/profile_api.rs (line 21)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
pub fn create_profile(
&self,
name: &str,
profile_type: ProfileType,
bundle_id: &str,
certificates: &[String],
devices: Option<&[String]>,
) -> Result<ProfileResponse> {
let token = self.get_token()?;
let body = ProfileCreateRequest {
data: ProfileCreateRequestData {
attributes: ProfileCreateRequestAttributes {
name: name.into(),
profile_type: profile_type.to_string(),
},
relationships: ProfileCreateRequestRelationships {
bundle_id: Ref {
data: RefData {
id: bundle_id.into(),
r#type: "bundleIds".into(),
},
},
certificates: Refs {
data: certificates
.iter()
.map(|certificate| RefData {
id: certificate.into(),
r#type: "certificates".into(),
})
.collect(),
},
devices: devices.map(|devices| Refs {
data: devices
.iter()
.map(|device| RefData {
id: device.into(),
r#type: "devices".into(),
})
.collect(),
}),
},
r#type: "profiles".into(),
},
};
let req = self
.client
.post(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
pub fn list_profiles(&self) -> Result<ProfilesResponse> {
let token = self.get_token()?;
let req = self
.client
.get(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn get_profile(&self, id: &str) -> Result<ProfileResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn delete_profile(&self, id: &str) -> Result<()> {
let token = self.get_token()?;
let req = self
.client
.delete(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token);
self.send_request(req)?;
Ok(())
}sourcepub fn send_request(&self, request: RequestBuilder) -> Result<Response>
pub fn send_request(&self, request: RequestBuilder) -> Result<Response>
Examples found in repository?
src/notary_api.rs (line 180)
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
pub fn create_submission(
&self,
sha256: &str,
submission_name: &str,
) -> Result<NewSubmissionResponse> {
let token = self.get_token()?;
let body = NewSubmissionRequest {
notifications: Vec::new(),
sha256: sha256.to_string(),
submission_name: submission_name.to_string(),
};
let req = self
.client
.post(APPLE_NOTARY_SUBMIT_SOFTWARE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
/// Fetch the status of a Notary API submission.
pub fn get_submission(&self, submission_id: &str) -> Result<SubmissionResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!(
"{APPLE_NOTARY_SUBMIT_SOFTWARE_URL}/{submission_id}"
))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
/// Fetch details about a single completed notarization.
pub fn get_submission_log(&self, submission_id: &str) -> Result<Value> {
let token = self.get_token()?;
let req = self
.client
.get(format!(
"{APPLE_NOTARY_SUBMIT_SOFTWARE_URL}/{submission_id}/logs"
))
.bearer_auth(token)
.header("Accept", "application/json");
let res: SubmissionLogResponse = self.send_request(req)?.json()?;
let url = res.data.attributes.developer_log_url;
let logs = self.client.get(url).send()?.json::<Value>()?;
Ok(logs)
}More examples
src/bundle_api.rs (line 32)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
pub fn register_bundle_id(&self, identifier: &str, name: &str) -> Result<BundleIdResponse> {
let token = self.get_token()?;
let body = BundleIdCreateRequest {
data: BundleIdCreateRequestData {
attributes: BundleIdCreateRequestAttributes {
identifier: identifier.into(),
name: name.into(),
platform: "UNIVERSAL".into(),
},
r#type: "bundleIds".into(),
},
};
let req = self
.client
.post(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
pub fn list_bundle_ids(&self) -> Result<BundleIdsResponse> {
let token = self.get_token()?;
let req = self
.client
.get(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn get_bundle_id(&self, id: &str) -> Result<BundleIdResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn delete_bundle_id(&self, id: &str) -> Result<()> {
let token = self.get_token()?;
let req = self
.client
.delete(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token);
self.send_request(req)?;
Ok(())
}src/certs_api.rs (line 68)
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
pub fn create_certificate(
&self,
csr: String,
ty: CertificateType,
) -> Result<CertificateResponse> {
let token = self.get_token()?;
let body = CertificateCreateRequest {
data: CertificateCreateRequestData {
attributes: CertificateCreateRequestAttributes {
certificate_type: ty.to_string(),
csr_content: csr,
},
r#type: "certificates".into(),
},
};
let req = self
.client
.post(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
pub fn list_certificates(&self) -> Result<CertificatesResponse> {
let token = self.get_token()?;
let req = self
.client
.get(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn get_certificate(&self, id: &str) -> Result<CertificateResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn revoke_certificate(&self, id: &str) -> Result<()> {
let token = self.get_token()?;
let req = self
.client
.delete(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token);
self.send_request(req)?;
Ok(())
}src/device_api.rs (line 38)
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
pub fn register_device(
&self,
name: &str,
platform: BundleIdPlatform,
udid: &str,
) -> Result<DeviceResponse> {
let token = self.get_token()?;
let body = DeviceCreateRequest {
data: DeviceCreateRequestData {
attributes: DeviceCreateRequestAttributes {
name: name.into(),
platform: platform.to_string(),
udid: udid.into(),
},
r#type: "devices".into(),
},
};
let req = self
.client
.post(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
pub fn list_devices(&self) -> Result<DevicesResponse> {
let token = self.get_token()?;
let req = self
.client
.get(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn get_device(&self, id: &str) -> Result<DeviceResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}src/profile_api.rs (line 64)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
pub fn create_profile(
&self,
name: &str,
profile_type: ProfileType,
bundle_id: &str,
certificates: &[String],
devices: Option<&[String]>,
) -> Result<ProfileResponse> {
let token = self.get_token()?;
let body = ProfileCreateRequest {
data: ProfileCreateRequestData {
attributes: ProfileCreateRequestAttributes {
name: name.into(),
profile_type: profile_type.to_string(),
},
relationships: ProfileCreateRequestRelationships {
bundle_id: Ref {
data: RefData {
id: bundle_id.into(),
r#type: "bundleIds".into(),
},
},
certificates: Refs {
data: certificates
.iter()
.map(|certificate| RefData {
id: certificate.into(),
r#type: "certificates".into(),
})
.collect(),
},
devices: devices.map(|devices| Refs {
data: devices
.iter()
.map(|device| RefData {
id: device.into(),
r#type: "devices".into(),
})
.collect(),
}),
},
r#type: "profiles".into(),
},
};
let req = self
.client
.post(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.json(&body);
Ok(self.send_request(req)?.json()?)
}
pub fn list_profiles(&self) -> Result<ProfilesResponse> {
let token = self.get_token()?;
let req = self
.client
.get(APPLE_CERTIFICATE_URL)
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn get_profile(&self, id: &str) -> Result<ProfileResponse> {
let token = self.get_token()?;
let req = self
.client
.get(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token)
.header("Accept", "application/json");
Ok(self.send_request(req)?.json()?)
}
pub fn delete_profile(&self, id: &str) -> Result<()> {
let token = self.get_token()?;
let req = self
.client
.delete(format!("{APPLE_CERTIFICATE_URL}/{id}"))
.bearer_auth(token);
self.send_request(req)?;
Ok(())
}