增加分发徽章的流程
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 { 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
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 = {
|
||||||
|
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