Skip to content

Commit 312b62c

Browse files
committed
chore: enabled subdomains
1 parent a0afb7f commit 312b62c

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

src/http_server.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ struct ChallengeRequestBody {
3838
config: Option<Value>,
3939
}
4040

41+
impl ChallengeRequestBody {
42+
pub fn get_hostname(&self) -> String {
43+
self.resolved_fqdn.replace(self.resolved_zone.as_str(), "")
44+
}
45+
}
46+
4147
#[derive(Debug, Serialize)]
4248
struct ChallengeResponse {
4349
response: ChallengeResponseBody
@@ -134,7 +140,6 @@ impl HttpServer {
134140
let priv_key_pem = cert_key.key_pair.serialize_pem();
135141
let cert_pem = cert_key.cert.pem();
136142

137-
138143
// Clone the routes for both HTTP and HTTPS
139144
let routes_http = routes.clone();
140145
let routes_https = routes;
@@ -174,13 +179,14 @@ async fn handle_post(
174179
info!("Received POST request with the following payload: {:?}", &body);
175180

176181
let request: ChallengeRequest = serde_json::from_value(body).unwrap();
177-
let body = request.request;
182+
let body: ChallengeRequestBody = request.request;
178183

179184
let mut response_body = ChallengeResponseBody {
180185
uid: "".to_string(),
181186
success: false,
182187
status: None,
183188
};
189+
let hostname = body.get_hostname();
184190
let challenge_id = body.key;
185191
let action = body.action;
186192
let mut cached_record = cache.lock().await;
@@ -192,7 +198,7 @@ async fn handle_post(
192198
Ok(cached_record_id)
193199
} else {
194200
info!("Adding DNS challenge");
195-
let record_id = plesk_api.add_challenge(challenge_id).await.unwrap();
201+
let record_id = plesk_api.add_challenge(hostname, challenge_id).await.unwrap();
196202
let _ = cached_record.insert(record_id.clone());
197203
Ok(record_id)
198204
}

src/plesk_api.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use tracing::info;
66
use serde_xml_rs::from_str;
77

88
const PLESK_API_PATH: &str = "/enterprise/control/agent.php";
9-
const ACME_CHALLENGE_PREFIX: &str = "_acme-challenge";
109

1110
#[derive(Clone)]
1211
pub struct PleskAPI {
@@ -82,7 +81,7 @@ impl PleskAPI {
8281
.header("HTTP_AUTH_PASSWD", self.password.clone())
8382
}
8483

85-
pub async fn add_challenge(&self, challenge_string: String) -> Result<String, Error> {
84+
pub async fn add_challenge(&self, host: String, challenge_string: String) -> Result<String, Error> {
8685
let payload = format!(
8786
r#"
8887
<packet>
@@ -97,7 +96,7 @@ impl PleskAPI {
9796
</packet>
9897
"#,
9998
self.site_id,
100-
ACME_CHALLENGE_PREFIX,
99+
host,
101100
challenge_string
102101
);
103102
let response = self
@@ -120,7 +119,7 @@ impl PleskAPI {
120119
let error_msg = dns_resp_record.result.errtext.unwrap();
121120
if error_msg.contains("exists") {
122121
info!("Record already exists, retrieving record ID");
123-
let record_id = self.get_challenge_record_id().await?;
122+
let record_id = self.get_challenge_record_id(host).await?;
124123
return Ok(record_id);
125124
} else {
126125
let error = io::Error::new(
@@ -195,7 +194,7 @@ impl PleskAPI {
195194
Err(anyhow!(error))
196195
}
197196

198-
pub async fn get_challenge_record_id(&self) -> Result<String, Error> {
197+
pub async fn get_challenge_record_id(&self, host: &String) -> Result<String, Error> {
199198
info!("Getting challenge record ID");
200199
let response = self
201200
.create_request()
@@ -232,7 +231,7 @@ impl PleskAPI {
232231
continue;
233232
}
234233
let record_data = action.data.unwrap();
235-
if record_data.host.contains(ACME_CHALLENGE_PREFIX) {
234+
if record_data.host.contains(host) && record_data.record_type == "TXT" {
236235
info!("Found record ID: {}", action.id.clone().unwrap());
237236
return Ok(action.id.unwrap());
238237
}

0 commit comments

Comments
 (0)