Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: builder pattern for id_token and response #26

Merged
merged 30 commits into from
Jun 7, 2023
Merged
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
586c6da
Add support for Request by reference
nanderstabel Apr 14, 2023
0bd23b7
Improve struct field serde
nanderstabel Apr 17, 2023
6c67a90
fix: remove custom serde
nanderstabel Apr 19, 2023
eb5990d
Add claims and scope parameters
nanderstabel Apr 19, 2023
c4e78b6
Add Storage and RelyingParty test improvement
nanderstabel Apr 19, 2023
cbf35ac
Update README example
nanderstabel Apr 19, 2023
db8e0b6
fix: Add standard_claims to test IdToken
nanderstabel Apr 19, 2023
ba19bf9
Move Storage trait to test_utils
nanderstabel Apr 19, 2023
7c424d9
Remove storage.rs
nanderstabel Apr 19, 2023
4f28f97
fix: fix dev-dependencies
nanderstabel Apr 24, 2023
47f728c
fix: fex rebase to dev
nanderstabel Apr 25, 2023
41a2339
fix: fix rebase to dev
nanderstabel Apr 25, 2023
ce6a463
feat: add Claim trait with associated types
nanderstabel May 12, 2023
5cabc48
fix: build
nanderstabel May 23, 2023
40d0d06
fix: remove build.rs and change crate name in doc tests
nanderstabel May 24, 2023
bbcf6e7
feat: refactor claims.rs
nanderstabel May 30, 2023
1db5af7
feat: Add builder for Response and IdToken
nanderstabel May 24, 2023
970cf9b
fix: silence clippy warning
nanderstabel May 30, 2023
23f9e48
feat: add missing ID Token claim parameters
nanderstabel May 30, 2023
6fe43e8
fix: remove skeptic crate
nanderstabel Apr 25, 2023
d5a2542
feat: allow json arguments for claims() method
nanderstabel May 12, 2023
7a96a0f
fix: replace unwraps
nanderstabel May 21, 2023
3a7be43
style: add specific request folder
nanderstabel May 26, 2023
3187c47
fix: undo unnecassary cloning
nanderstabel May 31, 2023
015c970
style: explicit serde_json usage
nanderstabel May 31, 2023
7534575
test: improve RequestBuilder tests
nanderstabel May 31, 2023
79053a2
fix: fix rebase
nanderstabel Jun 5, 2023
7907fac
style: Rename SiopRequest and add comments
nanderstabel Jun 5, 2023
c0d8b8c
style: rename Request and Response
nanderstabel Jun 5, 2023
50d4842
style: remove whitespace
nanderstabel Jun 7, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Move Storage trait to test_utils
nanderstabel committed Jun 5, 2023

Verified

This commit was signed with the committer’s verified signature.
targos Michaël Zasso
commit ba19bf978e08919fe0c1407f9ddf10669609d8e6
3 changes: 1 addition & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -26,8 +26,7 @@ is_empty = "0.2.0"
serde_urlencoded = "0.7.1"
derive_more = "0.99.16"
merge = "0.1.0"

