Skip to content

Commit a3745fa

Browse files
authored
Implement JWE (#53)
* Implement JWE * Force the resource updates * Fix formatting issues * Fix formatting issues * Fix formatting issues
1 parent abca5cc commit a3745fa

File tree

6 files changed

+117
-86
lines changed

6 files changed

+117
-86
lines changed

Cargo.lock

Lines changed: 87 additions & 43 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,9 @@ test-context = "0.4.1"
3030
actix-web = "4.11.0"
3131
duration-string = { version = "0.5.2", features = ["serde"] }
3232
regex = "1.11.1"
33-
jwt = "0.16.0"
34-
base64 = "0.22.1"
3533
futures-util = "0.3.31"
3634
env_filter = "0.1.3"
35+
josekit = "0.10.3"
3736

3837
# Open Telemetry dependencies
3938
opentelemetry = "0.30.0"
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1+
use josekit::jwt::JwtPayload;
12
use serde_json::Value;
2-
use std::collections::HashMap;
33

4-
pub type DynamicClaimsCollection = HashMap<String, Value>;
4+
pub type DynamicClaimsCollection = JwtPayload;
55
pub fn get_claim(claims: &DynamicClaimsCollection, key: &str) -> Option<String> {
6-
let value = claims.get(key)?;
6+
let value = claims.claim(key)?;
77
let value = value.as_str()?;
88
Some(value.to_owned())
99
}
10+
11+
pub fn get_value(claims: &DynamicClaimsCollection, key: &str) -> Option<Value> {
12+
let value = claims.claim(key)?;
13+
Some(value.to_owned())
14+
}

src/contracts/internal_token/v1/boxer_claims.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::contracts::dynamic_claims_collection::DynamicClaimsCollection;
1+
use crate::contracts::dynamic_claims_collection::{DynamicClaimsCollection, get_claim, get_value};
22
use crate::contracts::internal_token::v1::{PRINCIPAL_KEY, SCHEMA_ID_KEY, SCHEMA_KEY, VALIDATOR_SCHEMA_ID_KEY};
33
use cedar_policy::{Entity, SchemaFragment};
44

@@ -14,8 +14,8 @@ impl TryFrom<&DynamicClaimsCollection> for BoxerClaims {
1414
type Error = anyhow::Error;
1515

1616
fn try_from(c: &DynamicClaimsCollection) -> Result<Self, Self::Error> {
17-
let schema = c.get(SCHEMA_KEY).ok_or(anyhow::anyhow!("Missing schema"))?;
18-
let principal = c.get(PRINCIPAL_KEY).ok_or(anyhow::anyhow!("Missing schema"))?;
17+
let schema = get_value(c, SCHEMA_KEY).ok_or(anyhow::anyhow!("Missing schema"))?;
18+
let principal = get_value(c, PRINCIPAL_KEY).ok_or(anyhow::anyhow!("Missing schema"))?;
1919
let schema_id = get_claim(c, SCHEMA_ID_KEY).ok_or(anyhow::anyhow!("Missing schema_id"))?;
2020
let validator_schema_id = get_claim(c, VALIDATOR_SCHEMA_ID_KEY).ok_or(anyhow::anyhow!("Missing schema_id"))?;
2121

@@ -29,9 +29,3 @@ impl TryFrom<&DynamicClaimsCollection> for BoxerClaims {
2929
})
3030
}
3131
}
32-
33-
fn get_claim(claims: &DynamicClaimsCollection, key: &str) -> Option<String> {
34-
let value = claims.get(key)?;
35-
let value = value.as_str()?;
36-
Some(value.to_owned())
37-
}

0 commit comments

Comments
 (0)