mirror of
https://github.com/sadoyan/aralez.git
synced 2026-10-23 06:01:35 +08:00
51 lines
2.3 KiB
Rust
51 lines
2.3 KiB
Rust
use crate::core::webserver;
|
|
use crate::tls::acme::{account, order};
|
|
use crate::utils::lazylock::CHALLENGES;
|
|
use axum::body::Body;
|
|
use axum::extract::State;
|
|
use axum::http::{Response, StatusCode};
|
|
use axum::response::IntoResponse;
|
|
#[allow(clippy::needless_return)]
|
|
pub async fn acme_create(State(state): State<webserver::AppState>) -> impl IntoResponse {
|
|
match account::load_or_create(state.cert_creds.as_str()).await {
|
|
Ok(txt) => {
|
|
return Response::builder()
|
|
.status(StatusCode::OK)
|
|
.header("Content-Type", "text/plain")
|
|
.body(Body::from(txt))
|
|
.unwrap_or_else(|_| (StatusCode::INTERNAL_SERVER_ERROR, "Internal Server Error\n").into_response());
|
|
}
|
|
Err(e) => {
|
|
return (StatusCode::INTERNAL_SERVER_ERROR, format!("Failed to create account {}\n", e)).into_response();
|
|
}
|
|
};
|
|
}
|
|
#[allow(clippy::needless_return)]
|
|
pub async fn acme_order(State(state): State<webserver::AppState>, axum::extract::Path(domain): axum::extract::Path<String>) -> impl IntoResponse {
|
|
let domain_clean = domain.trim_matches('/');
|
|
match order::order(domain_clean, state.cert_creds.as_str(), state.certs_dir, state.acme_dns_provider).await {
|
|
Ok(txt) => {
|
|
return Response::builder()
|
|
.status(StatusCode::OK)
|
|
.header("Content-Type", "text/plain")
|
|
.body(Body::from(txt))
|
|
.unwrap_or_else(|_| (StatusCode::INTERNAL_SERVER_ERROR, "Internal Server Error\n").into_response());
|
|
}
|
|
Err(e) => {
|
|
return (StatusCode::INTERNAL_SERVER_ERROR, format!("Internal Server Error: {}\n", e)).into_response();
|
|
}
|
|
};
|
|
}
|
|
pub async fn http01_challenge(axum::extract::Path(token): axum::extract::Path<String>) -> impl IntoResponse {
|
|
if let Ok(challenges) = CHALLENGES.read() {
|
|
if let Some(key_authorization) = challenges.get(&token) {
|
|
return Response::builder()
|
|
.status(StatusCode::OK)
|
|
.header("Content-Type", "text/plain")
|
|
.body(Body::from(key_authorization.clone()))
|
|
.unwrap_or_else(|_| (StatusCode::INTERNAL_SERVER_ERROR, "Internal Server Error\n").into_response());
|
|
}
|
|
}
|
|
(StatusCode::NOT_FOUND, "Not found\n").into_response()
|
|
}
|