[dev-dependencies]
# [dev-dependencies]
ed25519-dalek = "1.0.1"
rand = "0.7"
lazy_static = "1.4.0"
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -30,7 +30,6 @@ use chrono::{Duration, Utc};
use ed25519_dalek::{Keypair, Signature, Signer};
use lazy_static::lazy_static;
use rand::rngs::OsRng;
use serde_json::{json, Value};
use siopv2::{
claims::{Claim, ClaimRequests},
request::ResponseType, StandardClaim,
@@ -146,7 +145,7 @@ async fn main() {
let subject = MySubject::default();

// Create a new provider.
let provider = Provider::new(subject, MemoryStorage::default()).await.unwrap();
let provider = Provider::new(subject).await.unwrap();

// Create a new RequestUrl which includes a `request_uri` pointing to the mock server's `request_uri` endpoint.
let request_url = RequestUrl::builder()
4 changes: 2 additions & 2 deletions src/key_method.rs
Original file line number Diff line number Diff line change
@@ -91,7 +91,7 @@ async fn resolve_public_key(kid: &str) -> Result<Vec<u8>> {
#[cfg(test)]
mod tests {
use super::*;
use crate::{IdToken, MemoryStorage, Provider, RelyingParty};
use crate::{IdToken, Provider, RelyingParty, StandardClaims};
use chrono::{Duration, Utc};

#[tokio::test]
@@ -100,7 +100,7 @@ mod tests {
let subject = KeySubject::new();

// Create a new provider.
let provider = Provider::new(subject, MemoryStorage::default()).await.unwrap();
let provider = Provider::new(subject).await.unwrap();

// Get a new SIOP request with response mode `post` for cross-device communication.
let request_url = "\
1 change: 0 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
@@ -9,7 +9,6 @@ pub mod request;
pub mod request_builder;
pub mod response;
pub mod scope;
pub mod storage;
pub mod subject;
pub mod validator;

22 changes: 8 additions & 14 deletions src/provider.rs
Original file line number Diff line number Diff line change
@@ -6,23 +6,20 @@ use chrono::{Duration, Utc};
/// [`SiopRequest`]'s from [crate::relying_party::RelyingParty]'s (RPs). The [`Provider`] acts as a trusted intermediary between the RPs and
/// the user who is trying to authenticate.
#[derive(Default)]
pub struct Provider<S, T>
pub struct Provider<S>
where
S: Subject + Validator,
T: Storage,
{
pub subject: S,
pub storage: T,
}

impl<S, T> Provider<S, T>
impl<S> Provider<S>
where
S: Subject + Validator,
T: Storage,
{
// TODO: Use ProviderBuilder instead.
pub async fn new(subject: S, storage: T) -> Result<Self> {
Ok(Provider { subject, storage })
pub async fn new(subject: S) -> Result<Self> {
Ok(Provider { subject })
}

pub fn subject_syntax_types_supported(&self) -> Result<Vec<String>> {
@@ -79,10 +76,8 @@ where
id_token
};

// Fetch the user's claims from the storage.
if let Some(id_token_request_claims) = request.id_token_request_claims() {
id_token.standard_claims = self.storage.fetch_claims(&id_token_request_claims);
}
// Include the user claims in the id token.
id_token.standard_claims = user_claims;

let jwt = self.subject.encode(id_token).await?;

@@ -119,7 +114,6 @@ where
#[cfg(test)]
mod tests {
use super::*;
use crate::storage::MemoryStorage;
use crate::test_utils::MockSubject;

#[tokio::test]
@@ -128,7 +122,7 @@ mod tests {
let subject = MockSubject::new("did:mock:123".to_string(), "key_identifier".to_string()).unwrap();

// Create a new provider.
let provider = Provider::new(subject, MemoryStorage::default()).await.unwrap();
let provider = Provider::new(subject).await.unwrap();

// Get a new SIOP request with response mode `post` for cross-device communication.
let request_url = "\
@@ -154,7 +148,7 @@ mod tests {
#[tokio::test]
async fn test_provider_subject_syntax_types_supported() {
// Create a new provider.
let provider = Provider::<MockSubject, MemoryStorage>::default();
let provider = Provider::<MockSubject>::default();

// Test whether the provider returns the correct subject syntax types.
assert_eq!(
2 changes: 1 addition & 1 deletion src/relying_party.rs
Original file line number Diff line number Diff line change
@@ -136,7 +136,7 @@ mod tests {
let storage = MemoryStorage::new(serde_json::from_value(USER_CLAIMS.clone()).unwrap());

// Create a new provider.
let provider = Provider::new(subject, storage).await.unwrap();
let provider = Provider::new(subject).await.unwrap();

// Create a new RequestUrl which includes a `request_uri` pointing to the mock server's `request_uri` endpoint.
let request_url = RequestUrl::builder()