diff --git a/src/controllers/main.controller.ts b/src/controllers/main.controller.ts index 2f38b98..423d997 100644 --- a/src/controllers/main.controller.ts +++ b/src/controllers/main.controller.ts @@ -2,10 +2,20 @@ import BaseController, { ROLE_ANON } from 'common/base.controller' import { ZError } from 'common/ZError' import { role, router } from 'decorators/router' import logger from 'logger/logger' -import { AuthRecord } from 'modules/AuthRecord' +import { AuthRecord, PlatEnum } from 'modules/AuthRecord' import { DiscordSvr } from 'services/discord.svr' import { hmacsha256 } from 'utils/security.util' +const checkSign = (params: {address?: string, sign?: string}) => { + const {address, sign} = 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') + } +} class MainController extends BaseController { /** * Refresh token @@ -74,4 +84,37 @@ class MainController extends BaseController { let verified = await new DiscordSvr().checkUserRole(id) return { verified } } + + + @role(ROLE_ANON) + @router('get /activity/twitter/:address') + async checkTwitterFollow(req) { + let { address } = req.params + checkSign(req.params); + address = address.toLowerCase() + let record = await AuthRecord.findOne({ address, platform: PlatEnum.TWITTER }) + let result: any = { } + if (!!record) { + result.username = record.username + result.userid = record.openId + } + return result + } + + @role(ROLE_ANON) + @router('get /activity/discord/:address') + async checkDiscord(req) { + let { address } = req.params + checkSign(req.params); + address = address.toLowerCase() + let record = await AuthRecord.findOne({ address, platform: PlatEnum.DISCORD }) + let result: any = { } + if (!!record) { + result.verified = record.condition + result.username = record.username + result.userid = record.openId + result.discriminator = record.discriminator + } + return result + } }