xrain
|
8b0a8f783c
|
refactor: SimApiExtensions 移入根包 simapi 并改为静态类,删除 extensions 子包
- src/extensions/SimApiExtensions.cj 删除,内容合并进 src/SimApiExtensions.cj(package simapi)
- 接口+extend 改为静态类 SimApiExtensions:
SimApiExtensions.addSimApi(builder, configure) / useSimApi(host)(对齐 .NET 根命名空间静态类)
- 私有辅助 addSimApiCore / addControllers 收敛为私有静态方法
- 用法从 builder.addSimApi{} / host.useSimApi() 改为 SimApiExtensions.addSimApi(builder){} / useSimApi(host)
|
2026-08-17 09:16:42 +08:00 |
|
xrain
|
bcac7b1102
|
refactor: SimApiRequestDelegateFactory/SimApiResultWriter 从 extensions 移到 helpers
- 包 simapi.extensions → simapi.helpers
- 新增 interfaces/IBindRequestContext 接口切断 helpers↔controllers 循环依赖
(工厂只依赖接口,不再依赖 SimApiBaseController)
- SimApiAuth 注解类与 helpers.SimApiAuth 同名冲突,用 import 别名 SimApiAuthAttribute 解决
|
2026-08-17 09:12:47 +08:00 |
|
xrain
|
ff41d287ed
|
refactor: 根包锚点 simapi.cj 改名为 SimApiExtensions.cj(对齐 .NET 根目录 SimApiExtensions.cs)
|
2026-08-17 09:10:02 +08:00 |
|
xrain
|
2b8d2c47be
|
feat: SimApiError 增加顶层函数,支持无前缀 error(400);精简 simapi.cj 为包锚点
- error/errorWhen/errorWhenTrue/errorWhenFalse/errorWhenNull 提升为 simapi.helpers 顶层函数,
import simapi.helpers.* 后可直接调用(对齐 C# using static SimApi.Helpers.SimApiError)
- SimApiError 类保留为兼容门面(旧写法仍可用)
- simapi.cj 精简为仅 package 声明:实测 cjpm 要求 src 根目录必须有 .cj 锚点,
否则不扫描子目录导致整包编译为空;SimApi 类/version 常量无任何引用,已移除
|
2026-08-17 09:06:17 +08:00 |
|
xrain
|
67f7c16a3f
|
feat: SimApiStorage 增加 deleteFiles 批量删除(S3 DeleteObjects)
- POST /{bucket}?delete + XML 一次删除多个对象(Minio RemoveObjects 同款接口)
- MinIO 强制要求 Content-Md5 头(缺失返回 MissingContentMD5),MD5 经 stdx 计算 + Base64
- 已用 oss.anymemory.cn 实测:批量删除后访问对象返回 404
|
2026-08-17 00:22:08 +08:00 |
|
xrain
|
b4e808e775
|
fix: SimApiStorage 直接请求补 x-amz-date 签名头,Content-Type 移到 HttpContent
- 直接请求(上传/桶检测/建桶)需带 x-amz-date 请求头并纳入签名(缺省会 400)
- Content-Type 按 soulsoft_net_http 规则设在 ByteArrayContent.headers(不是 request.headers)
- 已用 oss.anymemory.cn 实测:上传/预签名上传/预签名下载回读全部一致
|
2026-08-17 00:08:50 +08:00 |
|
xrain
|
eb488bcd5a
|
feat: 实现 SimApiStorage(S3/MinIO 存储)
- 自实现 AWS Signature V4(HMAC-SHA256 基于 stdx SHA256),无需 Minio SDK
- getUploadUrl / getDownloadUrl(预签名 PUT/GET)
- uploadFile(直接 PUT 上传)、fullUrl / getUrl / getPath
- 构造时检测并自动创建桶(静态守卫只执行一次)
- 注册为 Scoped 以注入 IHttpContextAccessor(soulsoft DI 禁止 singleton 消费 scoped)
- 签名核心已用 AWS 官方测试向量验证(最终签名 5d672d79... 一致)
- README 同步(未实现表移除、新增 5.3 存储章节)
|
2026-08-17 00:00:15 +08:00 |
|
xrain
|
92eea3108a
|
refactor: 对齐 simapi-net 的 20 项差异
- SimApiLoginItem._types 默认 [user]
- 新增 SimApiIdOnlyRequest
- errorWhenNone 改名 errorWhenNull
- SimApiAuth.update 保留 TTL(Redis ttl/expire)
- SimApiCache: set 接受 Any + 新增 get<T>/getString
- SimApiHttpClient 签名字段移出 Options
- SimApiUtil: md5/sha1 支持 mode + 新增 paginate
- @SimApiAuth 支持逗号分隔多类型
- Logger: 4 位毫秒 + IsEnabled 恒 true
- 删除 /versions 端点;exceptionHandler 改为抛错
- UseSimApi 中间件顺序对齐 .NET
- README 同步更新
|
2026-08-16 23:44:52 +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
|
e278753a8c
|
feat: SimApiOptions 增加 authCheckers 注册表
存储 ISimApiAuthChecker 类型列表(由 addSimApi 自动扫描填充),
供 @SimApiAuth 鉴权时逐个从 DI 解析执行
|
2026-08-16 22:47:05 +08:00 |
|
xrain
|
c591387288
|
feat: SimApiControllerScanner 增加 ISimApiAuthChecker 自动扫描
scanAuthCheckers():扫描调用者包及其子包中 ISimApiAuthChecker 的非抽象实现类
(复用控制器扫描的 PackageInfo 枚举机制,对齐 C# Assembly.GetTypes 扫描)
|
2026-08-16 22:47:04 +08:00 |
|
xrain
|
6cb79cf970
|
feat: SimApiHttpClient 增强
- aesEncrypt 接入纯仓颉 AES(替换 Base64 占位)
- TLS 支持:https 自动配置 TrustAll + SNI(stdx TLS 动态加载 openssl)
- generateNonce 用 UUID v4(对齐 C# Guid.NewGuid)
- open class 供 SimApiAuthClient 继承
|
2026-08-16 22:47:04 +08:00 |
|
xrain
|
8a6c783459
|
feat: Auth/Cache/Util 增强
- SimApiAuth/Cache:Redis 连接串支持密码/DB 索引(host:port,password=xxx,db=2)
- InMemory 模式加过期机制(TokenEntry/CacheEntry 带 expireAt,过期自动移除)
- Redis 客户端 autoHello=false 兼容 Redis 8.x(HELLO 3 RESP3 响应解析失败)
- SimApiAuth.generateToken 用 UUID v4
- SimApiUtil 补齐:newGuid / fromJson<T> / base64Encode(Any) / base64DecodeTo<T>
|
2026-08-16 22:46:57 +08:00 |
|
xrain
|
a73a986f8b
|
feat: RequestLog 中间件补齐(对齐 C#)
- 请求体 JSON 字段级截断(仅超长字符串字段,保留结构)
- 下游异常捕获记录后重抛(对齐 C# ExceptionDispatchInfo)
- 响应体受 soulsoft body 只读限制,记录 Content-Length 替代
|
2026-08-16 22:46:57 +08:00 |
|
xrain
|
a04ab2f400
|
feat: addSimApi/useSimApi 接入内置路由/AuthSDK/checker 扫描
- 内置路由:RouteOptions 自定义路径用 mapGet/mapPost 真实注册(默认值由特性路由覆盖)
- AuthGate:enableSimApiAuthGate 时注册 AuthClient/Center/Iam 单例并挂载网关中间件
- ISimApiAuthChecker 自动扫描:enableSimApiAuth 时扫描调用者包实现类填充 authCheckers + AddScoped
|
2026-08-16 22:46:57 +08:00 |
|
xrain
|
c7b8148ff5
|
refactor: 提取统一响应封装 SimApiResultWriter
- dispatchResult 复用 SimApiResultWriter(IActionResult/SimApiBaseResponse/String/Unit/其他 五分支)
- @SimApiAuth 鉴权执行(checkSimApiAuth:401/类型403/checker 遍历)
- @OriginResponse 跳过封装原样输出
|
2026-08-16 22:46:48 +08:00 |
|
xrain
|
f056de582b
|
feat: AuthSDK 认证中心完整实现(对齐 C# AuthSDK)
- SimApiAuthClient:SimApiHttpClient 子类,凭证取 AuthCenterOptions
- SimApiAuthCenter:群组/Profile/内部应用/系统登录/安全验证 12 接口 + VerifySign
- SimApiAuthIam:注册权限/获取权限/校验权限(无权限 403)
- SimApiAuthCenterMiddleware:网关透传(三头 MD5 校验 + Base64 解码 LoginInfo)
- SimApiAuthDto:7 个 DTO(data 字段用 JsonValue 规避宏约束)
|
2026-08-16 22:46:48 +08:00 |
|
xrain
|
9af7871114
|
feat: SimApiBaseModel 实体基类(对齐 C# Models/SimApiBaseModel)
- _id 默认 UUID v4、_createdAt/_updatedAt 自动当前时间
- mapData 反射式字段映射(忽略字段/白名单两种重载)
- updateTime 刷新更新时间
|
2026-08-16 22:46:48 +08:00 |
|
xrain
|
d68a31077a
|
feat: 声明式鉴权/原样响应注解 + 服务端验签 + AES body 解密
- @SimApiAuth:方法/类级鉴权注解(401/类型403/checker执行),对齐 C# [SimApiAuth]
- @OriginResponse:跳过统一响应封装原样输出,对齐 C# [OriginResponse]
- SimApiSignChecker + SimApiSignProviderBase:服务端验签(含 QueryExpires 过期与 nonce 去重)
- SimApiAesBodyChecker + AesBodyProviderBase:服务端解密加密 body
|
2026-08-16 22:46:40 +08:00 |
|
xrain
|
932fce1b9e
|
first version
|
2026-08-16 12:46:15 +08:00 |
|