oxide_auth/frontends/simple/extensions/
pkce.rs

1use super::{AuthorizationAddon, AuthorizationRequest, AccessTokenAddon, AccessTokenRequest};
2use super::{AddonResult, Value};
3
4pub use crate::code_grant::extensions::Pkce;
5
6impl AuthorizationAddon for Pkce {
7    fn execute(&self, request: &dyn AuthorizationRequest) -> AddonResult {
8        let method = request.extension("code_challenge_method");
9        let challenge = request.extension("code_challenge");
10
11        let encoded = match self.challenge(method, challenge) {
12            Err(()) => return AddonResult::Err,
13            Ok(None) => return AddonResult::Ok,
14            Ok(Some(encoded)) => encoded,
15        };
16
17        AddonResult::Data(encoded)
18    }
19}
20
21impl AccessTokenAddon for Pkce {
22    fn execute(&self, request: &dyn AccessTokenRequest, data: Option<Value>) -> AddonResult {
23        let verifier = request.extension("code_verifier");
24
25        match self.verify(data, verifier) {
26            Ok(_) => AddonResult::Ok,
27            Err(_) => AddonResult::Err,
28        }
29    }
30}