Skip to content

Commit aa1a6c7

Browse files
committed
feat: support qualified client id from wire clients with : as delimiter
1 parent 28b0cee commit aa1a6c7

File tree

18 files changed

+527
-427
lines changed

18 files changed

+527
-427
lines changed

acme/src/identifier.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub enum AcmeIdentifier {
1010

1111
impl AcmeIdentifier {
1212
pub fn try_new(display_name: String, domain: String, client_id: ClientId, handle: String) -> RustyAcmeResult<Self> {
13-
let client_id = client_id.to_subject();
13+
let client_id = client_id.to_uri();
1414
let identifier = WireIdentifier {
1515
display_name,
1616
domain,

acme/src/order.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
use crate::prelude::*;
21
use rusty_jwt_tools::prelude::*;
32

3+
use crate::prelude::*;
4+
45
// Order creation
56
impl RustyAcme {
67
/// create a new order
78
/// see [RFC 8555 Section 7.4](https://www.rfc-editor.org/rfc/rfc8555.html#section-7.4).
89
#[allow(clippy::too_many_arguments)]
910
pub fn new_order_request(
10-
display_name: String,
11+
display_name: &str,
1112
client_id: ClientId,
12-
handle: String,
13+
handle: &str,
1314
expiry: core::time::Duration,
1415
directory: &AcmeDirectory,
1516
account: &AcmeAccount,
@@ -21,7 +22,12 @@ impl RustyAcme {
2122
let acct_url = account.acct_url()?;
2223

2324
let domain = client_id.domain.clone();
24-
let identifiers = vec![AcmeIdentifier::try_new(display_name, domain, client_id, handle)?];
25+
let identifiers = vec![AcmeIdentifier::try_new(
26+
display_name.to_string(),
27+
domain,
28+
client_id,
29+
handle.to_string(),
30+
)?];
2531
let not_before = time::OffsetDateTime::now_utc();
2632
let not_after = not_before + expiry;
2733
let payload = AcmeOrderRequest {
@@ -231,10 +237,11 @@ pub enum AcmeOrderStatus {
231237

232238
#[cfg(test)]
233239
mod tests {
234-
use super::*;
235240
use serde_json::json;
236241
use wasm_bindgen_test::*;
237242

243+
use super::*;
244+
238245
wasm_bindgen_test_configure!(run_in_browser);
239246

240247
mod json {

cli/src/access_generate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ impl AccessGenerate {
5757
extra_claims: None,
5858
};
5959
let nonce: BackendNonce = self.nonce.into();
60-
let client_id: ClientId = self.client_id.as_str().try_into().expect("Invalid 'client_id'");
60+
let client_id = ClientId::try_from_uri(&self.client_id).expect("Invalid 'client_id'");
6161
let expiry = core::time::Duration::from_secs(self.expiry);
6262

6363
let client_dpop_token =

cli/src/access_verify.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ impl AccessVerify {
4646
.trim()
4747
.to_string();
4848

49-
let client_id: ClientId = self.client_id.as_str().try_into().expect("Invalid 'client_id'");
49+
let client_id = ClientId::try_from_uri(&self.client_id).expect("Invalid 'client_id'");
5050
let challenge: AcmeNonce = self.challenge.into();
5151
let (_, backend_pk) = parse_public_key_pem(read_file(Some(&self.key)).unwrap());
5252

e2e-identity/README.md

Lines changed: 323 additions & 323 deletions
Large diffs are not rendered by default.

e2e-identity/src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,16 +115,16 @@ impl RustyE2eIdentity {
115115
#[allow(clippy::too_many_arguments)]
116116
pub fn acme_new_order_request(
117117
&self,
118-
display_name: String,
119-
client_id: String,
120-
handle: String,
118+
display_name: &str,
119+
client_id: &str,
120+
handle: &str,
121121
expiry: core::time::Duration,
122122
directory: &AcmeDirectory,
123123
account: &E2eiAcmeAccount,
124124
previous_nonce: String,
125125
) -> E2eIdentityResult<Json> {
126126
let account = serde_json::from_value(account.clone().into())?;
127-
let client_id = ClientId::try_from_qualified(client_id.as_str())?;
127+
let client_id = ClientId::try_from_qualified(client_id)?;
128128
let order_req = RustyAcme::new_order_request(
129129
display_name,
130130
client_id,

e2e-identity/tests/api.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ fn e2e_api() {
2020
let user_id = base64::prelude::BASE64_URL_SAFE_NO_PAD.encode(user_id.to_string());
2121
let client_id = random::<u64>();
2222
let domain = "example.org";
23-
let qualified_client_id = format!("{user_id}/{client_id:x}@{domain}");
23+
let qualified_client_id = format!("{user_id}:{client_id:x}@{domain}");
2424

2525
let display_name = "Smith, Alice M (QA)".to_string();
2626
let qualified_handle = format!("alice.smith.qa@{domain}");
@@ -73,9 +73,9 @@ fn e2e_api() {
7373
let expiry = core::time::Duration::from_secs(3600); // 1h
7474
let _order_request = enrollment
7575
.acme_new_order_request(
76-
display_name,
77-
qualified_client_id.clone(),
78-
qualified_handle,
76+
&display_name,
77+
&qualified_client_id,
78+
&qualified_handle,
7979
expiry,
8080
&directory,
8181
&account,

e2e-identity/tests/utils/cfg.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ impl<'a> E2eTest<'a> {
108108
email: email.to_string(),
109109
password: password.to_string(),
110110
domain: domain.to_string(),
111-
sub: sub.to_subject(),
111+
sub: sub.to_uri(),
112112
},
113113
dex_cfg: DexCfg {
114114
host: dex_host,

e2e-identity/tests/utils/fmk.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,9 @@ impl<'a> E2eTest<'a> {
136136
self.display_step("create a new order");
137137
let expiry = core::time::Duration::from_secs(3600); // 1h
138138
let order_request = RustyAcme::new_order_request(
139-
self.display_name.clone(),
139+
&self.display_name,
140140
self.sub.clone(),
141-
self.handle.clone(),
141+
&self.handle,
142142
expiry,
143143
directory,
144144
account,
@@ -267,7 +267,7 @@ impl<'a> E2eTest<'a> {
267267
let b64 = |v: &str| base64::prelude::BASE64_URL_SAFE_NO_PAD.encode(v);
268268

269269
// cheat to share test context
270-
ctx_store("client-id", self.sub.to_subject());
270+
ctx_store("client-id", self.sub.to_uri());
271271
ctx_store("backend-kp", self.backend_kp.to_string());
272272
ctx_store("hash-alg", self.hash_alg.to_string());
273273
ctx_store("wire-server-uri", self.wire_server_uri());

e2e-identity/tests/utils/wire_server/server_api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub async fn wire_api(req: Request<Body>) -> Result<Response<Body>, hyper::Error
4747

4848
fn generate_access_token(dpop: &str, nonce: BackendNonce) -> serde_json::Value {
4949
let client_id = ctx_get("client-id").unwrap();
50-
let client_id: ClientId = client_id.as_str().try_into().unwrap();
50+
let client_id = ClientId::try_from_uri(&client_id).unwrap();
5151
let backend_kp: Pem = ctx_get("backend-kp").unwrap().into();
5252
let hash_alg: HashAlgorithm = ctx_get("hash-alg").unwrap().parse().unwrap();
5353
let htu: Htu = ctx_get("wire-server-uri").unwrap().as_str().try_into().unwrap();

0 commit comments

Comments
 (0)