Browse Source

Add isExpired endpoint

pull/14074/head
Andrii Landiak 11 months ago
parent
commit
235fd1a27b
  1. 20
      application/src/main/java/org/thingsboard/server/controller/ApiKeyController.java
  2. 48
      application/src/test/java/org/thingsboard/server/controller/ApiKeyControllerTest.java

20
application/src/main/java/org/thingsboard/server/controller/ApiKeyController.java

@ -136,6 +136,26 @@ public class ApiKeyController extends BaseController {
return apiKeyService.saveApiKey(apiKey.getTenantId(), apiKey);
}
@ApiOperation(value = "Check if API key is expired (isApiKeyExpired)",
notes = "Returns true if the API key is expired, false otherwise. " +
"Referencing a non-existing ApiKey Id will cause a 'Not Found' error." +
AVAILABLE_FOR_ANY_AUTHORIZED_USER)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN', 'CUSTOMER_USER')")
@GetMapping(value = "/apiKey/{id}/expired")
public boolean isApiKeyExpired(
@Parameter(description = API_KEY_ID_PARAM_DESCRIPTION, required = true)
@PathVariable UUID id) throws ThingsboardException {
ApiKeyId apiKeyId = new ApiKeyId(id);
ApiKey apiKey = checkApiKeyId(apiKeyId, Operation.READ);
if (apiKey.getExpirationTime() > 0) {
return System.currentTimeMillis() > apiKey.getExpirationTime();
}
return false;
}
@ApiOperation(value = "Delete API key by ID (deleteApiKey)",
notes = "Deletes the API key. Referencing non-existing ApiKey Id will cause an error." + AVAILABLE_FOR_ANY_AUTHORIZED_USER)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN', 'CUSTOMER_USER')")

48
application/src/test/java/org/thingsboard/server/controller/ApiKeyControllerTest.java

@ -119,6 +119,54 @@ public class ApiKeyControllerTest extends AbstractControllerTest {
doDelete("/api/apiKey/" + savedApiKey.getId()).andExpect(status().isOk());
}
@Test
public void testIsApiKeyExpired() throws Exception {
doGet("/api/apiKey/" + UUID.randomUUID() + "/expired").andExpect(status().isNotFound());
ApiKeyInfo apiKeyInfo = constructApiKeyInfo("Test API key description", true);
doPost("/api/apiKey", apiKeyInfo, ApiKey.class);
PageData<ApiKeyInfo> pageData = doGetTypedWithPageLink("/api/apiKeys/" + tenantAdminUserId + "?", new TypeReference<>() {}, new PageLink(10, 0));
Assert.assertEquals(1, pageData.getData().size());
ApiKeyInfo savedApiKeyNoExpiration = pageData.getData().get(0);
Boolean isExpiredNoExpiration = doGet("/api/apiKey/" + savedApiKeyNoExpiration.getId().getId() + "/expired", Boolean.class);
Assert.assertNotNull(isExpiredNoExpiration);
Assert.assertFalse(isExpiredNoExpiration);
doDelete("/api/apiKey/" + savedApiKeyNoExpiration.getId()).andExpect(status().isOk());
ApiKeyInfo apiKeyInfoFutureExpiration = constructApiKeyInfo("Test API key future expiration", true);
long futureExpirationTime = System.currentTimeMillis() + 3600000;
apiKeyInfoFutureExpiration.setExpirationTime(futureExpirationTime);
doPost("/api/apiKey", apiKeyInfoFutureExpiration, ApiKey.class);
PageData<ApiKeyInfo> pageData2 = doGetTypedWithPageLink("/api/apiKeys/" + tenantAdminUserId + "?", new TypeReference<>() {}, new PageLink(10, 0));
Assert.assertEquals(1, pageData2.getData().size());
ApiKeyInfo savedApiKeyFuture = pageData2.getData().get(0);
Boolean isExpiredFuture = doGet("/api/apiKey/" + savedApiKeyFuture.getId().getId() + "/expired", Boolean.class);
Assert.assertNotNull(isExpiredFuture);
Assert.assertFalse(isExpiredFuture);
doDelete("/api/apiKey/" + savedApiKeyFuture.getId()).andExpect(status().isOk());
ApiKeyInfo apiKeyInfoPastExpiration = constructApiKeyInfo("Test API key past expiration", true);
long pastExpirationTime = System.currentTimeMillis() - 3600000;
apiKeyInfoPastExpiration.setExpirationTime(pastExpirationTime);
doPost("/api/apiKey", apiKeyInfoPastExpiration, ApiKey.class);
PageData<ApiKeyInfo> pageData3 = doGetTypedWithPageLink("/api/apiKeys/" + tenantAdminUserId + "?", new TypeReference<>() {}, new PageLink(10, 0));
Assert.assertEquals(1, pageData3.getData().size());
ApiKeyInfo savedApiKeyPast = pageData3.getData().get(0);
Boolean isExpiredPast = doGet("/api/apiKey/" + savedApiKeyPast.getId().getId() + "/expired", Boolean.class);
Assert.assertNotNull(isExpiredPast);
Assert.assertTrue(isExpiredPast);
doDelete("/api/apiKey/" + savedApiKeyPast.getId()).andExpect(status().isOk());
}
@Test
public void testDeleteApiKey() throws Exception {
doDelete("/api/apiKey/" + UUID.randomUUID()).andExpect(status().isNotFound());

Loading…
Cancel
Save