diff options
author | smorgrav <smorgrav@verizonmedia.com> | 2020-10-30 10:25:40 +0100 |
---|---|---|
committer | smorgrav <smorgrav@verizonmedia.com> | 2020-10-30 10:25:40 +0100 |
commit | 08ffa4cb1f8fa9b79d4eb23a22c6d9e0cf3b2696 (patch) | |
tree | 2a921f5970e8933c862a7c04dc7798a27a3bb247 /controller-server | |
parent | 2f87c7ea9fbc39bdc285db1357cc2af001309477 (diff) |
Implement tenantinfo get restapi
Diffstat (limited to 'controller-server')
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index 2d01019efaf..412b666b510 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -91,6 +91,9 @@ import com.yahoo.vespa.hosted.controller.security.Credentials; import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant; import com.yahoo.vespa.hosted.controller.tenant.CloudTenant; import com.yahoo.vespa.hosted.controller.tenant.Tenant; +import com.yahoo.vespa.hosted.controller.tenant.TenantInfo; +import com.yahoo.vespa.hosted.controller.tenant.TenantInfoAddress; +import com.yahoo.vespa.hosted.controller.tenant.TenantInfoBillingContact; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; import com.yahoo.vespa.serviceview.bindings.ApplicationView; @@ -212,6 +215,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { if (path.matches("/application/v4/")) return root(request); if (path.matches("/application/v4/tenant")) return tenants(request); if (path.matches("/application/v4/tenant/{tenant}")) return tenant(path.get("tenant"), request); + if (path.matches("/application/v4/tenant/{tenant}/info")) return tenantInfo(path.get("tenant")); if (path.matches("/application/v4/tenant/{tenant}/application")) return applications(path.get("tenant"), Optional.empty(), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}")) return application(path.get("tenant"), path.get("application"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/compile-version")) return compileVersion(path.get("tenant"), path.get("application")); @@ -354,6 +358,52 @@ public class ApplicationApiHandler extends LoggingRequestHandler { return new SlimeJsonResponse(slime); } + private HttpResponse tenantInfo(String tenantName) { + return controller.tenants().get(TenantName.from(tenantName)) + .filter(tenant -> tenant instanceof CloudTenant) + .map(tenant -> (CloudTenant)tenant) + .map(tenant -> tenantInfo(tenant.info())) + .orElseGet(() -> ErrorResponse.notFoundError("Tenant '" + tenantName + "' does not exist")); + } + + private HttpResponse tenantInfo(TenantInfo info) { + Slime slime = new Slime(); + Cursor infoCursor = slime.setObject(); + if (!info.isEmpty()) { + infoCursor.setString("name", info.name()); + infoCursor.setString("email", info.email()); + infoCursor.setString("website", info.website()); + infoCursor.setString("invoiceEmail", info.invoiceEmail()); + infoCursor.setString("contactName", info.contactName()); + infoCursor.setString("contactEmail", info.contactEmail()); + toSlime(info.address(), infoCursor); + toSlime(info.billingContact(), infoCursor); + } + + return new SlimeJsonResponse(slime); + } + + private void toSlime(TenantInfoAddress address, Cursor parentCursor) { + if (address.isEmpty()) return; + + Cursor addressCursor = parentCursor.setObject("address"); + addressCursor.setString("addressLines", address.addressLines()); + addressCursor.setString("postalCodeOrZip", address.postalCodeOrZip()); + addressCursor.setString("city", address.city()); + addressCursor.setString("stateRegionProvince", address.stateRegionProvince()); + addressCursor.setString("country", address.country()); + } + + private void toSlime(TenantInfoBillingContact billingContact, Cursor parentCursor) { + if (billingContact.isEmpty()) return; + + Cursor addressCursor = parentCursor.setObject("billingContact"); + addressCursor.setString("name", billingContact.name()); + addressCursor.setString("email", billingContact.email()); + addressCursor.setString("phone", billingContact.phone()); + toSlime(billingContact.address(), addressCursor); + } + private HttpResponse applications(String tenantName, Optional<String> applicationName, HttpRequest request) { TenantName tenant = TenantName.from(tenantName); if (controller.tenants().get(tenantName).isEmpty()) |