MCPcopy Create free account
hub / github.com/Dstack-TEE/dstack / do_request_new

Method do_request_new

gateway/src/distributed_certbot.rs:182–229  ·  view source on GitHub ↗
(&self, domain: &str, config: &ZtDomainConfig)

Source from the content-addressed store, hash-verified

180 }
181
182 async fn do_request_new(&self, domain: &str, config: &ZtDomainConfig) -> Result<()> {
183 let acme_client = self.get_or_create_acme_client(domain, config).await?;
184
185 // Generate new key pair (always use new key for security)
186 let key = KeyPair::generate().context("failed to generate key")?;
187 let key_pem = key.serialize_pem();
188 let public_key_der = key.public_key_der();
189
190 // Request wildcard certificate (domain in config is base domain, cert is *.domain)
191 let wildcard_domain = format!("*.{}", domain);
192 info!(
193 "requesting new certificate from ACME for {}...",
194 wildcard_domain
195 );
196 let cert_pem = tokio::time::timeout(
197 self.config().renew_timeout,
198 acme_client.request_new_certificate(&key_pem, &[wildcard_domain]),
199 )
200 .await
201 .context("certificate request timed out")?
202 .context("failed to request new certificate")?;
203
204 let not_after = get_cert_expiry(&cert_pem).context("failed to parse certificate expiry")?;
205
206 // Save certificate to KvStore
207 self.save_cert_to_kvstore(domain, &cert_pem, &key_pem, not_after)?;
208 info!("new certificate obtained from ACME, saved to KvStore");
209
210 // Generate and save attestation
211 self.generate_and_save_attestation(domain, &public_key_der)
212 .await?;
213
214 // Load into memory cert store
215 let cert_data = CertData {
216 cert_pem,
217 key_pem,
218 not_after,
219 issued_by: self.kv_store.my_node_id(),
220 issued_at: now_secs(),
221 };
222 self.cert_resolver.update_cert(domain, &cert_data)?;
223
224 info!(
225 "new certificate loaded (expires in {} days)",
226 (not_after - now_secs()) / 86400
227 );
228 Ok(())
229 }
230
231 async fn do_renew(&self, domain: &str, config: &ZtDomainConfig) -> Result<bool> {
232 let acme_client = self.get_or_create_acme_client(domain, config).await?;

Callers 2

try_renewMethod · 0.80
request_new_certMethod · 0.80

Calls 9

get_cert_expiryFunction · 0.85
save_cert_to_kvstoreMethod · 0.80
my_node_idMethod · 0.80
update_certMethod · 0.80
now_secsFunction · 0.70
configMethod · 0.45

Tested by

no test coverage detected