Commit a8077cd6 by renyizhao

创建new api账号到获取令牌

parent 682c7f39
......@@ -3,11 +3,7 @@ package com.luhu.computility.module.apihub.config;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @author LeeYan9
* @since 2022-09-15
*/
@Configuration
@EnableConfigurationProperties(ApiOrderProperties.class)
@EnableConfigurationProperties({ApiOrderProperties.class, NewApiProperties.class})
public class ApiOrderConfig {
}
\ No newline at end of file
package com.luhu.computility.module.apihub.config;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties({ApiOrderProperties.class})
public class ApihubConfig {
}
\ No newline at end of file
package com.luhu.computility.module.apihub.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "computility.new-api")
public class NewApiProperties {
private String baseUrl = "http://localhost:3000";
private String adminToken;
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
public String getAdminToken() {
return adminToken;
}
public void setAdminToken(String adminToken) {
this.adminToken = adminToken;
}
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.newapi;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AiTokenRespVO {
private Boolean success;
private Boolean hasToken;
private String apiKey;
private String message;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.newapi;
import cn.hutool.http.HttpResponse;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NewApiResponse<T> {
private Boolean success;
private String message;
private T data;
private HttpResponse httpResponse;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.newapi;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class NewApiTokenItemVO {
private Long id;
private Long userId;
private String key;
private Integer status;
private String name;
private Long createdTime;
private Long accessedTime;
private Integer expiredTime;
private Integer remainQuota;
private Boolean unlimitedQuota;
private Boolean modelLimitsEnabled;
private String modelLimits;
private String allowIps;
private Double usedQuota;
private String group;
private Boolean crossGroupRetry;
private Object deletedAt;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.newapi;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NewApiTokenPageVO {
private Integer page;
private Integer pageSize;
private Integer total;
private java.util.List<NewApiTokenItemVO> items;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.newapi;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NewApiUserVO {
private Integer id;
private String username;
private String displayName;
private Integer status;
private String group;
private Integer role;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.app;
import com.luhu.computility.framework.security.core.util.SecurityFrameworkUtils;
import com.luhu.computility.module.apihub.controller.admin.newapi.AiTokenRespVO;
import com.luhu.computility.module.apihub.service.newapi.AiTokenService;
import com.luhu.computility.module.member.dal.dataobject.user.MemberUserDO;
import com.luhu.computility.module.member.service.user.MemberUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Slf4j
@RestController
@RequestMapping("/app/ai-token")
public class AppAiTokenController {
@Resource
private AiTokenService aiTokenService;
@Resource
private MemberUserService memberUserService;
@PostMapping("/get")
public AiTokenRespVO getToken() {
Long userId = SecurityFrameworkUtils.getLoginUserId();
log.info("[获取令牌] userId={}", userId);
MemberUserDO user = memberUserService.getUser(userId);
if (user == null) {
log.warn("[获取令牌] 用户不存在, userId={}", userId);
return AiTokenRespVO.builder()
.success(false)
.message("用户不存在")
.build();
}
log.info("[获取令牌] 用户信息: newapiUsername={}, newapiPassword={}, newapiUserId={}, newapiAccessToken={}, newapiKey={}",
user.getNewapiUsername(), user.getNewapiPassword() != null ? "***" : null,
user.getNewapiUserId(), user.getNewapiAccessToken() != null ? "***" : null,
user.getNewapiKey() != null ? "***" : null);
AiTokenService.AiTokenResult result = aiTokenService.getOrCreateToken(
user.getId(),
user.getNewapiUsername(),
user.getNewapiPassword(),
user.getNewapiUserId(),
user.getNewapiAccessToken(),
user.getNewapiKey()
);
log.info("[获取令牌] 结果: success={}, hasToken={}, apiKey={}, message={}",
result.getSuccess(), result.getHasToken(),
result.getApiKey() != null ? "***" : null, result.getMessage());
if (Boolean.TRUE.equals(result.getSuccess()) || result.getNewApiUserId() != null || result.getNewApiUsername() != null) {
log.info("[获取令牌] 更新用户NewAPI信息");
memberUserService.updateNewApiInfo(
userId,
result.getNewApiUserId() != null ? result.getNewApiUserId() : user.getNewapiUserId(),
result.getNewApiAccessToken() != null ? result.getNewApiAccessToken() : user.getNewapiAccessToken(),
result.getApiKey() != null ? result.getApiKey() : user.getNewapiKey(),
result.getNewApiUsername() != null ? result.getNewApiUsername() : user.getNewapiUsername(),
result.getNewApiPassword() != null ? result.getNewApiPassword() : user.getNewapiPassword()
);
}
return AiTokenRespVO.builder()
.success(result.getSuccess())
.hasToken(result.getHasToken())
.apiKey(result.getApiKey())
.message(result.getMessage())
.build();
}
@GetMapping("/info")
public AiTokenRespVO getTokenInfo() {
Long userId = SecurityFrameworkUtils.getLoginUserId();
log.info("[查询令牌] userId={}", userId);
MemberUserDO user = memberUserService.getUser(userId);
if (user == null) {
log.warn("[查询令牌] 用户不存在, userId={}", userId);
return AiTokenRespVO.builder()
.success(false)
.message("用户不存在")
.build();
}
boolean hasToken = user.getNewapiKey() != null && !user.getNewapiKey().isEmpty();
log.info("[查询令牌] hasToken={}, apiKey={}", hasToken, hasToken ? "***" : null);
return AiTokenRespVO.builder()
.success(true)
.hasToken(hasToken)
.apiKey(user.getNewapiKey())
.build();
}
}
\ No newline at end of file
......@@ -142,5 +142,27 @@ public class MemberUserDO extends TenantBaseDO {
*/
private Long groupId;
// ========== NewAPI 相关信息 ==========
/**
* NewAPI 用户ID
*/
private Long newapiUserId;
/**
* NewAPI 访问令牌
*/
private String newapiAccessToken;
/**
* NewAPI API Key
*/
private String newapiKey;
/**
* NewAPI 用户名
*/
private String newapiUsername;
/**
* NewAPI 密码
*/
private String newapiPassword;
}
......@@ -194,4 +194,17 @@ public interface MemberUserService {
*/
boolean updateUserPoint(Long userId, Integer point);
/**
* 更新用户的NewAPI相关信息
*
* @param userId 用户编号
* @param newapiUserId NewAPI用户ID
* @param newapiAccessToken NewAPI访问令牌
* @param newapiKey NewAPI密钥
* @param newapiUsername NewAPI用户名
* @param newapiPassword NewAPI密码
*/
void updateNewApiInfo(Long userId, Long newapiUserId, String newapiAccessToken, String newapiKey,
String newapiUsername, String newapiPassword);
}
......@@ -319,4 +319,17 @@ public class MemberUserServiceImpl implements MemberUserService {
return true;
}
@Override
public void updateNewApiInfo(Long userId, Long newapiUserId, String newapiAccessToken, String newapiKey,
String newapiUsername, String newapiPassword) {
memberUserMapper.updateById(MemberUserDO.builder()
.id(userId)
.newapiUserId(newapiUserId)
.newapiAccessToken(newapiAccessToken)
.newapiKey(newapiKey)
.newapiUsername(newapiUsername)
.newapiPassword(newapiPassword)
.build());
}
}
......@@ -211,6 +211,8 @@ wx:
# 芋道配置项,设置当前项目所有自定义的配置
computility:
new-api:
base-url: http://172.25.164.0:3000
captcha:
enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试;
security:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment