|
|
@@ -34,6 +34,8 @@ import bubble.service.boot.StandardSelfNodeService; |
|
|
|
import bubble.service.cloud.NodeLaunchMonitor; |
|
|
|
import bubble.service.upgrade.BubbleJarUpgradeService; |
|
|
|
import com.fasterxml.jackson.databind.JsonNode; |
|
|
|
import io.swagger.v3.oas.annotations.Operation; |
|
|
|
import io.swagger.v3.oas.annotations.security.SecurityRequirement; |
|
|
|
import lombok.Cleanup; |
|
|
|
import lombok.Getter; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
@@ -76,6 +78,7 @@ import static org.cobbzilla.util.http.HttpContentTypes.*; |
|
|
|
import static org.cobbzilla.util.json.JsonUtil.json; |
|
|
|
import static org.cobbzilla.wizard.resources.ResourceUtil.*; |
|
|
|
import static org.cobbzilla.wizard.server.RestServerBase.reportError; |
|
|
|
import static org.cobbzilla.wizard.server.config.OpenApiConfiguration.SEC_API_KEY; |
|
|
|
|
|
|
|
@Consumes(APPLICATION_JSON) |
|
|
|
@Produces(APPLICATION_JSON) |
|
|
@@ -92,6 +95,7 @@ public class MeResource { |
|
|
|
@Autowired private AccountMessageDAO messageDAO; |
|
|
|
|
|
|
|
@GET |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response me(@Context ContainerRequest ctx) { |
|
|
|
try { |
|
|
|
final Account account = userPrincipal(ctx); |
|
|
@@ -109,12 +113,14 @@ public class MeResource { |
|
|
|
} |
|
|
|
|
|
|
|
@GET @Path(EP_LOCALE) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response getLocale(@Context ContainerRequest ctx) { |
|
|
|
final Account account = userPrincipal(ctx); |
|
|
|
return ok(account.getLocale()); |
|
|
|
} |
|
|
|
|
|
|
|
@POST @Path(EP_LOCALE+"/{locale}") |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response setLocale(@Context ContainerRequest ctx, |
|
|
|
@PathParam("locale") String locale) { |
|
|
|
final Account account = userPrincipal(ctx); |
|
|
@@ -147,6 +153,7 @@ public class MeResource { |
|
|
|
public Response errorApi(@Context Request req) { return ok(getErrorApi()); } |
|
|
|
|
|
|
|
@POST @Path(EP_CHANGE_PASSWORD) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response changePassword(@Context Request req, |
|
|
|
@Context ContainerRequest ctx, |
|
|
|
ChangePasswordRequest request) { |
|
|
@@ -199,6 +206,7 @@ public class MeResource { |
|
|
|
@Autowired private StandardAccountMessageService messageService; |
|
|
|
|
|
|
|
@POST @Path(EP_APPROVE+"/{token}") |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response approve(@Context Request req, |
|
|
|
@Context ContainerRequest ctx, |
|
|
|
@PathParam("token") String token) { |
|
|
@@ -215,6 +223,7 @@ public class MeResource { |
|
|
|
} |
|
|
|
|
|
|
|
@POST @Path(EP_DENY+"/{token}") |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response deny(@Context Request req, |
|
|
|
@Context ContainerRequest ctx, |
|
|
|
@PathParam("token") String token) { |
|
|
@@ -225,6 +234,7 @@ public class MeResource { |
|
|
|
} |
|
|
|
|
|
|
|
@POST @Path(EP_DOWNLOAD) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response requestDownloadAccountData(@Context Request req, |
|
|
|
@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
@@ -238,6 +248,7 @@ public class MeResource { |
|
|
|
} |
|
|
|
|
|
|
|
@POST @Path(EP_DOWNLOAD+"/{uuid}") |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response downloadAccountData(@Context Request req, |
|
|
|
@Context ContainerRequest ctx, |
|
|
|
@PathParam("uuid") String uuid) { |
|
|
@@ -248,6 +259,7 @@ public class MeResource { |
|
|
|
} |
|
|
|
|
|
|
|
@POST @Path(EP_SCRIPT) @Produces(TEXT_PLAIN) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response runScript(@Context ContainerRequest ctx, |
|
|
|
JsonNode script) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
@@ -270,120 +282,140 @@ public class MeResource { |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_APPS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public AppsResource getApps(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(AppsResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_DRIVERS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public DriversResource getDrivers(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(DriversResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_NODES) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public NodesResource getNodes(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(NodesResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_CLOUDS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public CloudServicesResource getClouds(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(CloudServicesResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_REGIONS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public CloudServiceRegionsResource getCloudRegions(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(CloudServiceRegionsResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_DOMAINS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public DomainsResource getDomains(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(DomainsResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_NETWORKS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public NetworksResource getNetworks(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(NetworksResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_SENT_NOTIFICATIONS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public SentNotificationsResource getSentNotificationsResource(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(SentNotificationsResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_RECEIVED_NOTIFICATIONS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public ReceivedNotificationsResource getReceivedNotificationsResource(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(ReceivedNotificationsResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_PLANS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public AccountPlansResource getAllPlans(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(AccountPlansResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_CURRENT_PLANS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public CurrentAccountPlansResource getCurrentPlans(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(CurrentAccountPlansResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_KEYS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public AccountSshKeysResource getSshKeys(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(AccountSshKeysResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_PAYMENT_METHODS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public AccountPaymentMethodsResource getAccountPaymentMethods(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(AccountPaymentMethodsResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_BILLS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public BillsResource getBills(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(BillsResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_PAYMENTS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public AccountPaymentsResource getPayments(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(AccountPaymentsResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_FOOTPRINTS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public FootprintsResource getFootprints(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(FootprintsResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_DEVICES) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public DevicesResource getDevices(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(DevicesResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_DEVICE_TYPES) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public DeviceTypesResource getDeviceTypes(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(DeviceTypesResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_FLEX_ROUTERS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public FlexRoutersResource getFlexRouters(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(FlexRoutersResource.class, caller); |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_REFERRAL_CODES) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public ReferralCodesResource getReferralCodes(@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|
return configuration.subResource(ReferralCodesResource.class, caller); |
|
|
@@ -392,6 +424,7 @@ public class MeResource { |
|
|
|
@Autowired private NodeLaunchMonitor launchMonitor; |
|
|
|
|
|
|
|
@GET @Path(EP_STATUS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response listLaunchStatuses(@Context Request req, |
|
|
|
@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
@@ -399,6 +432,7 @@ public class MeResource { |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_PACKER) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public PackerResource getPackerResource(@Context Request req, |
|
|
|
@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
@@ -406,6 +440,7 @@ public class MeResource { |
|
|
|
} |
|
|
|
|
|
|
|
@Path(EP_PROMOTIONS) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public AccountPromotionsResource getPromotionsResource(@Context Request req, |
|
|
|
@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
@@ -416,6 +451,7 @@ public class MeResource { |
|
|
|
|
|
|
|
@POST @Path(EP_MODEL) |
|
|
|
@Consumes(MULTIPART_FORM_DATA) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response uploadModel(@Context Request req, |
|
|
|
@Context ContainerRequest ctx, |
|
|
|
@FormDataParam("file") InputStream in, |
|
|
@@ -441,6 +477,7 @@ public class MeResource { |
|
|
|
private static final long UPGRADE_CHECK_INTERVAL = MINUTES.toMillis(5); |
|
|
|
|
|
|
|
@GET @Path(EP_UPGRADE) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response checkForUpgrade(@Context Request req, |
|
|
|
@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
@@ -458,6 +495,7 @@ public class MeResource { |
|
|
|
} |
|
|
|
|
|
|
|
@POST @Path(EP_UPGRADE) |
|
|
|
@Operation(security=@SecurityRequirement(name=SEC_API_KEY)) |
|
|
|
public Response upgrade(@Context Request req, |
|
|
|
@Context ContainerRequest ctx) { |
|
|
|
final Account caller = userPrincipal(ctx); |
|
|
|