From 538b73e0158b0b8c27924d630e84da06e48e9036 Mon Sep 17 00:00:00 2001 From: chaosBreaking Date: Thu, 3 Oct 2019 00:22:23 +0800 Subject: [PATCH] admin --- cn.js | 2 +- src/common/rootWallet.js | 12 ++++- src/modules/admin/admin.controller.js | 61 +++++++++++++++++++++++++ src/modules/admin/admin.model.js | 17 +++++++ src/modules/admin/admin.service.js | 22 +++++++++ src/modules/sign/sign.controller.js | 3 +- src/modules/ticket/ticket.controller.js | 11 +++-- src/modules/ticket/ticket.handler.js | 17 ++++--- src/service/middleware.js | 2 +- 9 files changed, 131 insertions(+), 16 deletions(-) create mode 100644 src/modules/admin/admin.controller.js create mode 100644 src/modules/admin/admin.model.js create mode 100644 src/modules/admin/admin.service.js diff --git a/cn.js b/cn.js index eb0edaa..90df407 100644 --- a/cn.js +++ b/cn.js @@ -8,7 +8,7 @@ const Fund = require('./src/modules/fund/fund.model'); const system = require('./src/modules/system/system.model'); const { createAction } = require('./src/modules/action/action.handler'); -const tokenReleaseRate = 0.01; +const tokenReleaseRate = 0.02; const inviteReward = 2.5; async function awardMine(user, fund) { diff --git a/src/common/rootWallet.js b/src/common/rootWallet.js index d6dd881..84d93c6 100644 --- a/src/common/rootWallet.js +++ b/src/common/rootWallet.js @@ -27,6 +27,16 @@ module.exports = { }, async sendVIC2User (toAddress, amount, option = {}) { const account = ERC20.fromMnemonic(VICSECWORD, VICCONTRACTADDR); - return await account.transfer(toAddress, amount, Object.assign(option, { decimals: 18 })); + return await account.transfer(toAddress, amount, Object.assign(option, { decimals: 18 })).then(res => { + return { + success: true, + res + }; + }).catch(err => { + return { + error: err, + res: null + }; + }); } }; diff --git a/src/modules/admin/admin.controller.js b/src/modules/admin/admin.controller.js new file mode 100644 index 0000000..4292e25 --- /dev/null +++ b/src/modules/admin/admin.controller.js @@ -0,0 +1,61 @@ +'use strict'; + +const { createToken } = require('../../utils/jwt'); +const { inject } = require('../../common/Provider'); +const Admin = require('./admin.model'); +const Action = require('../action/action.model'); +const Ticket = require('../ticket/ticket.model'); + +module.exports = { + signin: function (SysConfig) { + const { JWT_SECRET } = SysConfig; + return async (req, res) => { + const { adminId, passwd } = req.headers; + if (!adminId || !passwd) return res.json({ code: 1, msg: '密码错误' }); + const admin = await Admin.findOne({ id: adminId, passwd }); + // res.locals.user + // const { userId } = res.locals.user; + const token = createToken({ + adminId: admin.id + }, JWT_SECRET, {}); + return res.json({ + code: 0, + data: { + token + } + }); + }; + }, + async getUserActions (req, res) { + const { adminId } = res.locals.user; + if (!adminId) return res.json({ code: 1, msg: '非法访问' }); + const { userId, type, op } = req.body; + await Action.find({ userId, type, op }).then(data => { + return res.json({ + code: 0, + data + }); + }).catch(err => { + return res.json({ + code: 1, + msg: err.msg + }); + }); + }, + async getDepositTicket (req, res) { + const { adminId } = res.locals.user; + if (!adminId) return res.json({ code: 1, msg: '非法访问' }); + const { userId, type, status } = req.body; + await Ticket.find({ userId, status, type }).then(data => { + return res.json({ + code: 0, + data + }); + }).catch(err => { + return res.json({ + code: 1, + msg: err.msg + }); + }); + } +}; \ No newline at end of file diff --git a/src/modules/admin/admin.model.js b/src/modules/admin/admin.model.js new file mode 100644 index 0000000..f9b0860 --- /dev/null +++ b/src/modules/admin/admin.model.js @@ -0,0 +1,17 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const AdminSchema = new mongoose.Schema({ + passwd: { + type: String + }, + option: { + type: {}, + default: {} + } +},{}); + +const AdminModel = mongoose.model('Admin', AdminSchema); + +module.exports = AdminModel; \ No newline at end of file diff --git a/src/modules/admin/admin.service.js b/src/modules/admin/admin.service.js new file mode 100644 index 0000000..6239e83 --- /dev/null +++ b/src/modules/admin/admin.service.js @@ -0,0 +1,22 @@ +'use strict'; + +const indexRoute = '/admin/api'; +const controller = require('./admin.controller'); +const services = [ + { + url: '/in', + method: 'GET', + controller: controller.signin + }, + { + url: '/actions', + method: 'POST', + controller: controller.getUserActions + } +]; + +module.exports = services.map(service => { +// 可以在此处对要导出的服务map进行统一处理 + service.url = indexRoute + service.url; + return service; +}); \ No newline at end of file diff --git a/src/modules/sign/sign.controller.js b/src/modules/sign/sign.controller.js index a5dab54..c483981 100644 --- a/src/modules/sign/sign.controller.js +++ b/src/modules/sign/sign.controller.js @@ -176,11 +176,12 @@ module.exports = { const { userId } = res.locals.user; const { password, newPassword } = req.body; const user = await User.findById(userId).exec(); - if (!user || user.password !== Crypto.hash(password, { salt: PWD_HASH_SALT })) + if (!user || user.password !== Crypto.hash(password, { salt: PWD_HASH_SALT })) { return res.json({ code: 1, msg: '原始密码错误' }); + } const newHashPasswd = Crypto.hash(newPassword, { salt: PWD_HASH_SALT }); const update = { password: newHashPasswd }; const success = await User.findByIdAndUpdate(userId, update, { new: true }) diff --git a/src/modules/ticket/ticket.controller.js b/src/modules/ticket/ticket.controller.js index e58b06c..a67c8d0 100644 --- a/src/modules/ticket/ticket.controller.js +++ b/src/modules/ticket/ticket.controller.js @@ -6,7 +6,8 @@ const handleTicket = require('./ticket.handler'); module.exports = { // 处理工单请求的api async reqHandleTicket (req, res) { - const { handlerId } = res.local.handler; + const { adminId } = res.locals.user; + if (!adminId) return res.json({ code: 1, msg: '非法访问' }); const { id } = req.body; // 存在性检查 const ticket = await Ticket.findById(id).exec().catch(err => { @@ -18,7 +19,7 @@ module.exports = { msg: 'unknow ticket' }); // 调用处理函数 - handleTicket(ticket, handlerId).then(data => { + handleTicket(ticket, adminId).then(data => { return res.json({ code: 0, msg: 'success', @@ -32,8 +33,10 @@ module.exports = { }); }, async getTicketList (req, res) { + const { adminId } = res.locals.user; + if (!adminId) return res.json({ code: 1, msg: '非法访问' }); const { pageSize = 0, pageIndex = 1} = req.query; - return Ticket.find().skip((+pageIndex - 1) * +pageSize).limit(+pageSize).then(data => { + return Ticket.find({}).skip((+pageIndex - 1) * +pageSize).limit(+pageSize).then(data => { return res.json({ code: 0, data @@ -46,6 +49,8 @@ module.exports = { }); }, async getTicketDetail (req, res) { + const { adminId } = res.locals.user; + if (!adminId) return res.json({ code: 1, msg: '非法访问' }); const { ticketId } = req.query; return Ticket.findById(ticketId).then(data => { return res.json({ diff --git a/src/modules/ticket/ticket.handler.js b/src/modules/ticket/ticket.handler.js index 30e96e0..8001627 100644 --- a/src/modules/ticket/ticket.handler.js +++ b/src/modules/ticket/ticket.handler.js @@ -19,17 +19,15 @@ function createTicket (name, data) { async function handleTicket (ticket, handlerId) { // 所有工单在此处理,只要状态未完结(status !== 'finished'),就可以多次调用改变状态。 - const { userId, status } = ticket; - const user = await User.findById(userId).exec(); - if (!user) return null; ticket = await ticket.next(handlerId); - if (status === 'processing') { - await dealTicket(ticket, user); + if (ticket.status === 'processing') { + await dealTicket(ticket); await ticket.next(handlerId); return ticket; } return null; } + async function dealTicket (ticket, user) { if (ticket.type === 0) { // 提现 @@ -37,12 +35,13 @@ async function dealTicket (ticket, user) { } } -async function dealWithdraw (ticket, user) { +async function dealWithdraw (ticket) { // userId, amount: +amount, action, targetAddress const { userId, amount, targetAddress, coinId } = ticket; - const fund = await Fund.findOne({ userId }).exec(); - const { path } = fund.tokenAddress['usdtETH']; - return coinId === 'usdt' ? sendUSDT2User(targetAddress, amount, {path}) : sendVIC2User(targetAddress, amount) + if (coinId === 'vic') { + const res = await sendVIC2User(targetAddress, amount); + if (res.success) return { code: 0, msg: '处理成功' }; + } } diff --git a/src/service/middleware.js b/src/service/middleware.js index 5f50555..5a50b45 100644 --- a/src/service/middleware.js +++ b/src/service/middleware.js @@ -2,7 +2,7 @@ const { inject } = require('../common/Provider'); const { verifyToken, createToken } = require('../utils/jwt'); const crypto = require('../utils/crypto'); -const ignoreToken = ['/sign/check', '/sign/in', '/sign/up', '/sign/upwi', '/sign/forget', '/sign/send', '/sign/changePwd', '/sign/code']; +const ignoreToken = ['/sign/check', '/sign/in', '/sign/up', '/sign/upwi', '/sign/forget', '/sign/send', '/sign/changePwd', '/sign/code', '/admin/api/signin']; module.exports = { auth: inject(function (SysConfig) { const { JWT_SECRET } = SysConfig;