Skip to content

Commit 17a3197

Browse files
authored
Programatic adoption of Gateways (#2789)
* programmatic gateway adoption * sse, api tests * Merge branch 'release/2.0' of https://github.com/DefGuard/defguard into mass-migration * Update lib.rs * gateway adoption e2e tests * fix logs * suggestions * Update component_setup.rs
1 parent c2a3d4d commit 17a3197

8 files changed

Lines changed: 965 additions & 376 deletions

File tree

crates/defguard_core/src/handlers/component_setup.rs

Lines changed: 368 additions & 368 deletions
Large diffs are not rendered by default.

crates/defguard_core/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ use crate::{
130130
totp_disable, totp_enable, totp_secret, webauthn_end, webauthn_finish, webauthn_init,
131131
webauthn_start,
132132
},
133-
component_setup::setup_gateway_tls_stream,
133+
component_setup::{adopt_gateway, setup_gateway_tls_stream},
134134
core_certs::{get_ca, get_certs, set_external_url_settings, set_internal_url_settings},
135135
forward_auth::forward_auth,
136136
gateway::{delete_gateway, gateway_details, gateway_list, update_gateway},
@@ -594,6 +594,8 @@ pub fn build_webapp(
594594
.delete(delete_network)
595595
.get(network_details),
596596
)
597+
// Programmatic gateway adoption (REST)
598+
.route("/network/{network_id}/gateways/adopt", post(adopt_gateway))
597599
.route("/network/{network_id}/gateways", get(gateway_status))
598600
.route("/network/{network_id}/devices", post(add_user_devices))
599601
.route(

crates/defguard_core/tests/integration/api/common/mod.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ use defguard_common::{
1616
config::DefGuardConfig,
1717
db::{
1818
Id,
19-
models::{Device, Settings, User, WireguardNetwork, settings::initialize_current_settings},
19+
models::{
20+
Certificates, Device, Settings, User, WireguardNetwork,
21+
settings::initialize_current_settings,
22+
},
2023
},
2124
secret::SecretStringWrapper,
2225
};
@@ -281,6 +284,31 @@ pub(crate) fn generate_expired_test_cert_pem(common_name: &str) -> (String, Stri
281284
(cert_pem, key_pem)
282285
}
283286

287+
/// Seed the database with a self-signed CA so that gateway/proxy adoption tests can proceed.
288+
pub(crate) async fn setup_ca(pool: &PgPool) {
289+
let ca = CertificateAuthority::new("Test CA", "test@example.com", 365)
290+
.expect("failed to create test CA");
291+
let mut certs = Certificates::get_or_default(pool)
292+
.await
293+
.expect("failed to load certificates");
294+
certs.ca_cert_der = Some(ca.cert_der().to_vec());
295+
certs.ca_key_der = Some(ca.key_pair_der().to_vec());
296+
certs.save(pool).await.expect("failed to save CA certs");
297+
}
298+
299+
/// Override the global license cache with an Enterprise-tier license.
300+
pub(crate) fn set_enterprise_license() {
301+
set_cached_license(Some(License::new(
302+
"test_customer".to_string(),
303+
false,
304+
None,
305+
None,
306+
None,
307+
LicenseTier::Enterprise,
308+
SupportType::Basic,
309+
)));
310+
}
311+
284312
/// Set minimal SMTP fields on a [`Settings`] so that `smtp_configured()` returns `true`.
285313
pub(crate) fn configure_smtp(settings: &mut Settings) {
286314
settings.smtp_server = Some("smtp.example.com".into());

0 commit comments

Comments
 (0)