增加分发徽章的流程
This commit is contained in:
parent
2bb0efebc5
commit
09965d5eb6
@ -4,6 +4,8 @@ import { ChainTask, ChainTaskClass } from 'models/ChainTask'
|
||||
import { RequestTask } from 'models/RequestTask'
|
||||
import { ChainQueue } from 'queue/chain.queue'
|
||||
import { DocumentType } from '@typegoose/typegoose'
|
||||
import { BlockChain } from 'chain/BlockChain'
|
||||
import { ZError } from 'common/ZError'
|
||||
|
||||
class ChainController extends BaseController {
|
||||
@role('anon')
|
||||
@ -32,5 +34,16 @@ class ChainController extends BaseController {
|
||||
await chainTask.save()
|
||||
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
|
||||
|
@ -61,6 +61,7 @@ export class ChainTaskClass extends BaseModule {
|
||||
let record = await ChainTask.findById(chainTaskId)
|
||||
let sCount = 0
|
||||
let errCount = 0
|
||||
let hashList: string[] = []
|
||||
for (let subId of record.tasks) {
|
||||
let subData = await RequestTask.findById(subId)
|
||||
if (subData.status === ReqTaskStatus.SUCCESS) {
|
||||
@ -68,6 +69,7 @@ export class ChainTaskClass extends BaseModule {
|
||||
} else if (subData.status === ReqTaskStatus.ERROR) {
|
||||
errCount += 1
|
||||
}
|
||||
hashList.push(subData.txHash)
|
||||
}
|
||||
record.successCount = sCount
|
||||
record.errorCount = errCount
|
||||
@ -88,7 +90,20 @@ export class ChainTaskClass extends BaseModule {
|
||||
}
|
||||
await record.save()
|
||||
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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,17 @@
|
||||
import axios from 'axios'
|
||||
import { singleton } from 'decorators/singleton'
|
||||
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
|
||||
export class InfoSvr {
|
||||
reportTaskResult(data) {
|
||||
data.user = process.env.RUN_USER
|
||||
reportTaskResult(data: any) {
|
||||
data.sign = calcHash(data)
|
||||
logger.info('report to info svr: ' + JSON.stringify(data))
|
||||
let url = `${process.env.INFO_SVR_HOST}${REPORT_TASK_URI}`
|
||||
let reqConfig: any = {
|
||||
|
74
src/utils/security.util.ts
Normal file
74
src/utils/security.util.ts
Normal 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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user