Commit Graph
15 Commits
Author SHA1 Message Date
xrain 8a5c34756b 请求日志: 显示响应体 + 新增 ShowFullUrl/ShowRunTime 配置(默认true) 2026-08-18 02:43:11 +08:00
xrain 3925d0d5ad fix: 无效 Token 导致的 /config 500——getLogin 解析失败返回 None 而非抛异常
- SimApiAuth.getLogin:JSON 无效/非对象时返回 None(视为 token 无效),
  不再抛 JsonException(Fail to convert to JsonObject)
- 新增 parseLoginItemSafe 私有辅助,删除旧 parseLoginItem
- 复现:带无效 Token 的 POST /config 之前 500,现在 200 正常
- 验证:无效/有效 Token、GET/POST /config 均正常,日志无 Fail to convert
2026-08-18 02:26:58 +08:00
xrain aa2af7aee1 refactor: 移除 soulsoft_serialization / soulsoft_net_http 依赖——全部 HTTP 改 stdx.net.http
- SimApiStorage 4 处 S3 请求(PUT 上传/HEAD 检桶/PUT 建桶/POST 删除)改 stdx ClientBuilder/HttpRequestBuilder
- SimApiAuthCenter.verifySign 改 stdx(post + body + 读响应)
- cjpm.toml 删除 soulsoft_serialization、soulsoft_net_http(soulsoft web 栈传递依赖提供序列化)
- S3 全链路实测通过(上传/预签名/删除)
2026-08-18 01:56:32 +08:00
xrain 5c30f201ad refactor: SimApiHttpClient 改用 stdx.net.http——不再依赖 soulsoft_net_http
- query<T> 用 stdx.net.http ClientBuilder/HttpRequestBuilder/Client.send
  (等价 .NET HttpClient,替代 soulsoft_net_http.HttpClient)
