edc_dataplane_proxy/web/api/
jwks.rs1use axum::{extract::State, http::StatusCode, response::IntoResponse, Json};
2use jsonwebtoken::jwk::JwkSet;
3use serde_json::json;
4
5use crate::{
6 service::token::{TokenError, TokenManager},
7 web::state::Context,
8};
9
10pub async fn jwks<T: TokenManager + Clone>(
11 State(ctx): State<Context<T>>,
12) -> Result<Json<JwkSet>, JwkError> {
13 ctx.tokens().keys().map_err(JwkError::Token).map(Json)
14}
15
16pub enum JwkError {
17 Token(TokenError),
18}
19
20impl IntoResponse for JwkError {
21 fn into_response(self) -> axum::response::Response {
22 let (status, error_message) = match self {
23 JwkError::Token(_e) => (StatusCode::BAD_GATEWAY, "Bad gateway"),
24 };
25 let body = Json(json!({
26 "error": error_message,
27 }));
28 (status, body).into_response()
29 }
30}