This commit is contained in:
chaosBreaking
2019-10-03 00:22:23 +08:00
parent ef66042e49
commit 538b73e015
9 changed files with 131 additions and 16 deletions

View File

@@ -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
};
});
}
};

View File

@@ -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
});
});
}
};

View File

@@ -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;

View File

@@ -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;
});

View File

@@ -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 })

View File

@@ -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({

View File

@@ -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: '处理成功' };
}
}

View File

@@ -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;