fix: show public endpoint instead of internal Docker URL in tenant settings
All checks were successful
CI / build (push) Successful in 1m21s
CI / docker (push) Successful in 38s

Closes #51

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-10 20:29:54 +02:00
parent 0fe084bcb2
commit cab6e409b9
2 changed files with 14 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ import net.siegeln.cameleer.saas.identity.LogtoManagementClient;
import net.siegeln.cameleer.saas.identity.ServerApiClient;
import net.siegeln.cameleer.saas.license.LicenseEntity;
import net.siegeln.cameleer.saas.license.LicenseService;
import net.siegeln.cameleer.saas.provisioning.ProvisioningProperties;
import net.siegeln.cameleer.saas.provisioning.TenantProvisioner;
import net.siegeln.cameleer.saas.tenant.TenantEntity;
import net.siegeln.cameleer.saas.tenant.TenantService;
@@ -24,17 +25,20 @@ public class TenantPortalService {
private final ServerApiClient serverApiClient;
private final LogtoManagementClient logtoClient;
private final TenantProvisioner tenantProvisioner;
private final ProvisioningProperties provisioningProps;
public TenantPortalService(TenantService tenantService,
LicenseService licenseService,
ServerApiClient serverApiClient,
LogtoManagementClient logtoClient,
TenantProvisioner tenantProvisioner) {
TenantProvisioner tenantProvisioner,
ProvisioningProperties provisioningProps) {
this.tenantService = tenantService;
this.licenseService = licenseService;
this.serverApiClient = serverApiClient;
this.logtoClient = logtoClient;
this.tenantProvisioner = tenantProvisioner;
this.provisioningProps = provisioningProps;
}
// --- Inner records ---
@@ -158,10 +162,12 @@ public class TenantPortalService {
public TenantSettingsData getSettings() {
TenantEntity tenant = resolveTenant();
String publicEndpoint = provisioningProps.publicProtocol() + "://"
+ provisioningProps.publicHost() + "/t/" + tenant.getSlug() + "/";
return new TenantSettingsData(
tenant.getName(), tenant.getSlug(),
tenant.getTier().name(), tenant.getStatus().name(),
tenant.getServerEndpoint(), tenant.getCreatedAt()
publicEndpoint, tenant.getCreatedAt()
);
}

View File

@@ -6,6 +6,7 @@ import net.siegeln.cameleer.saas.identity.ServerApiClient;
import net.siegeln.cameleer.saas.identity.ServerApiClient.ServerHealthResponse;
import net.siegeln.cameleer.saas.license.LicenseEntity;
import net.siegeln.cameleer.saas.license.LicenseService;
import net.siegeln.cameleer.saas.provisioning.ProvisioningProperties;
import net.siegeln.cameleer.saas.provisioning.TenantProvisioner;
import net.siegeln.cameleer.saas.tenant.TenantEntity;
import net.siegeln.cameleer.saas.tenant.TenantService;
@@ -45,6 +46,9 @@ class TenantPortalServiceTest {
@Mock
private TenantProvisioner tenantProvisioner;
private final ProvisioningProperties provisioningProps = new ProvisioningProperties(
null, null, null, null, "test.example.com", "https", null, null, null, null);
private TenantPortalService tenantPortalService;
private final UUID tenantId = UUID.randomUUID();
@@ -52,7 +56,7 @@ class TenantPortalServiceTest {
@BeforeEach
void setUp() {
TenantContext.setTenantId(tenantId);
tenantPortalService = new TenantPortalService(tenantService, licenseService, serverApiClient, logtoClient, tenantProvisioner);
tenantPortalService = new TenantPortalService(tenantService, licenseService, serverApiClient, logtoClient, tenantProvisioner, provisioningProps);
}
@AfterEach
@@ -185,7 +189,7 @@ class TenantPortalServiceTest {
assertThat(result.slug()).isEqualTo("acme-corp");
assertThat(result.tier()).isEqualTo("MID");
assertThat(result.status()).isEqualTo("ACTIVE");
assertThat(result.serverEndpoint()).isEqualTo("http://server:8080");
assertThat(result.serverEndpoint()).isEqualTo("https://test.example.com/t/acme-corp/");
assertThat(result.createdAt()).isNull(); // no @PrePersist called in test, createdAt is null
}
}