Browse Source

added "/oauth2/client/infos?clientIds=" api for UI

pull/11231/head
dashevchenko 2 years ago
parent
commit
8d7acca4d8
  1. 17
      application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java
  2. 4
      common/dao-api/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientService.java
  3. 17
      common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientInfo.java
  4. 3
      dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientDao.java
  5. 14
      dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientServiceImpl.java
  6. 8
      dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/JpaOAuth2ClientDao.java
  7. 2
      dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/OAuth2ClientRepository.java

17
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<OAuth2ClientInfo> 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<OAuth2ClientId> 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}")

4
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<OAuth2ClientInfo> findOAuth2ClientInfosByTenantId(TenantId tenantId, PageLink pageLink);
List<OAuth2ClientInfo> findOAuth2ClientInfosByIds(TenantId tenantId, List<OAuth2ClientId> oAuth2ClientIds);
}

17
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<OAuth2ClientId> {
public class OAuth2ClientInfo extends BaseData<OAuth2ClientId> 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<PlatformType> platforms;
@ -44,7 +49,15 @@ public class OAuth2ClientInfo extends BaseData<OAuth2ClientId> {
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;
}
}

3
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<OAuth2Client> {
String findAppSecret(UUID id, String pkgName);
void deleteByTenantId(TenantId tenantId);
List<OAuth2Client> findByIds(TenantId tenantId, List<OAuth2ClientId> oAuth2ClientIds);
}

14
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<OAuth2ClientInfo> findOAuth2ClientInfosByIds(TenantId tenantId, List<OAuth2ClientId> 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);

8
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<OAuth2ClientEntity, OAuth
repository.deleteByTenantId(tenantId.getId());
}
@Override
public List<OAuth2Client> findByIds(TenantId tenantId, List<OAuth2ClientId> oAuth2ClientIds) {
return DaoUtil.convertDataList(repository.findByTenantIdAndIdIn(tenantId.getId(), toUUIDs(oAuth2ClientIds)));
}
@Override
public EntityType getEntityType() {
return EntityType.OAUTH2_CLIENT;

2
dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/OAuth2ClientRepository.java

@ -79,4 +79,6 @@ public interface OAuth2ClientRepository extends JpaRepository<OAuth2ClientEntity
@Query("DELETE FROM OAuth2ClientEntity t WHERE t.tenantId = :tenantId")
void deleteByTenantId(@Param("tenantId") UUID tenantId);
List<OAuth2ClientEntity> findByTenantIdAndIdIn(UUID tenantId, List<UUID> queueStatsIds);
}

Loading…
Cancel
Save