oxide_auth/frontends/simple/extensions/
pkce.rs1use 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}