增加简单的签名认证和文档
This commit is contained in:
parent
fce1614233
commit
af312dc4d3
33
docs/api.md
Normal file
33
docs/api.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
### 1. 202306 活动接口
|
||||||
|
|
||||||
|
Method: GET
|
||||||
|
Host: https://oauth-svr.cebggame.com
|
||||||
|
Path: /activity/202306/:address
|
||||||
|
|
||||||
|
Query Params:
|
||||||
|
|
||||||
|
| 参数 | 说明 |
|
||||||
|
| ---- | ---- |
|
||||||
|
| sign | 签名 |
|
||||||
|
|
||||||
|
> 签名生成: `address=0x2312313aasdqd`, 使用 hmac_sha256 hash, key: iG4Rpsa)6U31$H#^T85$^^3
|
||||||
|
|
||||||
|
Return:JSON String
|
||||||
|
|
||||||
|
```js
|
||||||
|
{
|
||||||
|
"errcode": 0,
|
||||||
|
"data": {
|
||||||
|
"discord": { //discord 相关信息
|
||||||
|
"id": "1034482894690861116", // discord的用户id, 可根据该字段判断是否关联discord
|
||||||
|
"username": "zzoz", // discord用户名
|
||||||
|
"discriminator": "4635",
|
||||||
|
"verified": 0 // 是否满足discord的角色信息
|
||||||
|
},
|
||||||
|
"twitter": {
|
||||||
|
"id": "564269223", // twitter的用户id, 可根据该字段判断是否关联twitter
|
||||||
|
"username": "zhl01" // twitter 用户名
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
@ -4,20 +4,29 @@ import { role, router } from 'decorators/router'
|
|||||||
import logger from 'logger/logger'
|
import logger from 'logger/logger'
|
||||||
import { AuthRecord } from 'modules/AuthRecord'
|
import { AuthRecord } from 'modules/AuthRecord'
|
||||||
import { DiscordSvr } from 'services/discord.svr'
|
import { DiscordSvr } from 'services/discord.svr'
|
||||||
|
import { hmacsha256 } from 'utils/security.util'
|
||||||
|
|
||||||
class MainController extends BaseController {
|
class MainController extends BaseController {
|
||||||
/**
|
/**
|
||||||
* Refresh token
|
* Refresh token
|
||||||
*/
|
*/
|
||||||
@role(ROLE_ANON)
|
@role(ROLE_ANON)
|
||||||
@router('get /user/status/:address')
|
@router('get /activity/202306/:address')
|
||||||
async getToken(req, res) {
|
async getToken(req, res) {
|
||||||
let { address } = req.params
|
let { address, sign } = req.params
|
||||||
|
if (!address || !sign) {
|
||||||
|
throw new ZError(10, 'invalid params')
|
||||||
|
}
|
||||||
|
let signCheck = hmacsha256(`address=${address}`, process.env.HASH_SALT)
|
||||||
|
if (sign !== signCheck) {
|
||||||
|
throw new ZError(11, 'invalid sign')
|
||||||
|
}
|
||||||
let records = await AuthRecord.find({ address })
|
let records = await AuthRecord.find({ address })
|
||||||
let result: any = {
|
let result: any = {
|
||||||
discord: {},
|
discord: {},
|
||||||
twitter: {},
|
twitter: {},
|
||||||
}
|
}
|
||||||
|
let distcordRecord
|
||||||
for (const record of records) {
|
for (const record of records) {
|
||||||
switch (record.platform) {
|
switch (record.platform) {
|
||||||
case 4:
|
case 4:
|
||||||
@ -33,26 +42,17 @@ class MainController extends BaseController {
|
|||||||
discriminator: record.discriminator,
|
discriminator: record.discriminator,
|
||||||
verified: record.condition,
|
verified: record.condition,
|
||||||
}
|
}
|
||||||
|
distcordRecord = record
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (result.discord.id && !result.discord.verified) {
|
||||||
|
let verified = await new DiscordSvr().checkUserRole(result.discord.id)
|
||||||
|
if (verified) {
|
||||||
|
distcordRecord.condition = 1
|
||||||
|
result.discord.verified = 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
@role(ROLE_ANON)
|
|
||||||
@router('get /user/check_verify/:address')
|
|
||||||
async checkUserRole(req, res) {
|
|
||||||
let { address } = req.params
|
|
||||||
if (!address) {
|
|
||||||
throw new ZError(10, 'address is required')
|
|
||||||
}
|
|
||||||
let discordRecord = await AuthRecord.findByAddress(address, 7)
|
|
||||||
if (!discordRecord) {
|
|
||||||
throw new ZError(11, 'discord not found')
|
|
||||||
}
|
|
||||||
if (discordRecord.condition) {
|
|
||||||
return { verified: true }
|
|
||||||
}
|
|
||||||
let role = await new DiscordSvr().checkUserRole(discordRecord.openId)
|
|
||||||
return { verified: role }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user