feat(preview): 新增 Gitee 授权登录接口

This commit is contained in:
xlsea 2025-04-01 10:30:11 +08:00
parent 52fc8b7ddf
commit 3712dead8a
5 changed files with 63 additions and 10 deletions

View File

@ -80,5 +80,5 @@ snail-job:
retry-pull-page-size: 1000 # 拉取重试数据的每批次的大小
job-pull-page-size: 1000 # 拉取重试数据的每批次的大小
server-port: 17888 # 服务器端口
log-storage: 7 # 日志保存时间(单位: day)
log-storage: 1 # 日志保存时间(单位: day)
rpc-type: grpc

View File

@ -5,10 +5,7 @@ import com.aizuda.snailjob.server.web.annotation.LoginRequired;
import com.aizuda.snailjob.server.web.annotation.LoginUser;
import com.aizuda.snailjob.server.web.annotation.RoleEnum;
import com.aizuda.snailjob.server.web.model.base.PageResult;
import com.aizuda.snailjob.server.web.model.request.SystemUpdateUserPasswordRequestVO;
import com.aizuda.snailjob.server.web.model.request.SystemUserQueryVO;
import com.aizuda.snailjob.server.web.model.request.SystemUserRequestVO;
import com.aizuda.snailjob.server.web.model.request.UserSessionVO;
import com.aizuda.snailjob.server.web.model.request.*;
import com.aizuda.snailjob.server.web.model.response.PermissionsResponseVO;
import com.aizuda.snailjob.server.web.model.response.SystemUserResponseVO;
import com.aizuda.snailjob.server.web.service.SystemUserService;
@ -36,6 +33,11 @@ public class SystemUserController {
return systemUserService.login(requestVO);
}
@PostMapping("/auth/login/token")
public SystemUserResponseVO loginToken(@RequestBody SystemAuthRequestVO requestVO){
return systemUserService.loginByToken(requestVO);
}
@LoginRequired
@GetMapping("/user/info")
public SystemUserResponseVO getUserInfo(@LoginUser UserSessionVO systemUser) {

View File

@ -0,0 +1,18 @@
package com.aizuda.snailjob.server.web.model.request;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import org.springframework.web.bind.annotation.PostMapping;
/**
* @author opensnail
* @date 2022-03-05
* @since 2.0
*/
@Data
public class SystemAuthRequestVO {
@NotBlank(message = "凭据不能为空", groups = PostMapping.class)
private String token;
}

View File

@ -1,10 +1,7 @@
package com.aizuda.snailjob.server.web.service;
import com.aizuda.snailjob.server.web.model.base.PageResult;
import com.aizuda.snailjob.server.web.model.request.SystemUpdateUserPasswordRequestVO;
import com.aizuda.snailjob.server.web.model.request.SystemUserQueryVO;
import com.aizuda.snailjob.server.web.model.request.SystemUserRequestVO;
import com.aizuda.snailjob.server.web.model.request.UserSessionVO;
import com.aizuda.snailjob.server.web.model.request.*;
import com.aizuda.snailjob.server.web.model.response.PermissionsResponseVO;
import com.aizuda.snailjob.server.web.model.response.SystemUserResponseVO;
@ -22,6 +19,8 @@ public interface SystemUserService {
SystemUserResponseVO login(SystemUserRequestVO requestVO);
SystemUserResponseVO loginByToken(SystemAuthRequestVO requestVO);
SystemUserResponseVO getUserInfo(UserSessionVO systemUser);
void addUser(SystemUserRequestVO requestVO);

View File

@ -7,7 +7,6 @@ import cn.hutool.crypto.SecureUtil;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.core.util.StreamUtils;
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
import com.aizuda.snailjob.server.web.model.request.UserSessionVO;
import com.aizuda.snailjob.server.web.annotation.RoleEnum;
import com.aizuda.snailjob.server.web.model.base.PageResult;
import com.aizuda.snailjob.server.web.model.request.*;
@ -27,13 +26,16 @@ import com.aizuda.snailjob.template.datasource.persistence.po.SystemUserPermissi
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.AES;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.nio.charset.StandardCharsets;
import java.util.*;
/**
@ -47,6 +49,10 @@ import java.util.*;
@Service
@RequiredArgsConstructor
public class SystemUserServiceImpl implements SystemUserService {
@Value("${gitee.login.key:123456}")
private String giteeLoginKey;
public static final long EXPIRE_TIME = 3600 * 24 * 1000;
private final SystemUserMapper systemUserMapper;
@ -81,6 +87,34 @@ public class SystemUserServiceImpl implements SystemUserService {
return systemUserResponseVO;
}
@Override
public SystemUserResponseVO loginByToken(SystemAuthRequestVO requestVO) {
try {
byte[] bytes = Base64.getUrlDecoder().decode(requestVO.getToken());
String text = new String(AES.decrypt(bytes, giteeLoginKey.getBytes(StandardCharsets.UTF_8)));
long timestamp = Long.parseLong(text.substring(0, 10));
long currentTime = System.currentTimeMillis() / 1000;
if ((currentTime - timestamp) > 600) {
throw new SnailJobServerException("授权票据已失效");
}
} catch (Throwable t) {
throw new SnailJobServerException("授权票据验证失败");
}
SystemUser systemUser = systemUserMapper.selectOne(
new LambdaQueryWrapper<SystemUser>()
.eq(SystemUser::getUsername, "developer"));
String loginToken = getToken(systemUser);
SystemUserResponseVO systemUserResponseVO = SystemUserResponseVOConverter.INSTANCE.convert(systemUser);
systemUserResponseVO.setToken(loginToken);
getPermission(systemUser.getRole(), systemUser.getId(), systemUserResponseVO);
return systemUserResponseVO;
}
private void getPermission(Integer role, Long userId, final SystemUserResponseVO systemUserResponseVO) {
LambdaQueryWrapper<Namespace> queryWrapper = new LambdaQueryWrapper<>();