@@ -5,9 +5,15 @@ use std::{
55
66use anyhow:: { Context , Error , anyhow} ;
77use axum:: Router ;
8+ use custom_domains_backend:: setup;
89use ic_bn_lib:: {
910 custom_domains:: { self , ProvidesCustomDomains } ,
10- http:: { self as bnhttp, dns:: ApiBnResolver , middleware:: waf:: WafLayer , redirect_to_https} ,
11+ http:: {
12+ self as bnhttp,
13+ dns:: { ApiBnResolver , Options as DnsOptions } ,
14+ middleware:: waf:: WafLayer ,
15+ redirect_to_https,
16+ } ,
1117 tasks:: TaskManager ,
1218 tls:: { prepare_client_config, providers:: ProvidesCertificates , verify:: NoopServerCertVerifier } ,
1319 utils:: health_manager:: HealthManager ,
@@ -92,7 +98,8 @@ pub async fn main(
9298 . context ( "unable to create Prometheus registry" ) ?;
9399
94100 // DNS resolver
95- let dns_resolver = bnhttp:: dns:: Resolver :: new ( ( & cli. dns ) . into ( ) ) ;
101+ let dns_options: DnsOptions = ( & cli. dns ) . into ( ) ;
102+ let dns_resolver = bnhttp:: dns:: Resolver :: new ( dns_options. clone ( ) ) ;
96103
97104 // HTTP client
98105 let mut http_client_opts: bnhttp:: client:: Options = ( & cli. http_client ) . into ( ) ;
@@ -173,6 +180,25 @@ pub async fn main(
173180 // HTTP server metrics
174181 let http_metrics = bnhttp:: server:: Metrics :: new ( & registry) ;
175182
183+ // Setup custom domains
184+ let custom_domains_router = if let Some ( v) = & cli. custom_domains {
185+ let router = setup_custom_domains (
186+ v,
187+ dns_options,
188+ & registry,
189+ & mut tasks,
190+ & mut certificate_providers,
191+ & mut custom_domain_providers,
192+ )
193+ . await
194+ . context ( "unable to setup Custom Domains" ) ?;
195+
196+ warn ! ( "Custom Domains: initialized" ) ;
197+ Some ( router)
198+ } else {
199+ None
200+ } ;
201+
176202 // Setup Certificate Issuers
177203 let issuers = setup_issuers ( cli, & mut tasks, http_client. clone ( ) , & registry) ;
178204
@@ -252,6 +278,7 @@ pub async fn main(
252278 shutdown_token. clone ( ) ,
253279 vector. clone ( ) ,
254280 waf_layer,
281+ custom_domains_router,
255282 #[ cfg( feature = "clickhouse" ) ]
256283 clickhouse. clone ( ) ,
257284 )
@@ -345,3 +372,32 @@ pub async fn main(
345372
346373 Ok ( ( ) )
347374}
375+
376+ async fn setup_custom_domains (
377+ cli : & custom_domains_base:: cli:: CustomDomainsCli ,
378+ dns_options : DnsOptions ,
379+ metrics_registry : & Registry ,
380+ tasks : & mut TaskManager ,
381+ certificate_providers : & mut Vec < Arc < dyn ProvidesCertificates > > ,
382+ custom_domain_providers : & mut Vec < Arc < dyn ProvidesCustomDomains > > ,
383+ ) -> Result < Router , Error > {
384+ let token = tasks. token ( ) ;
385+ let ( workers, router, client) = setup (
386+ cli,
387+ dns_options,
388+ token,
389+ HOSTNAME . get ( ) . unwrap ( ) ,
390+ metrics_registry. clone ( ) ,
391+ )
392+ . await ?;
393+
394+ for ( i, worker) in workers. into_iter ( ) . enumerate ( ) {
395+ tasks. add ( & format ! ( "custom_domains_worker_{i}" ) , Arc :: new ( worker) ) ;
396+ }
397+ tasks. add ( "custom_domains_canister_client" , client. clone ( ) ) ;
398+
399+ certificate_providers. push ( client. clone ( ) ) ;
400+ custom_domain_providers. push ( client) ;
401+
402+ Ok ( router)
403+ }
0 commit comments