增加分发徽章的流程

This commit is contained in:
zhl 2023-04-21 10:13:25 +08:00
parent 2bb0efebc5
commit 09965d5eb6
4 changed files with 110 additions and 4 deletions

View File

@ -4,6 +4,8 @@ import { ChainTask, ChainTaskClass } from 'models/ChainTask'
import { RequestTask } from 'models/RequestTask' import { RequestTask } from 'models/RequestTask'
import { ChainQueue } from 'queue/chain.queue' import { ChainQueue } from 'queue/chain.queue'
import { DocumentType } from '@typegoose/typegoose' import { DocumentType } from '@typegoose/typegoose'
import { BlockChain } from 'chain/BlockChain'
import { ZError } from 'common/ZError'
class ChainController extends BaseController { class ChainController extends BaseController {
@role('anon') @role('anon')
@ -32,5 +34,16 @@ class ChainController extends BaseController {
await chainTask.save() await chainTask.save()
return chainTask.toJson() return chainTask.toJson()
} }
@role('anon')
@router('post /chain/query_info')
async queryUserInfo(req, res) {
let { address } = req.params
if (!address) {
throw new ZError(10, 'address is required')
}
let info = await new BlockChain().distributorReactor.getMintableCount({ user: address })
return { count: info }
}
} }
export default ChainController export default ChainController

View File

@ -61,6 +61,7 @@ export class ChainTaskClass extends BaseModule {
let record = await ChainTask.findById(chainTaskId) let record = await ChainTask.findById(chainTaskId)
let sCount = 0 let sCount = 0
let errCount = 0 let errCount = 0
let hashList: string[] = []
for (let subId of record.tasks) { for (let subId of record.tasks) {
let subData = await RequestTask.findById(subId) let subData = await RequestTask.findById(subId)
if (subData.status === ReqTaskStatus.SUCCESS) { if (subData.status === ReqTaskStatus.SUCCESS) {
@ -68,6 +69,7 @@ export class ChainTaskClass extends BaseModule {
} else if (subData.status === ReqTaskStatus.ERROR) { } else if (subData.status === ReqTaskStatus.ERROR) {
errCount += 1 errCount += 1
} }
hashList.push(subData.txHash)
} }
record.successCount = sCount record.successCount = sCount
record.errorCount = errCount record.errorCount = errCount
@ -88,7 +90,20 @@ export class ChainTaskClass extends BaseModule {
} }
await record.save() await record.save()
if (record.allEnd) { if (record.allEnd) {
setImmediate(async function () {}) setImmediate(async function () {
try {
let result = await new InfoSvr().reportTaskResult({
id: record.taskId,
result: record.status,
successCount: record.successCount,
errorCount: record.errorCount,
hashList,
})
logger.log(result)
} catch (err) {
logger.log(err)
}
})
} }
} }

View File

@ -1,13 +1,17 @@
import axios from 'axios' import axios from 'axios'
import { singleton } from 'decorators/singleton' import { singleton } from 'decorators/singleton'
import logger from 'logger/logger' import logger from 'logger/logger'
import { hmacSha256 } from 'utils/security.util'
const REPORT_TASK_URI = '/api/flow/client/result' const REPORT_TASK_URI = '/api/internal/update_task'
const calcHash = function (data: any) {
return hmacSha256(JSON.stringify(data), process.env.HASH_SALT)
}
@singleton @singleton
export class InfoSvr { export class InfoSvr {
reportTaskResult(data) { reportTaskResult(data: any) {
data.user = process.env.RUN_USER data.sign = calcHash(data)
logger.info('report to info svr: ' + JSON.stringify(data)) logger.info('report to info svr: ' + JSON.stringify(data))
let url = `${process.env.INFO_SVR_HOST}${REPORT_TASK_URI}` let url = `${process.env.INFO_SVR_HOST}${REPORT_TASK_URI}`
let reqConfig: any = { let reqConfig: any = {

View File

@ -0,0 +1,74 @@
import crypto from 'crypto'
export function hmac(input, key, out) {
return out
? crypto.createHmac('sha1', key).update(input).digest(out)
: crypto.createHmac('sha1', key).update(input).digest('hex')
}
export function genRandomString(length) {
return crypto
.randomBytes(Math.ceil(length / 2))
.toString('hex')
.slice(0, length)
}
export function sha512(password, salt) {
let hash = crypto.createHmac('sha512', salt)
hash.update(password)
let value = hash.digest('hex')
return {
salt: salt,
passwordHash: value,
}
}
export function sha1(str) {
const md5sum = crypto.createHash('sha1')
md5sum.update(str)
str = md5sum.digest('hex')
return str
}
export function hmacSha256(str: string, key: any) {
const md5sum = crypto.createHmac('sha256', key)
md5sum.update(str)
str = md5sum.digest('hex')
return str
}
export function md5(str) {
const md5sum = crypto.createHash('md5')
md5sum.update(str)
str = md5sum.digest('hex')
return str
}
export function createSign(secretKey, paramStr, timestamp) {
paramStr = `${paramStr}:${timestamp}:${secretKey}`
return sha1(paramStr)
}
export function checkSign({
secretKey,
data,
sign,
signKeys,
}: {
secretKey: string
data: {}
sign: string
signKeys: string[]
}) {
signKeys.sort()
let signStr = ''
for (let key of signKeys) {
if (signStr.length > 0) {
signStr += '&'
}
signStr += `${key}=${data[key]}`
}
console.log(signStr)
let sign1 = hmacSha256(signStr, secretKey)
return sign1 === sign
}