Skip to content

Commit a819846

Browse files
committed
fix: no api key renewal for closed subscription
1 parent fc3f787 commit a819846

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

gravitee-apim-rest-api/gravitee-apim-rest-api-management-v2/gravitee-apim-rest-api-management-v2-rest/src/test/java/io/gravitee/rest/api/management/v2/rest/resource/api/ApiSubscriptionsResource_RenewApiKeysTest.java

+23
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import io.gravitee.rest.api.model.ApiKeyEntity;
3434
import io.gravitee.rest.api.model.ApiKeyMode;
3535
import io.gravitee.rest.api.model.SubscriptionEntity;
36+
import io.gravitee.rest.api.model.SubscriptionStatus;
3637
import io.gravitee.rest.api.model.parameters.Key;
3738
import io.gravitee.rest.api.model.parameters.ParameterReferenceType;
3839
import io.gravitee.rest.api.model.permissions.RolePermission;
@@ -156,6 +157,28 @@ public void should_return_400_if_application_is_in_shared_api_key_mode() {
156157
assertEquals("Invalid operation for API Key mode [SHARED] of application [my-application].", error.getMessage());
157158
}
158159

160+
@Test
161+
public void should_return_400_if_subscription_is_closed() {
162+
final SubscriptionEntity subscriptionEntity = SubscriptionFixtures
163+
.aSubscriptionEntity()
164+
.toBuilder()
165+
.id(SUBSCRIPTION)
166+
.api("ANOTHER-API")
167+
.status(SubscriptionStatus.CLOSED)
168+
.build();
169+
170+
when(subscriptionService.findById(SUBSCRIPTION)).thenReturn(subscriptionEntity);
171+
172+
final Response response = rootTarget().request().post(Entity.json(SubscriptionFixtures.aRenewApiKey()));
173+
assertEquals(BAD_REQUEST_400, response.getStatus());
174+
175+
var error = response.readEntity(Error.class);
176+
assertEquals(BAD_REQUEST_400, (int) error.getHttpStatus());
177+
assertEquals("Subscription [my-subscription] should be paused or accepted. Currently it is CLOSED", error.getMessage());
178+
179+
verify(subscriptionService, never()).pause(any(), any());
180+
}
181+
159182
@Test
160183
public void should_renew_api_keys() {
161184
final SubscriptionEntity subscriptionEntity = SubscriptionFixtures

gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/rest/api/service/impl/ApiKeyServiceImpl.java

+3
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ public ApiKeyEntity renew(ExecutionContext executionContext, SubscriptionEntity
137137

138138
@Override
139139
public ApiKeyEntity renew(ExecutionContext executionContext, SubscriptionEntity subscription, String customApiKey) {
140+
if (subscription.getStatus().equals(io.gravitee.rest.api.model.SubscriptionStatus.CLOSED)) {
141+
throw new SubscriptionNotActiveException(subscription);
142+
}
140143
final GenericPlanEntity genericPlanEntity = planSearchService.findById(executionContext, subscription.getPlan());
141144
io.gravitee.rest.api.model.v4.plan.PlanSecurityType planSecurityType = null;
142145
if (genericPlanEntity.getPlanSecurity() != null) {

gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/rest/api/service/impl/ApiKeyServiceTest.java

+7
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ public void shouldRenew() throws TechnicalException {
447447
subscription.setPlan(PLAN_ID);
448448
subscription.setApplication(APPLICATION_ID);
449449
subscription.setApi(api.getId());
450+
subscription.setStatus(SubscriptionStatus.PENDING);
450451

451452
ApplicationEntity application = new ApplicationEntity();
452453
application.setId(APPLICATION_ID);
@@ -516,6 +517,7 @@ public void shouldRenewAndKeepSharedSubscriptions() throws TechnicalException {
516517
subscription.setPlan(PLAN_ID);
517518
subscription.setApplication(APPLICATION_ID);
518519
subscription.setApi(api.getId());
520+
subscription.setStatus(SubscriptionStatus.PENDING);
519521

520522
ApplicationEntity application = new ApplicationEntity();
521523
application.setId(APPLICATION_ID);
@@ -563,6 +565,7 @@ public void shouldRenewWithoutRenewingExpiredKeys() throws TechnicalException {
563565
subscription.setPlan(PLAN_ID);
564566
subscription.setApplication(APPLICATION_ID);
565567
subscription.setApi(api.getId());
568+
subscription.setStatus(SubscriptionStatus.PENDING);
566569

567570
ApplicationEntity application = new ApplicationEntity();
568571
application.setId(APPLICATION_ID);
@@ -608,6 +611,7 @@ public void shouldNotRenewBecauseApiKeyAlreadyExistsForAnotherApp() throws Techn
608611
subscription.setApi(API_ID);
609612
subscription.setApplication(APPLICATION_ID);
610613
subscription.setPlan(PLAN_ID);
614+
subscription.setStatus(SubscriptionStatus.PENDING);
611615

612616
SubscriptionEntity conflictingSubscription = new SubscriptionEntity();
613617
conflictingSubscription.setId("conflicting-subscription-id");
@@ -635,6 +639,7 @@ public void shouldNotRenewBecauseApiKeyAlreadyExistsForAnotherApp() throws Techn
635639
public void shouldNotRenewSubscriptionWithJwtPlan() {
636640
SubscriptionEntity subscriptionEntity = new SubscriptionEntity();
637641
subscriptionEntity.setPlan(PLAN_ID);
642+
subscriptionEntity.setStatus(SubscriptionStatus.PENDING);
638643

639644
PlanEntity plan = new PlanEntity();
640645
plan.setSecurity(PlanSecurityType.JWT);
@@ -647,6 +652,7 @@ public void shouldNotRenewSubscriptionWithJwtPlan() {
647652
public void shouldNotRenewSubscriptionWithoutSecurity() {
648653
SubscriptionEntity subscriptionEntity = new SubscriptionEntity();
649654
subscriptionEntity.setPlan(PLAN_ID);
655+
subscriptionEntity.setStatus(SubscriptionStatus.PENDING);
650656

651657
when(planSearchService.findById(GraviteeContext.getExecutionContext(), PLAN_ID)).thenReturn(new PlanEntity());
652658

@@ -684,6 +690,7 @@ public void shouldRenewForCustomApiKeyAssociatedToClosedSubscription() throws Te
684690
SubscriptionEntity subscriptionEntity = new SubscriptionEntity();
685691
subscriptionEntity.setPlan(PLAN_ID);
686692
subscriptionEntity.setId(SUBSCRIPTION_ID);
693+
subscriptionEntity.setStatus(SubscriptionStatus.PENDING);
687694

688695
apiKeyService.renew(GraviteeContext.getExecutionContext(), subscriptionEntity, CUSTOM_API_KEY);
689696

0 commit comments

Comments
 (0)