actix_web_security/authentication/scheme/bearer/jwk/
mod.rs1use std::fs;
4
5use serde::Deserialize;
6
7use crate::authentication::error::error_type::JwkLoaderError;
8
9pub mod default_jwk;
10
11#[cfg(feature = "jwk-default-loader")]
12pub mod default_jwk_loader;
13
14pub struct JwkLoader<T: for<'a> Deserialize<'a>> {
16 pub jwks: T,
17}
18
19impl<T: for<'a> Deserialize<'a>> JwkLoader<T> {
20 pub fn from_file(filename: String) -> Result<JwkLoader<T>, JwkLoaderError> {
22 match fs::read_to_string(filename) {
23 Ok(key) => match serde_json::from_str(key.as_str()) {
24 Ok(jwks) => Ok(JwkLoader { jwks }),
25 Err(_) => Err(JwkLoaderError::InvalidKeyFile),
26 },
27 Err(_) => Err(JwkLoaderError::KeyFileCouldNotBeRead),
28 }
29 }
30
31 #[cfg(feature = "jwk-loader")]
33 pub fn from_url(url: String) -> Result<JwkLoader<T>, JwkLoaderError> {
34 match reqwest::blocking::get(&url) {
35 Ok(response) => match response.json::<T>() {
36 Ok(jwks) => Ok(JwkLoader { jwks }),
37 Err(_) => Err(JwkLoaderError::InvalidJsonResponse),
38 },
39 Err(_) => Err(JwkLoaderError::JwksCouldNotBeDownloaded),
40 }
41 }
42}