fix readme
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m13s

This commit is contained in:
hsueh chiahao
2025-11-03 12:55:46 +08:00
parent eb2764e8e5
commit 37e40997f0

View File

@@ -1,15 +1,20 @@
# Kintone License Server # Kintone License Server
一个 Node.js TypeScript 服务端程序,用于验证客户端的许可证,通过 RSA 签名生成 JWT。 > 公网url: https://kintone.alicorns.co.jp
基于 Node.js 的 kintone license 服务端,用于验证 kintone plugin 的 license。
目前支持:
- [kintone-vue-template](https://git.alicorns.co.jp/kintone-plugins/kintone-vue-template)
## 功能 ## 功能
- 提供 `POST /api/license/check` 接口,根据请求 body 中的 `domain``pluginId``pluginKey` 参数: - 提供 `POST /api/license/check` 接口,根据请求 body 中的 `domain``pluginId``pluginKey` 参数:
- 如果许可证不存在,创建 30 天试用许可证(到期时间为最后一天的 23:59:59 1. 如果许可证不存在,创建试用许可证(时长基于 DB 配置,到期时间为最后一天的 23:59:59
- 如果存在,加载现有许可证。 2. 如果存在,加载现有许可证。
- 使用对应的插件 RSA 私钥生成 JWT返回给客户端。 3. 使用对应的插件 RSA 私钥生成 JWT返回给客户端。
- JWT payload 结构符合客户端要求的 LicenseInfo 接口。
- 支持试用和付费许可证:基于数据库 `purchase_date` 是否有值判断 `isPaid`,付费许可证 `expiredTime = -1` > 对于用户付费,目前需要新增 `customers` 记录,并且手动修改数据库的 `licenses.purchase_date`、`licenses.customer_fk`
## 运行步骤 ## 运行步骤
@@ -78,33 +83,14 @@
} }
``` ```
## 项目结构
- `src/server.ts`:主服务器代码,包含 Express 应用、路由和数据库连接。
- `init-db.sql`:数据库初始化脚本,创建 plugins、customers、licenses 三张表。
- `private/kintone-vue-template/rsa_private.pem`:示例 RSA 私钥(已导入数据库)。
## 数据库结构 ## 数据库结构
- **plugins**插件信息id, plugin_id, plugin_name, private_key, deleted。多插件支持每个插件有唯一私钥。 - **plugins**插件信息id, plugin_id, plugin_name, private_key, deleted。多插件支持每个插件有唯一私钥。
- **customers**客户信息id, name, email, phone, comment暂未使用。 - **customers**客户信息id, name, email, phone, comment
- **licenses**许可证记录id, domain, plugin_id, expired_time, purchase_date, plugin_fk, customer_fk, message - **licenses**许可证记录id, domain, plugin_id, expired_time, purchase_date, plugin_fk, customer_fk, message
- 外键 `plugin_fk` 关联插件,`customer_fk` 关联客户(暂未实施) - 外键 `plugin_fk` 关联插件,`customer_fk` 关联客户。
许可逻辑: 许可逻辑:
- 请求 (domain, pluginId) 组合唯一标识许可证。 - 请求 (domain, pluginId) 组合唯一标识许可证。
- 试用:`purchase_date = NULL``isPaid = false``expiredTime` = 30 天后时间戳。 - 试用:`purchase_date = NULL``isPaid = false``expiredTime`
- 付费:`purchase_date` 被外部系统设置,`isPaid = true``expiredTime = -1`。 - 付费:`purchase_date` 被外部系统设置,`expiredTime = -1`。
## 认证和安全性
- 使用 RSA-256 签名 JWT私钥存储在 `plugins` 表中,按 `pluginKey` 区分。
- 默认插入 "default-plugin" 插件,使用现有 RSA 私钥。
- 数据库连接硬编码凭据(生产环境使用环境变量,如 .env 文件)。
## 注意事项
- 当前实现试用许可证30 天过期时间硬编码。
- 付费购买由其他系统更新 `purchase_date`,本服务仅校验。
- PostgreSQL 需要预先配置和运行。
- 代码使用 TypeScript 严格模式,确保类型安全。