479 lines
19 KiB
JSON
479 lines
19 KiB
JSON
{
|
||
"info": {
|
||
"_postman_id": "rmdc-api-collection-2026",
|
||
"name": "RMDC API Collection",
|
||
"description": "RMDC系统API测试集合\n\n## 使用说明\n\n1. 导入此Collection后,首先运行 `Auth > 1. 获取RSA公钥` 请求\n2. 然后运行 `Auth > 2. RSA加密登录` 请求\n3. 登录成功后Token会自动保存,其他请求无需手动配置认证\n\n## 环境变量\n- `baseUrl`: API基础地址,默认 http://localhost:8080\n- `username`: 登录用户名\n- `password`: 登录密码",
|
||
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
||
},
|
||
"auth": {
|
||
"type": "bearer",
|
||
"bearer": [
|
||
{
|
||
"key": "token",
|
||
"value": "{{token}}",
|
||
"type": "string"
|
||
}
|
||
]
|
||
},
|
||
"event": [
|
||
{
|
||
"listen": "prerequest",
|
||
"script": {
|
||
"type": "text/javascript",
|
||
"exec": [
|
||
"// Collection级别的预处理脚本",
|
||
"// 自动检查token是否存在"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"listen": "test",
|
||
"script": {
|
||
"type": "text/javascript",
|
||
"exec": [
|
||
"// Collection级别的测试脚本"
|
||
]
|
||
}
|
||
}
|
||
],
|
||
"variable": [
|
||
{
|
||
"key": "baseUrl",
|
||
"value": "http://localhost:8080",
|
||
"type": "string"
|
||
},
|
||
{
|
||
"key": "username",
|
||
"value": "admin",
|
||
"type": "string"
|
||
},
|
||
{
|
||
"key": "password",
|
||
"value": "supercyy.1",
|
||
"type": "string"
|
||
},
|
||
{
|
||
"key": "token",
|
||
"value": "",
|
||
"type": "string"
|
||
},
|
||
{
|
||
"key": "rsaPublicKey",
|
||
"value": "",
|
||
"type": "string"
|
||
}
|
||
],
|
||
"item": [
|
||
{
|
||
"name": "Auth",
|
||
"description": "认证相关接口",
|
||
"item": [
|
||
{
|
||
"name": "1. 获取RSA公钥",
|
||
"event": [
|
||
{
|
||
"listen": "test",
|
||
"script": {
|
||
"exec": [
|
||
"pm.test('获取公钥成功', function () {",
|
||
" pm.response.to.have.status(200);",
|
||
"});",
|
||
"",
|
||
"var jsonData = pm.response.json();",
|
||
"if (jsonData.public_key) {",
|
||
" pm.collectionVariables.set('rsaPublicKey', jsonData.public_key);",
|
||
" console.log('RSA公钥已保存');",
|
||
"}"
|
||
],
|
||
"type": "text/javascript"
|
||
}
|
||
}
|
||
],
|
||
"request": {
|
||
"method": "GET",
|
||
"header": [],
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/auth/rsa/public-key",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"auth",
|
||
"rsa",
|
||
"public-key"
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"name": "2. RSA加密登录",
|
||
"event": [
|
||
{
|
||
"listen": "prerequest",
|
||
"script": {
|
||
"exec": [
|
||
"// RSA加密函数 (使用PKCS1v15填充)",
|
||
"const forge = require('node-forge');",
|
||
"",
|
||
"const publicKeyPem = pm.collectionVariables.get('rsaPublicKey');",
|
||
"const password = pm.collectionVariables.get('password');",
|
||
"",
|
||
"if (!publicKeyPem) {",
|
||
" console.error('请先运行\"获取RSA公钥\"请求');",
|
||
" throw new Error('RSA公钥未获取');",
|
||
"}",
|
||
"",
|
||
"try {",
|
||
" // 解析PEM格式的公钥",
|
||
" const publicKey = forge.pki.publicKeyFromPem(publicKeyPem);",
|
||
" ",
|
||
" // 使用RSA-OAEP加密 (SHA-256)",
|
||
" const encrypted = publicKey.encrypt(password, 'RSA-OAEP', {",
|
||
" md: forge.md.sha256.create()",
|
||
" });",
|
||
" ",
|
||
" // 转换为Base64",
|
||
" const encryptedBase64 = forge.util.encode64(encrypted);",
|
||
" ",
|
||
" pm.collectionVariables.set('encryptedPassword', encryptedBase64);",
|
||
" console.log('密码加密成功');",
|
||
"} catch (e) {",
|
||
" console.error('RSA加密失败:', e);",
|
||
" throw e;",
|
||
"}"
|
||
],
|
||
"type": "text/javascript"
|
||
}
|
||
},
|
||
{
|
||
"listen": "test",
|
||
"script": {
|
||
"exec": [
|
||
"pm.test('登录成功', function () {",
|
||
" pm.response.to.have.status(200);",
|
||
"});",
|
||
"",
|
||
"var jsonData = pm.response.json();",
|
||
"",
|
||
"if (jsonData.token) {",
|
||
" pm.collectionVariables.set('token', jsonData.token);",
|
||
" console.log('Token已保存到Collection变量');",
|
||
" console.log('用户:', jsonData.user?.username);",
|
||
"}",
|
||
"",
|
||
"if (jsonData.must_change_password) {",
|
||
" console.warn('警告: 密码已过期,需要修改');",
|
||
"}",
|
||
"",
|
||
"if (jsonData.password_expire_days > 0) {",
|
||
" console.warn('提示: 密码将在 ' + jsonData.password_expire_days + ' 天后过期');",
|
||
"}"
|
||
],
|
||
"type": "text/javascript"
|
||
}
|
||
}
|
||
],
|
||
"request": {
|
||
"auth": {
|
||
"type": "noauth"
|
||
},
|
||
"method": "POST",
|
||
"header": [
|
||
{
|
||
"key": "Content-Type",
|
||
"value": "application/json"
|
||
}
|
||
],
|
||
"body": {
|
||
"mode": "raw",
|
||
"raw": "{\n \"username\": \"{{username}}\",\n \"encrypted_password\": \"{{encryptedPassword}}\"\n}"
|
||
},
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/auth/login",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"auth",
|
||
"login"
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"name": "3. 明文密码登录(备用)",
|
||
"event": [
|
||
{
|
||
"listen": "test",
|
||
"script": {
|
||
"exec": [
|
||
"pm.test('登录成功', function () {",
|
||
" pm.response.to.have.status(200);",
|
||
"});",
|
||
"",
|
||
"var jsonData = pm.response.json();",
|
||
"",
|
||
"if (jsonData.token) {",
|
||
" pm.collectionVariables.set('token', jsonData.token);",
|
||
" console.log('Token已保存');",
|
||
"}"
|
||
],
|
||
"type": "text/javascript"
|
||
}
|
||
}
|
||
],
|
||
"request": {
|
||
"auth": {
|
||
"type": "noauth"
|
||
},
|
||
"method": "POST",
|
||
"header": [
|
||
{
|
||
"key": "Content-Type",
|
||
"value": "application/json"
|
||
}
|
||
],
|
||
"body": {
|
||
"mode": "raw",
|
||
"raw": "{\n \"username\": \"{{username}}\",\n \"password\": \"{{password}}\"\n}"
|
||
},
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/auth/login",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"auth",
|
||
"login"
|
||
]
|
||
}
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "Contacts",
|
||
"description": "通信录接口",
|
||
"item": [
|
||
{
|
||
"name": "获取通信录列表",
|
||
"request": {
|
||
"method": "GET",
|
||
"header": [],
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/contacts?page=1&size=20",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"contacts"
|
||
],
|
||
"query": [
|
||
{
|
||
"key": "page",
|
||
"value": "1"
|
||
},
|
||
{
|
||
"key": "size",
|
||
"value": "20"
|
||
},
|
||
{
|
||
"key": "search",
|
||
"value": "",
|
||
"disabled": true
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"name": "获取联系人详情",
|
||
"request": {
|
||
"method": "GET",
|
||
"header": [],
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/contacts/1",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"contacts",
|
||
"1"
|
||
]
|
||
}
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "Users",
|
||
"description": "用户管理接口 (需要Admin权限)",
|
||
"item": [
|
||
{
|
||
"name": "获取用户列表",
|
||
"request": {
|
||
"method": "GET",
|
||
"header": [],
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/users?page=1&size=20",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"users"
|
||
],
|
||
"query": [
|
||
{
|
||
"key": "page",
|
||
"value": "1"
|
||
},
|
||
{
|
||
"key": "size",
|
||
"value": "20"
|
||
},
|
||
{
|
||
"key": "status",
|
||
"value": "active",
|
||
"disabled": true
|
||
},
|
||
{
|
||
"key": "search",
|
||
"value": "",
|
||
"disabled": true
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"name": "获取用户详情",
|
||
"request": {
|
||
"method": "GET",
|
||
"header": [],
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/users/1",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"users",
|
||
"1"
|
||
]
|
||
}
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "User Profile",
|
||
"description": "用户个人接口",
|
||
"item": [
|
||
{
|
||
"name": "修改密码",
|
||
"request": {
|
||
"method": "PUT",
|
||
"header": [
|
||
{
|
||
"key": "Content-Type",
|
||
"value": "application/json"
|
||
}
|
||
],
|
||
"body": {
|
||
"mode": "raw",
|
||
"raw": "{\n \"current_password\": \"{{password}}\",\n \"new_password\": \"NewPassword123\"\n}"
|
||
},
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/user/password",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"user",
|
||
"password"
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"name": "更新个人资料",
|
||
"request": {
|
||
"method": "PUT",
|
||
"header": [
|
||
{
|
||
"key": "Content-Type",
|
||
"value": "application/json"
|
||
}
|
||
],
|
||
"body": {
|
||
"mode": "raw",
|
||
"raw": "{\n \"avatar_id\": \"default_1\",\n \"avatar_frame_id\": \"default\"\n}"
|
||
},
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/user/profile",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"user",
|
||
"profile"
|
||
]
|
||
}
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "Permissions",
|
||
"description": "权限管理接口",
|
||
"item": [
|
||
{
|
||
"name": "获取我的权限树",
|
||
"request": {
|
||
"method": "GET",
|
||
"header": [],
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/permissions/my-tree/full",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"permissions",
|
||
"my-tree",
|
||
"full"
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"name": "获取我的组织列表",
|
||
"request": {
|
||
"method": "GET",
|
||
"header": [],
|
||
"url": {
|
||
"raw": "{{baseUrl}}/api/permissions/my-tree/organizations",
|
||
"host": [
|
||
"{{baseUrl}}"
|
||
],
|
||
"path": [
|
||
"api",
|
||
"permissions",
|
||
"my-tree",
|
||
"organizations"
|
||
]
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
]
|
||
} |