mirror of
https://github.com/stoatchat/rust-a2.git
synced 2026-06-30 21:47:56 -04:00
feat: add Client::certificate_parts() method (#72)
This commit is contained in:
Generated
+1
-1
@@ -4,7 +4,7 @@ version = 3
|
||||
|
||||
[[package]]
|
||||
name = "a2"
|
||||
version = "0.7.0"
|
||||
version = "0.7.1"
|
||||
dependencies = [
|
||||
"argparse",
|
||||
"base64 0.20.0",
|
||||
|
||||
+2
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "a2"
|
||||
version = "0.7.0"
|
||||
version = "0.7.1"
|
||||
authors = [
|
||||
"Harry Bairstow <harry@walletconnect.com>",
|
||||
"Julius de Bruijn <julius@nauk.io>",
|
||||
@@ -14,6 +14,7 @@ repository = "https://github.com/walletconnect/a2.git"
|
||||
homepage = "https://github.com/walletconnect/a2"
|
||||
documentation = "https://docs.rs/a2"
|
||||
edition = "2021"
|
||||
rust-version = "1.60" # set the minimum rust version we can work with.
|
||||
|
||||
[features]
|
||||
default = ["openssl"]
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
use a2::{Client, DefaultNotificationBuilder, NotificationBuilder, NotificationOptions};
|
||||
use argparse::{ArgumentParser, Store, StoreOption, StoreTrue};
|
||||
use tokio;
|
||||
|
||||
// An example client connectiong to APNs with a certificate and key
|
||||
#[tokio::main]
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
use argparse::{ArgumentParser, Store, StoreOption, StoreTrue};
|
||||
use std::fs::File;
|
||||
use tokio;
|
||||
|
||||
use a2::{Client, DefaultNotificationBuilder, Endpoint, NotificationBuilder, NotificationOptions};
|
||||
|
||||
|
||||
+23
-1
@@ -80,6 +80,15 @@ impl Client {
|
||||
Ok(Self::new(connector, None, endpoint))
|
||||
}
|
||||
|
||||
/// Create a connection to APNs using the raw PEM-formatted certificate and
|
||||
/// key, extracted from the provider client certificate you obtain from your
|
||||
/// [Apple developer account](https://developer.apple.com/account/)
|
||||
pub fn certificate_parts(cert_pem: &[u8], key_pem: &[u8], endpoint: Endpoint) -> Result<Client, Error> {
|
||||
let connector = AlpnConnector::with_client_cert(cert_pem, key_pem)?;
|
||||
|
||||
Ok(Self::new(connector, None, endpoint))
|
||||
}
|
||||
|
||||
/// Create a connection to APNs using system certificates, signing every
|
||||
/// request with a signature using a private key, key id and team id
|
||||
/// provisioned from your [Apple developer
|
||||
@@ -181,7 +190,7 @@ mod tests {
|
||||
use hyper::Method;
|
||||
use hyper_alpn::AlpnConnector;
|
||||
|
||||
const PRIVATE_KEY: &'static str = "-----BEGIN PRIVATE KEY-----
|
||||
const PRIVATE_KEY: &str = "-----BEGIN PRIVATE KEY-----
|
||||
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8g/n6j9roKvnUkwu
|
||||
lCEIvbDqlUhA5FOzcakkG90E8L+hRANCAATKS2ZExEybUvchRDuKBftotMwVEus3
|
||||
jDwmlD1Gg0yJt1e38djFwsxsfr5q2hv0Rj9fTEqAPr8H7mGm0wKxZ7iQ
|
||||
@@ -458,4 +467,17 @@ jDwmlD1Gg0yJt1e38djFwsxsfr5q2hv0Rj9fTEqAPr8H7mGm0wKxZ7iQ
|
||||
|
||||
assert_eq!(payload.to_json_string().unwrap(), body_str,);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
/// Try to create a test client using the unencrypted key & cert provided.
|
||||
/// These are test values that do not work with Apple, but mimic the sort
|
||||
/// of values you should get from the Apple Developer Console.
|
||||
async fn test_cert_parts() -> Result<(), Error> {
|
||||
let key: Vec<u8> = include_str!("../test_cert/test.key").bytes().collect();
|
||||
let cert: Vec<u8> = include_str!("../test_cert/test.crt").bytes().collect();
|
||||
|
||||
let c = Client::certificate_parts(&cert, &key, Endpoint::Sandbox)?;
|
||||
assert!(c.signer.is_none());
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
///! Error and result module
|
||||
/// Error and result module
|
||||
use crate::{response::Response, signer::SignerError};
|
||||
use std::io;
|
||||
use thiserror::Error;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
///! The `aps` notification content builders
|
||||
/// The `aps` notification content builders
|
||||
mod default;
|
||||
mod options;
|
||||
mod web;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
///! Payload with `aps` and custom data
|
||||
/// Payload with `aps` and custom data
|
||||
use crate::error::Error;
|
||||
use crate::request::notification::{DefaultAlert, NotificationOptions, WebPushAlert};
|
||||
use erased_serde::Serialize;
|
||||
|
||||
+1
-1
@@ -248,7 +248,7 @@ fn get_time() -> i64 {
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const PRIVATE_KEY: &'static str = "-----BEGIN PRIVATE KEY-----
|
||||
const PRIVATE_KEY: &str = "-----BEGIN PRIVATE KEY-----
|
||||
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8g/n6j9roKvnUkwu
|
||||
lCEIvbDqlUhA5FOzcakkG90E8L+hRANCAATKS2ZExEybUvchRDuKBftotMwVEus3
|
||||
jDwmlD1Gg0yJt1e38djFwsxsfr5q2hv0Rj9fTEqAPr8H7mGm0wKxZ7iQ
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
This contains a self signed cert for test purposes. The password is
|
||||
"test".
|
||||
|
||||
These values are not encrypted
|
||||
|
||||
Key and Cert generation (unencrypted):
|
||||
|
||||
```
|
||||
$ openssl req -newkey rsa:2048 -nodes \
|
||||
-keyout test.key -x509 -days 3650 -out test.crt
|
||||
```
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDhTCCAm2gAwIBAgIUJgWPx+sbai7lWxPHuIS6aFXM9jwwDQYJKoZIhvcNAQEL
|
||||
BQAwUjELMAkGA1UEBhMCVVMxDTALBgNVBAgMBFRlc3QxDTALBgNVBAcMBFRlc3Qx
|
||||
FjAUBgNVBAoMDVRlc3R5IFRlc3RpbmcxDTALBgNVBAMMBFRlc3QwHhcNMjMwNTIy
|
||||
MjIwOTUxWhcNMzMwNTE5MjIwOTUxWjBSMQswCQYDVQQGEwJVUzENMAsGA1UECAwE
|
||||
VGVzdDENMAsGA1UEBwwEVGVzdDEWMBQGA1UECgwNVGVzdHkgVGVzdGluZzENMAsG
|
||||
A1UEAwwEVGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOUGcm/w
|
||||
hdvnCJIxFgR3Quj/DLmeush7lHh5J77bMXUWTJy/CltQZdQtJVYg35bmVTDMtjUw
|
||||
1crkhFjgsF90uYPWUf5JgIHpg+5WXMkP686GvPC8sscWjMFVnqs1ot2gdMQkTSPL
|
||||
0Kaxfch02TXJjK1PI6bnbJGX6qrFLR2/7a6IfUtAn2eFwHDHhZOKwNichEnlCxc+
|
||||
TwjHnbIDGtupa5OMF4ILAH60/YfRop9uE7Ueekib1zWFhrFrVKcUvjbIXlrXEybp
|
||||
ojSktmesgKg78Nr7ZiBrMR/wuZAdcnWUWHZwrOKyJlYO3VmRNhbAazahtHzXy1pZ
|
||||
D7aIWMjdmT0pCAUCAwEAAaNTMFEwHQYDVR0OBBYEFGiyrdtyFdw0USMw47NVcZZx
|
||||
+jzyMB8GA1UdIwQYMBaAFGiyrdtyFdw0USMw47NVcZZx+jzyMA8GA1UdEwEB/wQF
|
||||
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAGAagQG+vrBTtaUCEogWBY93+gvTEzB7
|
||||
kIE3vP/BX8cNwRbnNM4O4AKB85/oh5RWsEc6aiKfF5bIUf8ixXBmGwet/sb7OIAU
|
||||
VGZY5IyUGCNiQ5Q3elqqROFHz4Vkx6oJkly1vjYJFsZgjm5JIFD1IMqHMdGPdpZb
|
||||
Bez9Asr6xFuikF2V5X1Q1QD25tshZqHquS7kZ5WLqv1OJf8z+hcyRQKfKbvOgPsd
|
||||
9Pntn/5ftTN+Kp73Lgyfsf5G4JgBVyPNPOgIwMYkfE0o6QoKtIkxCVBGw1QlNcyC
|
||||
j4hNPXkc4nde8MWlIOCFSg+ri7qehR10dcMQyb7RQG9Nq3Qq+4KI15g=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDlBnJv8IXb5wiS
|
||||
MRYEd0Lo/wy5nrrIe5R4eSe+2zF1FkycvwpbUGXULSVWIN+W5lUwzLY1MNXK5IRY
|
||||
4LBfdLmD1lH+SYCB6YPuVlzJD+vOhrzwvLLHFozBVZ6rNaLdoHTEJE0jy9CmsX3I
|
||||
dNk1yYytTyOm52yRl+qqxS0dv+2uiH1LQJ9nhcBwx4WTisDYnIRJ5QsXPk8Ix52y
|
||||
AxrbqWuTjBeCCwB+tP2H0aKfbhO1HnpIm9c1hYaxa1SnFL42yF5a1xMm6aI0pLZn
|
||||
rICoO/Da+2YgazEf8LmQHXJ1lFh2cKzisiZWDt1ZkTYWwGs2obR818taWQ+2iFjI
|
||||
3Zk9KQgFAgMBAAECggEAFD+0AdD6iiJsxT17xzH4LiYmrN6rgFWUyetZp+vfUo0s
|
||||
gYtOfMZTSnrMsJxqyFUIYS59nvRODV3o6abBUUnpAQ6uOdUBJ1CgboPKOP35s6KB
|
||||
X/4psaUnwAw0NspLjQbGbB+9hkBbQUcIv569JElJRnrBxIb04rvTbqfM67LFbpx4
|
||||
h3/NiWMBvXoOxN7/v/2wO7rBPJMO00NEEmLfX9/zOpDEjD2XOxTLqGyQ5Y6OxWkt
|
||||
tYAEo57As0OXZ9Yh11Jv4+McDUCZRlx8ePPOoedTIUKVf2P4yJc2J6yr4CFLBa5a
|
||||
G5l4CMOI/GJ9l9Ydp+Sr1+30TPpMuBFGOVCG+Buf/QKBgQDpvjQWXuW+9qkxO8h5
|
||||
ZQmpeJRr5XMd3+/ZoqEeK2hf6KhvRm73gyUdEcKwFwcqmkD2Okc0Xg6QfRZfrYYc
|
||||
IR0dPUAvpksGtnUvvfg/+GcIJiKrw5fXUfWlyGiCpBwpL+cG7S1c4FuT7eSwJ7GA
|
||||
2DpFFIztvv3CBWL5Rz7iQ/lgJwKBgQD61T2thNaX4KgxbZv9p51FhqY/Dn6nGBvg
|
||||
2iHchWYYHllwX3LwyTHEkryb7rSRAlya1pJG/YvUnH99DGYTDOTi91BZUUIVZ7F8
|
||||
FZE4fyVgQ5u9Q9Pq3tfrnBuTGwnMgKJPhztfyHSxeHropj72eVcOPcjQ125fqE9g
|
||||
XSq2TB4F8wKBgQDR2be91dkCB0WDNB8aDcIM6nqmG8usKJ6Xj9CC24nLgX+m119M
|
||||
y+sIHCfkG+iNMQvdhBjlRQRiaEsr/wgGPRx8Yb88iFmXXzv6bt1v4T3vLP23o9Sw
|
||||
tZ6LBk/96gR2XdFWgJ1XYv4U42GLXTeZa4d0+axEzlHYXSmsj3A/h7NdxQKBgQDk
|
||||
FU09YGJlvnISaBIFSAnZc8Pt6LdAJ8sJ3jAWPvMEEWzQoup4iuqHTcrVm+xzQ4uD
|
||||
fIOMq/cfgKLoyYJz5jCnNa3JWftWTXD1XQMtNWh+LVwLcQbdNn9ujggA7wAtBfcR
|
||||
i+1wfm2mBuD0dl8gblu75nCZfputvfVXscAp/fL7AwKBgQCzpRvFcfJGLgL/WtIZ
|
||||
4kocABWdhfsCIAfEZgPNno0M6COCxaKDP2a4z5m8monn9bn0M4oCb0L8N780oa21
|
||||
nNLXE5GwAfI/g4sV+PLNUW12xxEclQ4cLkdDCpe9T74CCbCZTc6bAbmG8lEjY915
|
||||
yQSmE2K4xWj3jxI7UrCurwPvGg==
|
||||
-----END PRIVATE KEY-----
|
||||
Reference in New Issue
Block a user