diff --git a/maku-boot-system/src/main/java/net/maku/system/controller/SysThirdLoginConfigController.java b/maku-boot-system/src/main/java/net/maku/system/controller/SysThirdLoginConfigController.java new file mode 100644 index 0000000..83d13b0 --- /dev/null +++ b/maku-boot-system/src/main/java/net/maku/system/controller/SysThirdLoginConfigController.java @@ -0,0 +1,77 @@ +package net.maku.system.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import net.maku.framework.common.query.Query; +import net.maku.framework.common.utils.PageResult; +import net.maku.framework.common.utils.Result; +import net.maku.system.convert.SysThirdLoginConfigConvert; +import net.maku.system.entity.SysThirdLoginConfigEntity; +import net.maku.system.service.SysThirdLoginConfigService; +import net.maku.system.vo.SysThirdLoginConfigVO; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 第三方登录配置 + * + * @author 阿沐 babamu@126.com + * MAKU + */ +@RestController +@RequestMapping("sys/third/config") +@Tag(name = "第三方登录配置") +@AllArgsConstructor +public class SysThirdLoginConfigController { + private final SysThirdLoginConfigService sysThirdLoginConfigService; + + @GetMapping("page") + @Operation(summary = "分页") + @PreAuthorize("hasAuthority('third:config:all')") + public Result> page(@ParameterObject @Valid Query query) { + PageResult page = sysThirdLoginConfigService.page(query); + + return Result.ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @PreAuthorize("hasAuthority('third:config:all')") + public Result get(@PathVariable("id") Long id) { + SysThirdLoginConfigEntity entity = sysThirdLoginConfigService.getById(id); + + return Result.ok(SysThirdLoginConfigConvert.INSTANCE.convert(entity)); + } + + @PostMapping + @Operation(summary = "保存") + @PreAuthorize("hasAuthority('third:config:all')") + public Result save(@RequestBody SysThirdLoginConfigVO vo) { + sysThirdLoginConfigService.save(vo); + + return Result.ok(); + } + + @PutMapping + @Operation(summary = "修改") + @PreAuthorize("hasAuthority('third:config:all')") + public Result update(@RequestBody @Valid SysThirdLoginConfigVO vo) { + sysThirdLoginConfigService.update(vo); + + return Result.ok(); + } + + @DeleteMapping + @Operation(summary = "删除") + @PreAuthorize("hasAuthority('third:config:all')") + public Result delete(@RequestBody List idList) { + sysThirdLoginConfigService.delete(idList); + + return Result.ok(); + } +} \ No newline at end of file diff --git a/maku-boot-system/src/main/java/net/maku/system/convert/SysThirdLoginConfigConvert.java b/maku-boot-system/src/main/java/net/maku/system/convert/SysThirdLoginConfigConvert.java new file mode 100644 index 0000000..ef93720 --- /dev/null +++ b/maku-boot-system/src/main/java/net/maku/system/convert/SysThirdLoginConfigConvert.java @@ -0,0 +1,26 @@ +package net.maku.system.convert; + +import net.maku.system.entity.SysThirdLoginConfigEntity; +import net.maku.system.vo.SysThirdLoginConfigVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 第三方登录配置 + * + * @author 阿沐 babamu@126.com + * MAKU + */ +@Mapper +public interface SysThirdLoginConfigConvert { + SysThirdLoginConfigConvert INSTANCE = Mappers.getMapper(SysThirdLoginConfigConvert.class); + + SysThirdLoginConfigEntity convert(SysThirdLoginConfigVO vo); + + SysThirdLoginConfigVO convert(SysThirdLoginConfigEntity entity); + + List convertList(List list); + +} \ No newline at end of file diff --git a/maku-boot-system/src/main/java/net/maku/system/dao/SysThirdLoginConfigDao.java b/maku-boot-system/src/main/java/net/maku/system/dao/SysThirdLoginConfigDao.java new file mode 100644 index 0000000..d8b380c --- /dev/null +++ b/maku-boot-system/src/main/java/net/maku/system/dao/SysThirdLoginConfigDao.java @@ -0,0 +1,16 @@ +package net.maku.system.dao; + +import net.maku.framework.mybatis.dao.BaseDao; +import net.maku.system.entity.SysThirdLoginConfigEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 第三方登录配置 + * + * @author 阿沐 babamu@126.com + * MAKU + */ +@Mapper +public interface SysThirdLoginConfigDao extends BaseDao { + +} \ No newline at end of file diff --git a/maku-boot-system/src/main/java/net/maku/system/entity/SysThirdLoginConfigEntity.java b/maku-boot-system/src/main/java/net/maku/system/entity/SysThirdLoginConfigEntity.java new file mode 100644 index 0000000..c4325ef --- /dev/null +++ b/maku-boot-system/src/main/java/net/maku/system/entity/SysThirdLoginConfigEntity.java @@ -0,0 +1,73 @@ +package net.maku.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * 第三方登录配置 + * + * @author 阿沐 babamu@126.com + * MAKU + */ +@Data +@TableName("sys_third_login_config") +public class SysThirdLoginConfigEntity { + /** + * id + */ + @TableId + private Long id; + + /** + * 开放平台类型 + */ + private String openType; + + /** + * ClientID + */ + private String clientId; + + /** + * ClientSecret + */ + private String clientSecret; + + /** + * RedirectUri + */ + private String redirectUri; + + /** + * AgentID + */ + private String agentId; + + /** + * 租户ID + */ + private Long tenantId; + + /** + * 版本号 + */ + @Version + @TableField(fill = FieldFill.INSERT) + private Integer version; + + /** + * 删除标记 + */ + @TableLogic + @TableField(fill = FieldFill.INSERT) + private Integer deleted; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + +} \ No newline at end of file diff --git a/maku-boot-system/src/main/java/net/maku/system/service/SysThirdLoginConfigService.java b/maku-boot-system/src/main/java/net/maku/system/service/SysThirdLoginConfigService.java new file mode 100644 index 0000000..31ea584 --- /dev/null +++ b/maku-boot-system/src/main/java/net/maku/system/service/SysThirdLoginConfigService.java @@ -0,0 +1,34 @@ +package net.maku.system.service; + +import me.zhyd.oauth.request.AuthRequest; +import net.maku.framework.common.query.Query; +import net.maku.framework.common.utils.PageResult; +import net.maku.framework.mybatis.service.BaseService; +import net.maku.system.entity.SysThirdLoginConfigEntity; +import net.maku.system.vo.SysThirdLoginConfigVO; + +import java.util.List; + +/** + * 第三方登录配置 + * + * @author 阿沐 babamu@126.com + * MAKU + */ +public interface SysThirdLoginConfigService extends BaseService { + + PageResult page(Query query); + + void save(SysThirdLoginConfigVO vo); + + void update(SysThirdLoginConfigVO vo); + + void delete(List idList); + + /** + * 根据类型,获取授权请求 + * + * @param openType 第三方登录类型 + */ + AuthRequest getAuthRequest(String openType); +} \ No newline at end of file diff --git a/maku-boot-system/src/main/java/net/maku/system/service/impl/SysThirdLoginConfigServiceImpl.java b/maku-boot-system/src/main/java/net/maku/system/service/impl/SysThirdLoginConfigServiceImpl.java new file mode 100644 index 0000000..de9747d --- /dev/null +++ b/maku-boot-system/src/main/java/net/maku/system/service/impl/SysThirdLoginConfigServiceImpl.java @@ -0,0 +1,97 @@ +package net.maku.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.AllArgsConstructor; +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.request.*; +import net.maku.framework.common.exception.ServerException; +import net.maku.framework.common.query.Query; +import net.maku.framework.common.utils.PageResult; +import net.maku.framework.mybatis.service.impl.BaseServiceImpl; +import net.maku.system.convert.SysThirdLoginConfigConvert; +import net.maku.system.dao.SysThirdLoginConfigDao; +import net.maku.system.entity.SysThirdLoginConfigEntity; +import net.maku.system.enums.ThirdLoginEnum; +import net.maku.system.service.SysThirdLoginConfigService; +import net.maku.system.vo.SysThirdLoginConfigVO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 第三方登录配置 + * + * @author 阿沐 babamu@126.com + * MAKU + */ +@Service +@AllArgsConstructor +public class SysThirdLoginConfigServiceImpl extends BaseServiceImpl implements SysThirdLoginConfigService { + + @Override + public PageResult page(Query query) { + IPage page = baseMapper.selectPage(getPage(query), Wrappers.lambdaQuery()); + + return new PageResult<>(SysThirdLoginConfigConvert.INSTANCE.convertList(page.getRecords()), page.getTotal()); + } + + @Override + public void save(SysThirdLoginConfigVO vo) { + SysThirdLoginConfigEntity entity = SysThirdLoginConfigConvert.INSTANCE.convert(vo); + + baseMapper.insert(entity); + } + + @Override + public void update(SysThirdLoginConfigVO vo) { + SysThirdLoginConfigEntity entity = SysThirdLoginConfigConvert.INSTANCE.convert(vo); + + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(List idList) { + removeByIds(idList); + } + + @Override + public AuthRequest getAuthRequest(String openType) { + SysThirdLoginConfigEntity config = baseMapper.selectOne(new LambdaQueryWrapper() + .eq(SysThirdLoginConfigEntity::getOpenType, openType)); + + if (config == null) { + throw new ServerException("未找到第三方登录配置"); + } + + AuthRequest authRequest = switch (ThirdLoginEnum.toEnum(openType)) { + case WECHAT_WORK -> new AuthWeChatEnterpriseQrcodeRequest(AuthConfig.builder() + .clientId(config.getClientId()) + .clientSecret(config.getClientSecret()) + .redirectUri(config.getRedirectUri()) + .agentId(config.getAgentId()) + .build()); + case DING_TALK -> new AuthDingTalkRequest(AuthConfig.builder() + .clientId(config.getClientId()) + .clientSecret(config.getClientSecret()) + .redirectUri(config.getRedirectUri()) + .build()); + case FEI_SHU -> new AuthFeishuRequest(AuthConfig.builder() + .clientId(config.getClientId()) + .clientSecret(config.getClientSecret()) + .redirectUri(config.getRedirectUri()) + .build()); + case WECHAT_OPEN -> new AuthWeChatOpenRequest(AuthConfig.builder() + .clientId(config.getClientId()) + .clientSecret(config.getClientSecret()) + .redirectUri(config.getRedirectUri()) + .build()); + }; + + return authRequest; + } + +} \ No newline at end of file diff --git a/maku-boot-system/src/main/java/net/maku/system/vo/SysThirdLoginConfigVO.java b/maku-boot-system/src/main/java/net/maku/system/vo/SysThirdLoginConfigVO.java new file mode 100644 index 0000000..ee498ad --- /dev/null +++ b/maku-boot-system/src/main/java/net/maku/system/vo/SysThirdLoginConfigVO.java @@ -0,0 +1,45 @@ +package net.maku.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import net.maku.framework.common.utils.DateUtils; + +import java.io.Serializable; +import java.util.Date; + +/** + * 第三方登录配置 + * + * @author 阿沐 babamu@126.com + * MAKU + */ +@Data +@Schema(description = "第三方登录配置") +public class SysThirdLoginConfigVO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(description = "id") + private Long id; + + @Schema(description = "开放平台类型") + private String openType; + + @Schema(description = "ClientID") + private String clientId; + + @Schema(description = "ClientSecret") + private String clientSecret; + + @Schema(description = "RedirectUri") + private String redirectUri; + + @Schema(description = "AgentID") + private String agentId; + + @Schema(description = "创建时间") + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date createTime; + + +} \ No newline at end of file