- TLS 配置用 stdx TlsClientConfig(TrustAll + SNI 域名)
- 响应读取:status(UInt16) 2xx 判断 + InputStream 读 body
- 去掉 import soulsoft_net_http
- 端到端验证:stdx client 请求本机服务读响应正常
2026-08-18 01:29:02 +08:00
xrain 9c2e0ae0e3 refactor: AES 请求体改用 SimApiOneFieldRequest 序列化,去掉手拼字符串
- aesQuery/aesSignQuery:{"data":"..."} 手拼 → SimApiOneFieldRequest<String>
  经 SimApiUtil.json 序列化(对齐 C# new SimApiOneFieldRequest<string>{...})
- SimApiOneFieldRequest<T> 恢复带参构造(构造请求用)
2026-08-18 01:24:11 +08:00
xrain 79a997c014 refactor: 删除 SimApiBaseRequest 空类 + Request DTO 去掉显式构造器
- SimApiBaseRequest 空类无意义:.NET 无此类、仓颉版无继承无使用,删除
- SimApiIdOnlyRequest/SimApiStringIdOnlyRequest/SimApiOneFieldRequest/
  SimApiBasePageRequest 去掉所有显式构造器(含带参)——它们只作反序列化
  目标,无参构造由编译器自动提供,带参构造无人调用
2026-08-18 01:18:12 +08:00
xrain c7099040fa refactor: DTO 字段去下划线 + SimApiBaseResponse 不再可继承 + 删除 SimApiJson/toJsonString
- 纯 POCO DTO 字段去下划线:AuthDto(id/name/applicationId/profileId/scene 等)、
  SimApiLoginItem(id/types/meta/extra)、AesBodyRequest(data)、
  SimApiBaseResponse 系列(code/message/data/list/page/count/total)
- SimApiBaseResponse 去 open(不再允许继承)+ 删 @SerializerParent(无子类继承)
- SimApiResponse<T> / SimApiDataResponse 改为组合(自带 code/message/data)
- 删除 toJsonString(无使用点,统一走 simapi_serialization)
- 删除 SimApiJson.cj:json() → SimApiUtil.json() 直接序列化;
  escapeJson() 迁入 SimApiUtil
- 同步更新所有字段引用(AuthCenter/AuthIam/HttpClient/ExceptionMiddleware 等)
- 保留 sqlsharp 实体 User/Bot 的 _ 前缀(soulsoft 宏依赖)
2026-08-18 01:15:15 +08:00
xrain ea31bd9b6a refactor: 删除仅有空构造器的 public init() {}——编译器自动提供无参构造
删除(类无其他构造器):
- SimApiBaseModel / SimApiLoggerProvider / SimApiSignProviderBase / AesBodyProviderBase
- SimApiResponseFilter / SimApiAuthCenterOptions / SimApiExceptionOptions
- SimApiHttpClientOptions / SimApiOptions / SimApiSynapseOptions / SimApiRouteOptions
- SimApiStorageOptions / SimApiRequestLogOptions / SimApiJobServer / SimApiAuthOption
- AuthDto 5 个纯 POCO(AppAndProfileItem/ConfirmResponse/LoginInfoResponse/
  GroupRelatedItem/GroupDetailTreeNode)/ AesBodyRequest

保留(有带参构造器,空 init 是反序列化/绑定必需):
- GetCodeResponse / PermissionItem / SimApiBaseRequest 系列 / PageResponse
- SimApiLoginItem / SimApiDocGroup / SimApiStorage 相关 / 各 DTO
2026-08-18 00:59:48 +08:00
xrain 6e6b21ff83 refactor: SimApiSignProviderBase / AesBodyProviderBase 移至 interfaces 子包
- 新增 src/interfaces/SimApiSignProviderBase.cj / AesBodyProviderBase.cj(package simapi.interfaces)
- SimApiSignChecker / SimApiAesBodyChecker 移除基类定义,import simapi.interfaces.*
- SimApiRequestDelegateFactory 已 import interfaces,无需改
- 说明:基类含配置字段故用 open class(Cangjie 接口不能声明字段)
2026-08-18 00:51:45 +08:00
xrain ef9765de5d feat: 新增 @SimApiSign 与 @AesBody 注解(对齐 C# SimApiSignAttribute / AesBodyAttribute)
- src/annotations/SimApiSign.cj:方法/类级声明式验签注解,keyProvider 用类型名(DI 解析)
- src/annotations/AesBody.cj:参数级声明式 AES body 解密注解
- SimApiRequestDelegateFactory 自动执行:
  - checkSimApiSign:解析 @SimApiSign → DI 取 SimApiSignProviderBase → SimApiSignChecker.verify
  - bindAesBody:@AesBody 参数 → DI 取 AesBodyProviderBase → decryptBody → 按类型反序列化
- 注解未指定类型名时用默认空实现(未配置即报错,对齐 C# 行为)
2026-08-18 00:35:59 +08:00
xrain d76b08a542 refactor: 子包 attributes 改名 annotations——simapi.attributes → simapi.annotations
- src/attributes/ → src/annotations/(OriginResponse.cj / SimApiAuth.cj)
- SimApiRequestDelegateFactory import 同步更新
2026-08-18 00:31:36 +08:00
xrain e9978ea5e0 feat: 自定义 FromBody 绑定——simapi_serialization 按运行时类型反序列化,DTO 免 @Serialization 宏
- SimApiRequestDelegateFactory:无注解参数(FromBody)用 JsonSerializer.Deserialize(typeInfo, body)
  反序列化(免宏、免约束),显式注解参数(Query/Form/Route/Header/Services)委托 soulsoft binder
- 请求体只读一次并缓存到 context.items["SimApi:BodyCache"](body 流不可重读,
  请求日志中间件与 FromBody 共用缓存)
- 验证:/auth/login/admin 的 LoginAdminRequest(无宏)反序列化成功,走到业务密码校验
2026-08-18 00:27:32 +08:00
xrain 73f60f6f15 refactor: 全框架 JSON 操作迁移到 simapi_serialization
- 依赖:新增 simapi_serialization path 依赖(保留 soulsoft_serialization 供 soulsoft web 栈传递使用)
- SimApiJson.json / SimApiUtil.json → JsonSerializer.Serialize
- SimApiUtil.fromJson / base64DecodeTo → JsonSerializer.Deserialize(去 ISerialization 约束)
- SimApiHttpClient signQuery/aesQuery/aesSignQuery/query → 去约束,反序列化换新库
- SimApiBaseResponse/SimApiDataResponse/SimApiLoginItem/AesBodyRequest/AuthSDK DTO → 去 @Serialization 宏/去 soulsoft 接口,改纯 POCO(simapi_serialization 反射)
- SimApiBaseResponse 标 @SerializerParent:子类响应序列化包含 _code/_message
- SimApiResultWriter / SimApiExceptionMiddleware → 响应输出走 simapi_serialization(统一 _code/_message 格式)
- SimApiRequestLogMiddleware 截断 → Deserialize<HashMap<String,Any>> + 重序列化
- SimApiAuthDto JsonValue 字段 → HashMap<String,Any>;SimApiCache.get<T> 去约束
- webdemo:AuthController readFromJson 换 Deserialize;cjpm.toml 补依赖
- 验证:webdemo 启动正常,GET/POST 接口响应格式统一,S3 存储全链路 OK
2026-08-18 00:07:00 +08:00
xrain 40e0726087 docs: README 更新(新功能文档 + 修正过时状态)
- 新增:@SimApiAuth/@OriginResponse/验签/AES body/AES/BaseModel/AuthSDK 使用文档
- 修正:AuthGate/AES 已实现、自动控制器扫描、DI 构造示例、移除 ApiResult 引用
- cjpm.lock:新增 soulsoft_net_http 等依赖
2026-08-16 22:47:05 +08:00
xrain 932fce1b9e first version 2026-08-16 12:46:15 +08:00