From 49d3022d476251ddfa5d5a61a930193cd71e3836 Mon Sep 17 00:00:00 2001 From: Andrii Landiak Date: Mon, 29 Sep 2025 16:37:35 +0300 Subject: [PATCH] Refactor saveApiKey inside Controller --- .../server/controller/ApiKeyController.java | 6 ++++-- .../server/controller/ApiKeyControllerTest.java | 11 ++++++----- .../thingsboard/server/common/data/pat/ApiKey.java | 2 -- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/ApiKeyController.java b/application/src/main/java/org/thingsboard/server/controller/ApiKeyController.java index 81aca136fe..deb0628988 100644 --- a/application/src/main/java/org/thingsboard/server/controller/ApiKeyController.java +++ b/application/src/main/java/org/thingsboard/server/controller/ApiKeyController.java @@ -67,13 +67,15 @@ public class ApiKeyController extends BaseController { notes = "Creates an API key for the given user and returns the token ONCE as 'ApiKey '." + SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH) @PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN')") @PostMapping(value = "/apiKey") - public String saveApiKey( + public ApiKey saveApiKey( @Parameter(description = "A JSON value representing the Api Key token.") @RequestBody @Valid ApiKeyInfo apiKeyInfo) throws ThingsboardException { SecurityUser securityUser = getCurrentUser(); apiKeyInfo.setTenantId(securityUser.getTenantId()); checkEntity(apiKeyInfo.getId(), apiKeyInfo, Resource.API_KEY); - return toUserApiKey(checkNotNull(apiKeyService.saveApiKey(securityUser.getTenantId(), apiKeyInfo)).getHash()); + ApiKey savedApiKey = checkNotNull(apiKeyService.saveApiKey(securityUser.getTenantId(), apiKeyInfo)); + savedApiKey.setHash(toUserApiKey(savedApiKey.getHash())); + return savedApiKey; } @ApiOperation(value = "Get User Api Keys (getUserApiKeys)", diff --git a/application/src/test/java/org/thingsboard/server/controller/ApiKeyControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/ApiKeyControllerTest.java index b293d68c03..8b9e7cae8c 100644 --- a/application/src/test/java/org/thingsboard/server/controller/ApiKeyControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/ApiKeyControllerTest.java @@ -21,6 +21,7 @@ import org.junit.Before; import org.junit.Test; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.common.data.pat.ApiKey; import org.thingsboard.server.common.data.pat.ApiKeyInfo; import org.thingsboard.server.dao.service.DaoSqlTest; @@ -41,7 +42,7 @@ public class ApiKeyControllerTest extends AbstractControllerTest { public void testSaveApiKey() throws Exception { ApiKeyInfo apiKeyInfo = constructApiKeyInfo("New API key description", true); - String apiKeyStr = doPost("/api/apiKey", apiKeyInfo, String.class); + String apiKeyStr = doPost("/api/apiKey", apiKeyInfo, ApiKey.class).getHash(); Assert.assertTrue(apiKeyStr.startsWith(API_KEY_HEADER_PREFIX)); PageData pageData = doGetTypedWithPageLink("/api/apiKeys/" + tenantAdminUserId + "?", new TypeReference<>() {}, new PageLink(10, 0)); @@ -65,7 +66,7 @@ public class ApiKeyControllerTest extends AbstractControllerTest { ApiKeyInfo apiKeyInfo = constructApiKeyInfo("Test API key description", true); int expectedSize = 10; for (int i = 0; i < expectedSize; i++) { - doPost("/api/apiKey", apiKeyInfo, String.class); + doPost("/api/apiKey", apiKeyInfo, ApiKey.class); } PageData pageData2 = doGetTypedWithPageLink("/api/apiKeys/" + tenantAdminUserId + "?", new TypeReference<>() {}, new PageLink(10, 0)); @@ -83,7 +84,7 @@ public class ApiKeyControllerTest extends AbstractControllerTest { @Test public void testUpdateApiKeyDescription() throws Exception { ApiKeyInfo apiKeyInfo = constructApiKeyInfo("Test API key description", true); - doPost("/api/apiKey", apiKeyInfo, String.class); + doPost("/api/apiKey", apiKeyInfo, ApiKey.class); PageData pageData = doGetTypedWithPageLink("/api/apiKeys/" + tenantAdminUserId + "?", new TypeReference<>() {}, new PageLink(10, 0)); Assert.assertEquals(1, pageData.getData().size()); @@ -102,7 +103,7 @@ public class ApiKeyControllerTest extends AbstractControllerTest { @Test public void testEnableApiKey() throws Exception { ApiKeyInfo apiKeyInfo = constructApiKeyInfo("Test API key description", true); - doPost("/api/apiKey", apiKeyInfo, String.class); + doPost("/api/apiKey", apiKeyInfo, ApiKey.class); PageData pageData = doGetTypedWithPageLink("/api/apiKeys/" + tenantAdminUserId + "?", new TypeReference<>() {}, new PageLink(10, 0)); Assert.assertEquals(1, pageData.getData().size()); @@ -125,7 +126,7 @@ public class ApiKeyControllerTest extends AbstractControllerTest { doDelete("/api/apiKey/" + UUID.randomUUID()).andExpect(status().isNotFound()); ApiKeyInfo apiKeyInfo = constructApiKeyInfo("Test API key description", false); - doPost("/api/apiKey", apiKeyInfo, String.class); + doPost("/api/apiKey", apiKeyInfo, ApiKey.class); PageData pageData = doGetTypedWithPageLink("/api/apiKeys/" + tenantAdminUserId + "?", new TypeReference<>() {}, new PageLink(10, 0)); Assert.assertEquals(1, pageData.getData().size()); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/pat/ApiKey.java b/common/data/src/main/java/org/thingsboard/server/common/data/pat/ApiKey.java index 7188ed3ef5..82d88f1ae7 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/pat/ApiKey.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/pat/ApiKey.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.common.data.pat; -import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -34,7 +33,6 @@ public class ApiKey extends ApiKeyInfo { @NoXss @Schema(description = "Api key hash value", requiredMode = Schema.RequiredMode.REQUIRED) - @JsonIgnore private String hash; public ApiKey() {