2026-08-18 00:51:45 +08:00
|
|
|
|
/*
|
|
|
|
|
|
* Copyright (c) 2025 SimcuTeam. All rights reserved.
|
|
|
|
|
|
* 移植自 C# 项目 SimApi(E:\simcu\simapi-net),遵循 MIT 许可证。
|
|
|
|
|
|
* 签名提供器基类(对齐 C# ModelBinders/SimApiSignProviderBase)。
|
|
|
|
|
|
*
|
|
|
|
|
|
* 说明:本类含配置字段(appIdName/queryExpires 等),故用 open class 而非 interface
|
|
|
|
|
|
* (Cangjie 接口不能声明字段),与 .NET 抽象类对应。应用继承本类并实现 getKey。
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2026-08-18 04:23:07 +08:00
|
|
|
|
package simcu::simapi.interfaces
|
2026-08-18 00:51:45 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 签名提供器基类:应用继承并实现 getKey(appId),返回 appId 对应的密钥。
|
|
|
|
|
|
*/
|
|
|
|
|
|
public open class SimApiSignProviderBase {
|
|
|
|
|
|
/// appId 字段名(None 表示签名中不包含 appId)
|
|
|
|
|
|
public var appIdName: ?String = Some("appId")
|
|
|
|
|
|
|
|
|
|
|
|
/// 时间戳字段名
|
|
|
|
|
|
public var timestampName: String = "timestamp"
|
|
|
|
|
|
|
|
|
|
|
|
/// 随机串字段名
|
|
|
|
|
|
public var nonceName: String = "nonce"
|
|
|
|
|
|
|
|
|
|
|
|
/// 签名字段名
|
|
|
|
|
|
public var signName: String = "sign"
|
|
|
|
|
|
|
|
|
|
|
|
/// 请求过期秒数(0 表示不校验 timestamp)
|
|
|
|
|
|
public var queryExpires: Int64 = 5
|
|
|
|
|
|
|
|
|
|
|
|
/// 是否开启 nonce 去重(需配置缓存)
|
|
|
|
|
|
public var duplicateRequestProtection: Bool = true
|
|
|
|
|
|
|
|
|
|
|
|
/// 参与签名的额外字段(与 appId/timestamp/nonce 一起拼入签名字符串)
|
|
|
|
|
|
public var signFields: Array<String> = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 根据 appId 获取密钥。
|
|
|
|
|
|
* @param appId 应用 ID(未配置 appIdName 时为 None)。
|
|
|
|
|
|
* @return 密钥;返回 None 表示获取失败。
|
|
|
|
|
|
*/
|
|
|
|
|
|
public open func getKey(appId: ?String): ?String {
|
|
|
|
|
|
None
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|