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