diff --git a/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java b/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java index ce137be00e..ee46438569 100644 --- a/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java +++ b/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java @@ -16,6 +16,7 @@ package org.thingsboard.server.controller; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; @@ -48,6 +49,7 @@ import org.thingsboard.server.service.security.permission.Operation; import org.thingsboard.server.service.security.permission.Resource; import org.thingsboard.server.utils.MiscUtils; +import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.UUID; @@ -132,6 +134,21 @@ public class OAuth2Controller extends BaseController { return oAuth2ClientService.findOAuth2ClientInfosByTenantId(getTenantId(), pageLink); } + @ApiOperation(value = "Get OAuth2 Client Registration infos By Ids (findTenantOAuth2ClientInfosByIds)", + notes = "Fetch OAuth2 Client Registration info objects based on the provided ids. ") + @PreAuthorize("hasAnyAuthority('SYS_ADMIN')") + @GetMapping(value = "/oauth2/client/infos", params = {"clientIds"}) + public List findTenantOAuth2ClientInfosByIds( + @Parameter(description = "A list of oauth2 ids, separated by comma ','", array = @ArraySchema(schema = @Schema(type = "string")), required = true) + @RequestParam("clientIds") String[] strClientIds) throws ThingsboardException { + checkArrayParameter("clientIds", strClientIds); + List oAuth2ClientIds = new ArrayList<>(); + for (String oauth2ClientId : strClientIds) { + oAuth2ClientIds.add(new OAuth2ClientId(toUUID(oauth2ClientId))); + } + return oAuth2ClientService.findOAuth2ClientInfosByIds(getTenantId(), oAuth2ClientIds); + } + @ApiOperation(value = "Get OAuth2 Client Registration by id (getOAuth2ClientById)", notes = SYSTEM_AUTHORITY_PARAGRAPH) @PreAuthorize("hasAnyAuthority('SYS_ADMIN')") @GetMapping(value = "/oauth2/client/{id}") diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientService.java index 73fb8bafe7..a195e50917 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientService.java @@ -17,9 +17,9 @@ package org.thingsboard.server.dao.oauth2; import org.thingsboard.server.common.data.id.OAuth2ClientId; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.data.oauth2.OAuth2ClientLoginInfo; import org.thingsboard.server.common.data.oauth2.OAuth2Client; import org.thingsboard.server.common.data.oauth2.OAuth2ClientInfo; +import org.thingsboard.server.common.data.oauth2.OAuth2ClientLoginInfo; import org.thingsboard.server.common.data.oauth2.PlatformType; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -47,4 +47,6 @@ public interface OAuth2ClientService extends EntityDaoService { void deleteOauth2ClientsByTenantId(TenantId tenantId); PageData findOAuth2ClientInfosByTenantId(TenantId tenantId, PageLink pageLink); + + List findOAuth2ClientInfosByIds(TenantId tenantId, List oAuth2ClientIds); } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientInfo.java b/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientInfo.java index 1659855a2f..c2e9bce7be 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientInfo.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientInfo.java @@ -15,10 +15,12 @@ */ package org.thingsboard.server.common.data.oauth2; +import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.BaseData; +import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.id.OAuth2ClientId; import java.util.List; @@ -26,10 +28,13 @@ import java.util.List; @Data @Schema @EqualsAndHashCode(callSuper = true) -public class OAuth2ClientInfo extends BaseData { +public class OAuth2ClientInfo extends BaseData implements HasName { - @Schema(description = "Oauth2 client registration title (e.g. Google)") + @Schema(description = "Oauth2 client registration title (e.g. My google)") private String title; + + @Schema(description = "Oauth2 client provider name (e.g. Google)") + private String providerName; @Schema(description = "List of platforms for which usage of the OAuth2 client is allowed (empty for all allowed)") private List platforms; @@ -44,7 +49,15 @@ public class OAuth2ClientInfo extends BaseData { public OAuth2ClientInfo(OAuth2Client oAuth2Client) { super(oAuth2Client); this.title = oAuth2Client.getTitle(); + if (oAuth2Client.getAdditionalInfo() != null && oAuth2Client.getAdditionalInfo().has("providerName")) { + this.providerName = oAuth2Client.getAdditionalInfo().get("providerName").asText(); + } this.platforms = oAuth2Client.getPlatforms(); } + @Override + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public String getName() { + return title; + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientDao.java b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientDao.java index 673af18edb..c4c3b2e2ec 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientDao.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.oauth2; +import org.thingsboard.server.common.data.id.OAuth2ClientId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.oauth2.OAuth2Client; import org.thingsboard.server.common.data.oauth2.PlatformType; @@ -40,4 +41,6 @@ public interface OAuth2ClientDao extends Dao { String findAppSecret(UUID id, String pkgName); void deleteByTenantId(TenantId tenantId); + + List findByIds(TenantId tenantId, List oAuth2ClientIds); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientServiceImpl.java index 4b97f28fb4..f7eeb20277 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientServiceImpl.java @@ -24,9 +24,9 @@ import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.OAuth2ClientId; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.data.oauth2.OAuth2ClientLoginInfo; import org.thingsboard.server.common.data.oauth2.OAuth2Client; import org.thingsboard.server.common.data.oauth2.OAuth2ClientInfo; +import org.thingsboard.server.common.data.oauth2.OAuth2ClientLoginInfo; import org.thingsboard.server.common.data.oauth2.PlatformType; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -42,6 +42,7 @@ import java.util.UUID; import java.util.stream.Collectors; import static org.thingsboard.server.dao.service.Validator.validateId; +import static org.thingsboard.server.dao.service.Validator.validateIds; import static org.thingsboard.server.dao.service.Validator.validateString; @Slf4j @@ -138,6 +139,17 @@ public class OAuth2ClientServiceImpl extends AbstractEntityService implements OA return new PageData<>(oAuth2ClientInfos, clientInfos.getTotalPages(), clientInfos.getTotalPages(), clientInfos.hasNext()); } + @Override + public List findOAuth2ClientInfosByIds(TenantId tenantId, List oAuth2ClientIds) { + log.trace("Executing findQueueStatsByIds, tenantId [{}], queueStatsIds [{}]", tenantId, oAuth2ClientIds); + validateId(tenantId, id -> INCORRECT_TENANT_ID + id); + validateIds(oAuth2ClientIds, ids -> "Incorrect clientIds " + ids); + return oauth2ClientDao.findByIds(tenantId, oAuth2ClientIds) + .stream() + .map(OAuth2ClientInfo::new) + .collect(Collectors.toList()); + } + @Override public void deleteByTenantId(TenantId tenantId) { deleteOauth2ClientsByTenantId(tenantId); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/JpaOAuth2ClientDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/JpaOAuth2ClientDao.java index 542578a028..d58b68ed7c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/JpaOAuth2ClientDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/JpaOAuth2ClientDao.java @@ -19,6 +19,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.EntityType; +import org.thingsboard.server.common.data.id.OAuth2ClientId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.oauth2.OAuth2Client; import org.thingsboard.server.common.data.oauth2.PlatformType; @@ -33,6 +34,8 @@ import org.thingsboard.server.dao.util.SqlDao; import java.util.List; import java.util.UUID; +import static org.thingsboard.server.dao.DaoUtil.toUUIDs; + @Component @RequiredArgsConstructor @SqlDao @@ -86,6 +89,11 @@ public class JpaOAuth2ClientDao extends JpaAbstractDao findByIds(TenantId tenantId, List oAuth2ClientIds) { + return DaoUtil.convertDataList(repository.findByTenantIdAndIdIn(tenantId.getId(), toUUIDs(oAuth2ClientIds))); + } + @Override public EntityType getEntityType() { return EntityType.OAUTH2_CLIENT; diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/OAuth2ClientRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/OAuth2ClientRepository.java index 51804f2c82..8eaa2db010 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/OAuth2ClientRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/OAuth2ClientRepository.java @@ -79,4 +79,6 @@ public interface OAuth2ClientRepository extends JpaRepository findByTenantIdAndIdIn(UUID tenantId, List queueStatsIds); + }