package com.iailab.module.system.controller.admin.oauth2.vo.client; import cn.hutool.core.util.StrUtil; import com.iailab.framework.common.util.json.JsonUtils; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.hibernate.validator.constraints.URL; import javax.validation.constraints.AssertTrue; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; @Schema(description = "管理后台 - OAuth2 客户端创建/修改 Request VO") @Data public class OAuth2ClientSaveReqVO { @Schema(description = "编号", example = "1024") private Long id; @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "tudou") @NotNull(message = "客户端编号不能为空") private String clientId; @Schema(description = "客户端密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "fan") @NotNull(message = "客户端密钥不能为空") private String secret; @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "土豆") @NotNull(message = "应用名不能为空") private String name; @Schema(description = "应用图标", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.baidu.com/xx.png") @NotNull(message = "应用图标不能为空") @URL(message = "应用图标的地址不正确") private String logo; @Schema(description = "应用描述", example = "我是一个应用") private String description; @Schema(description = "状态,参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "状态不能为空") private Integer status; @Schema(description = "访问令牌的有效期", requiredMode = Schema.RequiredMode.REQUIRED, example = "8640") @NotNull(message = "访问令牌的有效期不能为空") private Integer accessTokenValiditySeconds; @Schema(description = "刷新令牌的有效期", requiredMode = Schema.RequiredMode.REQUIRED, example = "8640000") @NotNull(message = "刷新令牌的有效期不能为空") private Integer refreshTokenValiditySeconds; @Schema(description = "可重定向的 URI 地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.baidu.com") @NotNull(message = "可重定向的 URI 地址不能为空") private List<@NotEmpty(message = "重定向的 URI 不能为空") @URL(message = "重定向的 URI 格式不正确") String> redirectUris; @Schema(description = "授权类型,参见 OAuth2GrantTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "password") @NotNull(message = "授权类型不能为空") private List authorizedGrantTypes; @Schema(description = "授权范围", example = "user_info") private List scopes; @Schema(description = "自动通过的授权范围", example = "user_info") private List autoApproveScopes; @Schema(description = "权限", example = "system:user:query") private List authorities; @Schema(description = "资源", example = "1024") private List resourceIds; @Schema(description = "附加信息", example = "{yunai: true}") private String additionalInformation; @AssertTrue(message = "附加信息必须是 JSON 格式") public boolean isAdditionalInformationJson() { return StrUtil.isEmpty(additionalInformation) || JsonUtils.isJson(additionalInformation); } }