@Override public void accept(SubscriptionEntity subscriptionEntity) { UpdateSubscriptionEntity updateSubscriptionEntity = new UpdateSubscriptionEntity(); updateSubscriptionEntity.setId(subscriptionEntity.getId()); updateSubscriptionEntity.setStartingAt(subscriptionEntity.getStartingAt()); updateSubscriptionEntity.setEndingAt(subscriptionEntity.getEndingAt()); subscriptionService.update(updateSubscriptionEntity, application.getClientId()); } });
public Metadata getMetadata(List<SubscriptionEntity> subscriptions) { Metadata metadata = new Metadata(); subscriptions.forEach( subscription -> { if (!metadata.containsKey(subscription.getApplication())) { ApplicationEntity applicationEntity = applicationService.findById(subscription.getApplication()); metadata.put(subscription.getApplication(), "name", applicationEntity.getName()); } if (!metadata.containsKey(subscription.getPlan())) { PlanEntity planEntity = planService.findById(subscription.getPlan()); metadata.put(subscription.getPlan(), "name", planEntity.getName()); } if (!metadata.containsKey(subscription.getApi())) { ApiEntity api = apiService.findById(subscription.getApi()); metadata.put(subscription.getApi(), "name", api.getName()); } }); return metadata; }
private TaskEntity convert(SubscriptionEntity subscription) { TaskEntity taskEntity = new TaskEntity(); try { taskEntity.setType(TaskType.SUBSCRIPTION_APPROVAL); taskEntity.setCreatedAt(subscription.getCreatedAt()); taskEntity.setData(subscription); } catch (Exception e) { LOGGER.error("Error converting subscription {} to a Task", subscription.getId()); throw new TechnicalManagementException("Error converting subscription " + subscription.getId() + " to a Task", e); } return taskEntity; } }
private SubscriptionEntity convert(Subscription subscription) { SubscriptionEntity entity = new SubscriptionEntity(); entity.setId(subscription.getId()); entity.setApi(subscription.getApi()); entity.setPlan(subscription.getPlan()); entity.setProcessedAt(subscription.getProcessedAt()); entity.setStatus(SubscriptionStatus.valueOf(subscription.getStatus().name())); entity.setProcessedBy(subscription.getProcessedBy()); entity.setRequest(subscription.getRequest()); entity.setReason(subscription.getReason()); entity.setApplication(subscription.getApplication()); entity.setStartingAt(subscription.getStartingAt()); entity.setEndingAt(subscription.getEndingAt()); entity.setCreatedAt(subscription.getCreatedAt()); entity.setUpdatedAt(subscription.getUpdatedAt()); entity.setSubscribedBy(subscription.getSubscribedBy()); entity.setClosedAt(subscription.getClosedAt()); entity.setClientId(subscription.getClientId()); entity.setPausedAt(subscription.getPausedAt()); return entity; }
@Override public void run() { logger.debug("Refresh subscriptions #{} started at {}", counter.incrementAndGet(), Instant.now().toString()); final Set<String> apiIds = apiService.findAllLight().stream() .map(ApiEntity::getId) .collect(toSet()); final SubscriptionQuery query = new SubscriptionQuery(); query.setApis(apiIds); query.setStatuses(Collections.singleton(SubscriptionStatus.ACCEPTED)); final Collection<SubscriptionEntity> subscriptions = subscriptionService.search(query); final Date now = new Date(); subscriptions .forEach(subscription -> { if (subscription.getEndingAt() != null && subscription.getEndingAt().before(now)) { subscriptionService.close(subscription.getId()); } }); logger.debug("Refresh subscriptions #{} ended at {}", counter.get(), Instant.now().toString()); } }
private Subscription convert(SubscriptionEntity subscriptionEntity) { Subscription subscription = new Subscription(); subscription.setId(subscriptionEntity.getId()); subscription.setCreatedAt(subscriptionEntity.getCreatedAt()); subscription.setUpdatedAt(subscriptionEntity.getUpdatedAt()); subscription.setStartingAt(subscriptionEntity.getStartingAt()); subscription.setEndingAt(subscriptionEntity.getEndingAt()); subscription.setProcessedAt(subscriptionEntity.getProcessedAt()); subscription.setProcessedBy(subscriptionEntity.getProcessedBy()); subscription.setReason(subscriptionEntity.getReason()); subscription.setStatus(subscriptionEntity.getStatus()); ApplicationEntity application = applicationService.findById(subscriptionEntity.getApplication()); subscription.setApplication( new Subscription.Application( PlanEntity plan = planService.findById(subscriptionEntity.getPlan()); subscription.setPlan(new Subscription.Plan(plan.getId(), plan.getName())); subscription.setClosedAt(subscriptionEntity.getClosedAt());
@POST @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = "Subscribe to a plan", notes = "User must have the MANAGE_SUBSCRIPTIONS permission to use this service") @ApiResponses({ @ApiResponse(code = 201, message = "Subscription successfully created", response = Subscription.class), @ApiResponse(code = 500, message = "Internal server error")}) @Permissions({ @Permission(value = RolePermission.API_SUBSCRIPTION, acls = RolePermissionAction.CREATE) }) public Response createSubscription( @PathParam("api") String api, @ApiParam(name = "application", required = true) @NotNull @QueryParam("application") String application, @ApiParam(name = "plan", required = true) @NotNull @QueryParam("plan") String plan) { // Create subscription SubscriptionEntity subscription = subscriptionService.create(new NewSubscriptionEntity(plan, application)); if (subscription.getStatus() == SubscriptionStatus.PENDING) { ProcessSubscriptionEntity process = new ProcessSubscriptionEntity(); process.setId(subscription.getId()); process.setAccepted(true); process.setStartingAt(new Date()); subscription = subscriptionService.process(process, getAuthenticatedUser()); } return Response .created(URI.create("/apis/" + api + "/subscriptions/" + subscription.getId())) .entity(convert(subscription)) .build(); }
/** * Generate an {@link ApiKey} from a subscription. * * @param subscription * @return An Api Key */ private ApiKey generateForSubscription(String subscription) { SubscriptionEntity subscriptionEntity = subscriptionService.findById(subscription); Date now = new Date(); if (subscriptionEntity.getEndingAt() != null && subscriptionEntity.getEndingAt().before(now)) { throw new SubscriptionClosedException(subscription); } ApiKey apiKey = new ApiKey(); apiKey.setSubscription(subscription); apiKey.setApplication(subscriptionEntity.getApplication()); apiKey.setPlan(subscriptionEntity.getPlan()); apiKey.setCreatedAt(new Date()); apiKey.setUpdatedAt(apiKey.getCreatedAt()); apiKey.setKey(apiKeyGenerator.generate()); // By default, the API Key will expire when subscription is closed apiKey.setExpireAt(subscriptionEntity.getEndingAt()); return apiKey; }
@Override public Set<ApiKeyEntity> findBySubscription(String subscription) { try { LOGGER.debug("Find API Keys for subscription {}", subscription); SubscriptionEntity subscriptionEntity = subscriptionService.findById(subscription); Set<ApiKey> keys = apiKeyRepository.findBySubscription(subscriptionEntity.getId()); return keys.stream().map(ApiKeyServiceImpl::convert).collect(Collectors.toSet()); } catch (TechnicalException ex) { LOGGER.error("An error occurs while finding API keys for subscription {}", subscription, ex); throw new TechnicalManagementException( String.format("An error occurs while finding API keys for subscription %s", subscription), ex); } }
public Metadata getMetadata(List<TaskEntity> tasks) { Metadata metadata = new Metadata(); tasks.forEach( task -> { SubscriptionEntity subscription = (SubscriptionEntity)task.getData(); if (!metadata.containsKey(subscription.getApplication())) { ApplicationEntity applicationEntity = applicationService.findById(subscription.getApplication()); metadata.put(subscription.getApplication(), "name", applicationEntity.getName()); } if (!metadata.containsKey(subscription.getPlan())) { PlanEntity planEntity = planService.findById(subscription.getPlan()); String apiId = planEntity.getApis().iterator().next(); ApiEntity api = apiService.findById(apiId); metadata.put(subscription.getPlan(), "name", planEntity.getName()); metadata.put(subscription.getPlan(), "api", apiId); metadata.put(apiId, "name", api.getName()); } }); return metadata; }
@DELETE @Path("{subscription}") @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = "Close the subscription", notes = "User must have the APPLICATION_SUBSCRIPTION[DELETE] permission to use this service") @ApiResponses({ @ApiResponse(code = 200, message = "Subscription has been closed successfully", response = Subscription.class), @ApiResponse(code = 500, message = "Internal server error")}) @Permissions({ @Permission(value = RolePermission.APPLICATION_SUBSCRIPTION, acls = RolePermissionAction.DELETE) }) public Response closeSubscription( @PathParam("application") String application, @PathParam("subscription") String subscriptionId) { SubscriptionEntity subscription = subscriptionService.findById(subscriptionId); if (subscription.getApplication().equals(application)) { return Response.ok(convert(subscriptionService.close(subscriptionId))).build(); } return Response .status(Response.Status.FORBIDDEN) .build(); }
private Subscription convert(SubscriptionEntity subscriptionEntity) { Subscription subscription = new Subscription(); subscription.setId(subscriptionEntity.getId()); subscription.setCreatedAt(subscriptionEntity.getCreatedAt()); subscription.setUpdatedAt(subscriptionEntity.getUpdatedAt()); subscription.setStartingAt(subscriptionEntity.getStartingAt()); subscription.setEndingAt(subscriptionEntity.getEndingAt()); subscription.setProcessedAt(subscriptionEntity.getProcessedAt()); subscription.setProcessedBy(subscriptionEntity.getProcessedBy()); subscription.setReason(subscriptionEntity.getReason()); subscription.setStatus(subscriptionEntity.getStatus()); ApplicationEntity application = applicationService.findById(subscriptionEntity.getApplication()); subscription.setApplication( new Subscription.Application( PlanEntity plan = planService.findById(subscriptionEntity.getPlan()); subscription.setPlan(new Subscription.Plan(plan.getId(), plan.getName())); subscription.setClosedAt(subscriptionEntity.getClosedAt());
private SubscriptionEntity convert(Subscription subscription) { SubscriptionEntity entity = new SubscriptionEntity(); entity.setId(subscription.getId()); entity.setApi(subscription.getApi()); entity.setPlan(subscription.getPlan()); entity.setProcessedAt(subscription.getProcessedAt()); entity.setStatus(SubscriptionStatus.valueOf(subscription.getStatus().name())); entity.setProcessedBy(subscription.getProcessedBy()); entity.setRequest(subscription.getRequest()); entity.setReason(subscription.getReason()); entity.setApplication(subscription.getApplication()); entity.setStartingAt(subscription.getStartingAt()); entity.setEndingAt(subscription.getEndingAt()); entity.setCreatedAt(subscription.getCreatedAt()); entity.setUpdatedAt(subscription.getUpdatedAt()); entity.setSubscribedBy(subscription.getSubscribedBy()); entity.setClosedAt(subscription.getClosedAt()); entity.setClientId(subscription.getClientId()); entity.setPausedAt(subscription.getPausedAt()); return entity; }
@POST @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = "Subscribe to a plan", notes = "User must have the MANAGE_SUBSCRIPTIONS permission to use this service") @ApiResponses({ @ApiResponse(code = 201, message = "Subscription successfully created", response = Subscription.class), @ApiResponse(code = 500, message = "Internal server error")}) @Permissions({ @Permission(value = RolePermission.API_SUBSCRIPTION, acls = RolePermissionAction.CREATE) }) public Response createSubscription( @PathParam("api") String api, @ApiParam(name = "application", required = true) @NotNull @QueryParam("application") String application, @ApiParam(name = "plan", required = true) @NotNull @QueryParam("plan") String plan) { // Create subscription SubscriptionEntity subscription = subscriptionService.create(new NewSubscriptionEntity(plan, application)); if (subscription.getStatus() == SubscriptionStatus.PENDING) { ProcessSubscriptionEntity process = new ProcessSubscriptionEntity(); process.setId(subscription.getId()); process.setAccepted(true); process.setStartingAt(new Date()); subscription = subscriptionService.process(process, getAuthenticatedUser()); } return Response .created(URI.create("/apis/" + api + "/subscriptions/" + subscription.getId())) .entity(convert(subscription)) .build(); }
/** * Generate an {@link ApiKey} from a subscription. * * @param subscription * @return An Api Key */ private ApiKey generateForSubscription(String subscription) { SubscriptionEntity subscriptionEntity = subscriptionService.findById(subscription); Date now = new Date(); if (subscriptionEntity.getEndingAt() != null && subscriptionEntity.getEndingAt().before(now)) { throw new SubscriptionClosedException(subscription); } ApiKey apiKey = new ApiKey(); apiKey.setSubscription(subscription); apiKey.setApplication(subscriptionEntity.getApplication()); apiKey.setPlan(subscriptionEntity.getPlan()); apiKey.setCreatedAt(new Date()); apiKey.setUpdatedAt(apiKey.getCreatedAt()); apiKey.setKey(apiKeyGenerator.generate()); // By default, the API Key will expire when subscription is closed apiKey.setExpireAt(subscriptionEntity.getEndingAt()); return apiKey; }
@Override public Set<ApiKeyEntity> findBySubscription(String subscription) { try { LOGGER.debug("Find API Keys for subscription {}", subscription); SubscriptionEntity subscriptionEntity = subscriptionService.findById(subscription); Set<ApiKey> keys = apiKeyRepository.findBySubscription(subscriptionEntity.getId()); return keys.stream().map(ApiKeyServiceImpl::convert).collect(Collectors.toSet()); } catch (TechnicalException ex) { LOGGER.error("An error occurs while finding API keys for subscription {}", subscription, ex); throw new TechnicalManagementException( String.format("An error occurs while finding API keys for subscription %s", subscription), ex); } }
@Override public void run() { logger.debug("Refresh subscriptions #{} started at {}", counter.incrementAndGet(), Instant.now().toString()); final Set<String> apiIds = apiService.findAllLight().stream() .map(ApiEntity::getId) .collect(toSet()); final SubscriptionQuery query = new SubscriptionQuery(); query.setApis(apiIds); query.setStatuses(Collections.singleton(SubscriptionStatus.ACCEPTED)); final Collection<SubscriptionEntity> subscriptions = subscriptionService.search(query); final Date now = new Date(); subscriptions .forEach(subscription -> { if (subscription.getEndingAt() != null && subscription.getEndingAt().before(now)) { subscriptionService.close(subscription.getId()); } }); logger.debug("Refresh subscriptions #{} ended at {}", counter.get(), Instant.now().toString()); } }
public Metadata getMetadata(List<TaskEntity> tasks) { Metadata metadata = new Metadata(); tasks.forEach( task -> { SubscriptionEntity subscription = (SubscriptionEntity)task.getData(); if (!metadata.containsKey(subscription.getApplication())) { ApplicationEntity applicationEntity = applicationService.findById(subscription.getApplication()); metadata.put(subscription.getApplication(), "name", applicationEntity.getName()); } if (!metadata.containsKey(subscription.getPlan())) { PlanEntity planEntity = planService.findById(subscription.getPlan()); String apiId = planEntity.getApis().iterator().next(); ApiEntity api = apiService.findById(apiId); metadata.put(subscription.getPlan(), "name", planEntity.getName()); metadata.put(subscription.getPlan(), "api", apiId); metadata.put(apiId, "name", api.getName()); } }); return metadata; }
@DELETE @Path("{subscription}") @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = "Close the subscription", notes = "User must have the APPLICATION_SUBSCRIPTION[DELETE] permission to use this service") @ApiResponses({ @ApiResponse(code = 200, message = "Subscription has been closed successfully", response = Subscription.class), @ApiResponse(code = 500, message = "Internal server error")}) @Permissions({ @Permission(value = RolePermission.APPLICATION_SUBSCRIPTION, acls = RolePermissionAction.DELETE) }) public Response closeSubscription( @PathParam("application") String application, @PathParam("subscription") String subscriptionId) { SubscriptionEntity subscription = subscriptionService.findById(subscriptionId); if (subscription.getApplication().equals(application)) { return Response.ok(convert(subscriptionService.close(subscriptionId))).build(); } return Response .status(Response.Status.FORBIDDEN) .build(); }
private Subscription convert(SubscriptionEntity subscriptionEntity) { Subscription subscription = new Subscription(); subscription.setId(subscriptionEntity.getId()); subscription.setCreatedAt(subscriptionEntity.getCreatedAt()); subscription.setUpdatedAt(subscriptionEntity.getUpdatedAt()); subscription.setStartingAt(subscriptionEntity.getStartingAt()); subscription.setEndingAt(subscriptionEntity.getEndingAt()); subscription.setProcessedAt(subscriptionEntity.getProcessedAt()); subscription.setProcessedBy(subscriptionEntity.getProcessedBy()); subscription.setReason(subscriptionEntity.getReason()); subscription.setStatus(subscriptionEntity.getStatus()); subscription.setSubscribedBy( new Subscription.User(subscriptionEntity.getSubscribedBy(), userService.findById(subscriptionEntity.getSubscribedBy()).getDisplayName() )); PlanEntity plan = planService.findById(subscriptionEntity.getPlan()); subscription.setPlan(new Subscription.Plan(plan.getId(), plan.getName())); ApplicationEntity application = applicationService.findById(subscriptionEntity.getApplication()); subscription.setApplication( new Subscription.Application( subscription.setClosedAt(subscriptionEntity.getClosedAt());