xrain
|
a1acb99e08
|
包名迁移: simapi → simcu::simapi(发布中央仓用 organization=simcu)
|
2026-08-18 04:23:07 +08:00 |
|
xrain
|
f88eee8d64
|
ISimApiAuthChecker 改为按接口注册 + getAll<T>() 解析,移除 SimApiOptions.authCheckers 手动列表
|
2026-08-18 03:19:27 +08:00 |
|
xrain
|
1ce85a68ab
|
鉴权顺序对齐 .NET: 先执行 ISimApiAuthChecker 再做类型权限判断
|
2026-08-18 03:01:17 +08:00 |
|
xrain
|
cf19f15569
|
请求日志: 响应结构体末尾不再多加换行
|
2026-08-18 02:57:03 +08:00 |
|
xrain
|
3b252e08d5
|
请求日志: 响应行显示字节长度 [ N bytes ] 并换行输出响应体
|
2026-08-18 02:50:04 +08:00 |
|
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 |
|