北斗启航科技教育平台登录系统
This commit is contained in:
182
app/service/BSide.js
Normal file
182
app/service/BSide.js
Normal file
@@ -0,0 +1,182 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "BSide";
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const shunt = (uid) => {
|
||||
return uid[uid.length - 1];
|
||||
}
|
||||
|
||||
class BSideService extends Service {
|
||||
async loginUser(name) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { account_name: name };
|
||||
const result = await ctx.model.BSide.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async subscribe(user, client) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = {
|
||||
user_uid: user.uid,
|
||||
business: client.id
|
||||
};
|
||||
const defaults = {
|
||||
user_uid: user.uid,
|
||||
business: client.id,
|
||||
status: 0,
|
||||
type: 0,
|
||||
created_at: new Date(),
|
||||
updated_at: new Date(),
|
||||
}
|
||||
await ctx.model.BSubscribe.findOrCreate({ where, defaults });
|
||||
return true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "subscribe";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async getUser(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const attributes = ['status', 'role', 'account_name', 'user_name', 'phone'];
|
||||
const where = { uid };
|
||||
const result = await ctx.model.BSide.findOne({ attributes, where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "getUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async editUserManager(editMsg, userMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
delete userMsg.location;
|
||||
const where = { ...userMsg };
|
||||
const result = await ctx.model.BSide.update(editMsg, { where });
|
||||
return result[0] == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editUserManager";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async editUser(userMsg, uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model.BSide.update(userMsg, { where });
|
||||
return result[0] == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async uidfinder(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model.BSide.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "uidfinder";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async changePassword(uid, oldPassword, newPassword) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const salt = this.generateRandomString();
|
||||
const setPassword = this.shaForm(newPassword, salt);
|
||||
const result = await ctx.model.BSide.findOne({ where });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const resultList = await ctx.model.BSide.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "changePassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const uidLastCode = shunt(uid);
|
||||
const modelName = uidLastCode === 'B' ? 'BSide' : 'Insiders';
|
||||
const model = uidLastCode === 'B' ? ctx.model : ctx.model3;
|
||||
const managerWhere = uidLastCode === 'B' ? { uid, role: 1 } : { uid, role: [3, 6, 9] };
|
||||
const result = await model[modelName].findOne({ where: managerWhere });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const salt = this.generateRandomString();
|
||||
if(defaultPassword == "") {
|
||||
defaultPassword = '123456';
|
||||
}
|
||||
const originPassword = this.shaForm(defaultPassword, salt);
|
||||
let where = {};
|
||||
const organization = result.organization;
|
||||
const role = { [Op.not]: 1 };
|
||||
if(modelType == "single") {
|
||||
where = { role, organization, ...body };
|
||||
delete where.location;
|
||||
} else if (modelType == "multiple") {
|
||||
let account_name = [], user_name = [], phone = [];
|
||||
for (const key in body) {
|
||||
body[key].forEach(element => {
|
||||
account_name.push(element.account_name);
|
||||
user_name.push(element.user_name);
|
||||
phone.push(element.phone);
|
||||
});
|
||||
}
|
||||
where = { role, organization, account_name, user_name, phone };
|
||||
} else if (modelType == "all") {
|
||||
where = { role, organization, };
|
||||
}
|
||||
let updateObj = { salt: this.encryptRequest(salt), status: 0, password: originPassword };
|
||||
if(resetType == "default") {
|
||||
updateObj.user_name = "";
|
||||
updateObj.phone = "";
|
||||
}
|
||||
const resetList = await ctx.model.BSide.update(updateObj, { where });
|
||||
return resetList.length == 0 ? false : resetList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "resetPassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async loginStatus(uid, login_status) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
await ctx.model.BSide.update({ login_status }, { where });
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginStatus";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = BSideService;
|
||||
93
app/service/CNTEVService.js
Normal file
93
app/service/CNTEVService.js
Normal file
@@ -0,0 +1,93 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "CNTEVService";
|
||||
|
||||
const Dytnsapi20200217 = require('@alicloud/dytnsapi20200217');
|
||||
const OpenApi = require('@alicloud/openapi-client');
|
||||
const Util = require('@alicloud/tea-util');
|
||||
|
||||
class Client {
|
||||
static createClient() {
|
||||
let config = new OpenApi.Config({
|
||||
// 凭证类型。
|
||||
// type: 'access_key',
|
||||
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
|
||||
accessKeyId: "LTAI5tM3QC6kY4r23sWnsvuY",
|
||||
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
|
||||
accessKeySecret: "Lj9QTWVMJSTAffscjykhaKZt7RN0Xh",
|
||||
// 访问的地域
|
||||
// regionId: 'cn-beijing'
|
||||
});
|
||||
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
|
||||
// 访问的地址
|
||||
config.endpoint = `dytnsapi.aliyuncs.com`;
|
||||
return new Dytnsapi20200217.default(config);
|
||||
}
|
||||
}
|
||||
|
||||
class CNTEVServiceService extends Service {
|
||||
// 身份证二要素核验
|
||||
async CNTEV(user_name, identity_card) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let client = Client.createClient();
|
||||
// 创建请求对象并设置入参
|
||||
let certNoTwoElementVerificationRequest = new Dytnsapi20200217.CertNoTwoElementVerificationRequest({
|
||||
authCode: "3V2qgr9a2W",
|
||||
certName: user_name,
|
||||
certNo: identity_card,
|
||||
});
|
||||
// 创建运行时配置对象
|
||||
let runtime = new Util.RuntimeOptions({});
|
||||
runtime.readTimeout = 5000;
|
||||
runtime.connectTimeout = 5000;
|
||||
// 发起请求
|
||||
const response = await client.certNoTwoElementVerificationWithOptions(certNoTwoElementVerificationRequest, runtime);
|
||||
const { code, data } = response.body;
|
||||
if (code == "OK") {
|
||||
await ctx.app.redis.get('db3').set(identity_card, JSON.stringify({ user_name, real_check: data.isConsistent }), 'EX', 600);
|
||||
if (data.isConsistent == "1") return { status: 1, msg: "姓名与身份证信息核验一致" };
|
||||
if (data.isConsistent == "0") return { status: 0, msg: "姓名与身份证信息核验不一致" };
|
||||
if (data.isConsistent == "2") return { status: 2, msg: "查无此人" };
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
|
||||
// 错误 message
|
||||
// console.log('1===========================================')
|
||||
// console.log(error.message);
|
||||
if (error.message.includes("身份证号参数非法")) return { status: 400, msg: "身份证号参数非法" };
|
||||
// 若捕捉到 ConnectTimeout 错误,则尝试重发
|
||||
if (error.message.includes("ConnectTimeout")) return { status: 600, msg: "尝试重新核验" };
|
||||
// console.log('2===========================================')
|
||||
// 诊断地址
|
||||
console.log(error);
|
||||
// console.log('3===========================================')
|
||||
// console.log(error.data);
|
||||
// console.log('4===========================================')
|
||||
// console.log(error.data["Recommend"]);
|
||||
// Util.default.assertAsString(error.message);
|
||||
|
||||
const blockName = fileName + "--" + "CNTEV";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 身份证二要素核验结果标记
|
||||
async realMark(user_name, identity_card, real_check) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
await ctx.model5.Examinee.update({ real_check: real_check ? 1 : 2 }, { where: { user_name, identity_card } });
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "realMark";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CNTEVServiceService;
|
||||
203
app/service/CSide.js
Normal file
203
app/service/CSide.js
Normal file
@@ -0,0 +1,203 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "CSide";
|
||||
|
||||
class CSideService extends Service {
|
||||
async diffPhone(phone) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { phone };
|
||||
const result = await ctx.model2.CSide.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "diffPhone";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async diffEmail(email) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { email };
|
||||
const result = await ctx.model2.CSide.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "diffEmail";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async registered(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const user = await ctx.model2.CSide.create(form);
|
||||
if (!user) {
|
||||
return { code: 404, message: '注册失败', data: false };
|
||||
};
|
||||
return { code: 200, message: '注册成功', data: user };
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "registered";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async loginUser(name) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { account_name: name };
|
||||
const [buser, cuser] = await Promise.all([
|
||||
ctx.model.BSide.findOne({ where }),
|
||||
ctx.model2.CSide.findOne({ where })
|
||||
]);
|
||||
if (!buser && !cuser) return false;
|
||||
return buser || cuser;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async subscribe(user, client) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = {
|
||||
user_uid: user.uid,
|
||||
business: client.id
|
||||
};
|
||||
const uidLastCode = user.uid[user.uid.length - 1];
|
||||
const subscribeModel = {
|
||||
"B": ctx.model.BSubscribe,
|
||||
"C": ctx.model2.CSubscribe
|
||||
};
|
||||
const defaults = {
|
||||
user_uid: user.uid,
|
||||
business: client.id,
|
||||
status: 0,
|
||||
type: 0,
|
||||
created_at: new Date(),
|
||||
updated_at: new Date(),
|
||||
};
|
||||
await subscribeModel[uidLastCode].findOrCreate({ where, defaults });
|
||||
return true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "subscribe";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async getUser(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const attributes = ['status', 'role', 'account_name', 'user_name', 'phone', 'gender', 'age', 'email', 'address', 'post_code'];
|
||||
const where = { uid };
|
||||
const result = await ctx.model2.CSide.findOne({ attributes, where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "getUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async editUser(userMsg, uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
userMsg.gender = userMsg.gender == "1" ? true : false;
|
||||
const where = { uid };
|
||||
const result = await ctx.model2.CSide.update(userMsg, { where });
|
||||
return result[0] == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async uidfinder(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model2.CSide.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "uidfinder";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async changePassword(uid, oldPassword, newPassword) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const salt = this.generateRandomString();
|
||||
const setPassword = this.shaForm(newPassword, salt);
|
||||
const result = await ctx.model2.CSide.findOne({ where });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const resultList = await ctx.model2.CSide.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "changePassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const uidLastCode = shunt(uid);
|
||||
const modelName = uidLastCode === 'C' ? 'CSide' : 'Insiders';
|
||||
const model = uidLastCode === 'C' ? ctx.model : ctx.model3;
|
||||
const managerWhere = uidLastCode === 'C' ? { uid } : { uid, role: [3, 6, 9] };
|
||||
const result = await model[modelName].findOne({ where: managerWhere });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const salt = this.generateRandomString();
|
||||
if(defaultPassword == "") {
|
||||
defaultPassword = '123456';
|
||||
}
|
||||
const originPassword = this.shaForm(defaultPassword, salt);
|
||||
let where = {};
|
||||
if(modelType == "single") {
|
||||
where = body;
|
||||
} else if (modelType == "multiple") {
|
||||
let account_name = [], user_name = [], phone = [];
|
||||
for (const key in body) {
|
||||
body[key].forEach(element => {
|
||||
account_name.push(element.account_name);
|
||||
user_name.push(element.user_name);
|
||||
phone.push(element.phone);
|
||||
});
|
||||
}
|
||||
where = { account_name, user_name, phone };
|
||||
}
|
||||
const resetList = await ctx.model2.CSide.update({ salt: this.encryptRequest(salt), status: 0, password: originPassword }, { where });
|
||||
return resetList.length == 0 ? false : resetList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "resetPassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async loginStatus(uid, login_status) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
await ctx.model.BSide.update({ login_status }, { where });
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginStatus";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CSideService;
|
||||
151
app/service/Contest.js
Normal file
151
app/service/Contest.js
Normal file
@@ -0,0 +1,151 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "Contest";
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
class ContestService extends Service {
|
||||
async loginUser(name) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { account_name: name };
|
||||
const result = await ctx.model4.Account.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async getUser(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const attributes = ['account_name', 'status'];
|
||||
const where = { uid };
|
||||
const result = await ctx.model4.Account.findOne({ attributes, where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "getUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async editUserManager(editMsg, userMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
delete userMsg.location;
|
||||
const where = { ...userMsg };
|
||||
const result = await ctx.model4.Account.update(editMsg, { where });
|
||||
return result[0] == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editUserManager";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async editUser(userMsg, uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model4.Account.update(userMsg, { where });
|
||||
return result[0] == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async uidfinder(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model4.Account.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "uidfinder";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async changePassword(uid, oldPassword, newPassword) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const salt = this.generateRandomString();
|
||||
const setPassword = this.shaForm(newPassword, salt);
|
||||
const result = await ctx.model4.Account.findOne({ where });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const resultList = await ctx.model4.Account.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "changePassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const managerWhere = { uid, role: [3, 6, 9] };
|
||||
const result = await ctx.model3.Insiders.findOne({ where: managerWhere });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const salt = this.generateRandomString();
|
||||
if(defaultPassword == "") {
|
||||
defaultPassword = '123456';
|
||||
}
|
||||
const originPassword = this.shaForm(defaultPassword, salt);
|
||||
let where = {};
|
||||
const organization = result.organization;
|
||||
const role = { [Op.not]: 1 };
|
||||
if(modelType == "single") {
|
||||
where = { role, organization, ...body };
|
||||
delete where.location;
|
||||
} else if (modelType == "multiple") {
|
||||
let account_name = [], user_name = [], phone = [];
|
||||
for (const key in body) {
|
||||
body[key].forEach(element => {
|
||||
account_name.push(element.account_name);
|
||||
user_name.push(element.user_name);
|
||||
phone.push(element.phone);
|
||||
});
|
||||
}
|
||||
where = { role, organization, account_name, user_name, phone };
|
||||
} else if (modelType == "all") {
|
||||
where = { role, organization, };
|
||||
}
|
||||
let updateObj = { salt: this.encryptRequest(salt), status: 0, password: originPassword };
|
||||
if(resetType == "default") {
|
||||
updateObj.user_name = "";
|
||||
updateObj.phone = "";
|
||||
}
|
||||
const resetList = await ctx.model4.Account.update(updateObj, { where });
|
||||
return resetList.length == 0 ? false : resetList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "resetPassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async loginStatus(uid, login_status) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
await ctx.model4.Account.update({ login_status }, { where });
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginStatus";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ContestService;
|
||||
166
app/service/Exam.js
Normal file
166
app/service/Exam.js
Normal file
@@ -0,0 +1,166 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "Exam";
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
class ExamService extends Service {
|
||||
async loginUser(phone) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { phone };
|
||||
const result = await ctx.model5.Examinee.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async uidfinder(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model5.Examinee.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "uidfinder";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async getUser(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const attributes = ['user_name', 'identity_card', 'real_check', 'email', 'phone', 'address', 'workplace', 'status'];
|
||||
const where = { uid };
|
||||
const result = await ctx.model5.Examinee.findOne({ attributes, where });
|
||||
if(result.dataValues.status == 2) return false;
|
||||
if(result.dataValues.real_check == 0 || result.dataValues.real_check == 2) {
|
||||
const where = {
|
||||
user_uid: uid,
|
||||
user_name: result.dataValues.user_name,
|
||||
identity_card: result.dataValues.identity_card,
|
||||
};
|
||||
const audit = await ctx.model5.Audit.findOne({ attributes: ['status'], where });
|
||||
if (audit != null) await ctx.model5.Examinee.update({ real_check: audit.dataValues.status }, { where: { uid } });
|
||||
};
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "getUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async editUser(userMsg, uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
let attributes = ['user_name', 'identity_card'];
|
||||
const check = await ctx.model5.Examinee.findOne({ attributes, where });
|
||||
const { user_name, identity_card } = check.dataValues;
|
||||
if(user_name !== userMsg.user_name || identity_card !== userMsg.identity_card) {
|
||||
userMsg.real_check = 0;
|
||||
};
|
||||
const audit = await ctx.model5.Audit.findOne({ where: { user_uid: uid, status: 0 } });
|
||||
if(audit == null) {
|
||||
const auditForm = {
|
||||
user_uid: uid,
|
||||
user_name: userMsg.user_name,
|
||||
identity_card: userMsg.identity_card,
|
||||
status: 0,
|
||||
created_at: new Date(),
|
||||
};
|
||||
await ctx.model5.Audit.create(auditForm);
|
||||
} else {
|
||||
const auditUpdate = {
|
||||
user_name: userMsg.user_name,
|
||||
identity_card: userMsg.identity_card,
|
||||
created_at: new Date(),
|
||||
}
|
||||
await ctx.model5.Audit.update(auditUpdate, { where: { user_uid: uid, status: 0 } });
|
||||
}
|
||||
const result = await ctx.model5.Examinee.update(userMsg, { where });
|
||||
return result[0] == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async changePassword(uid, oldPassword, newPassword) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const salt = this.generateRandomString();
|
||||
const setPassword = this.shaForm(newPassword, salt);
|
||||
const result = await ctx.model5.Examinee.findOne({ where });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const resultList = await ctx.model5.Examinee.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "changePassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model5.Examinee.findOne({ where: { uid, role: [6, 9] } });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const salt = this.generateRandomString();
|
||||
if(defaultPassword == "") {
|
||||
defaultPassword = '123456';
|
||||
}
|
||||
const originPassword = this.shaForm(defaultPassword, salt);
|
||||
let where = {}, role;
|
||||
if(result.dataValues.password == 9) {
|
||||
role = { [Op.not]: [9] };
|
||||
} else {
|
||||
role = { [Op.not]: [6, 9] };
|
||||
}
|
||||
if(modelType == "single") {
|
||||
where = { role, ...body };
|
||||
} else if (modelType == "multiple") {
|
||||
let user_name = [], phone = [];
|
||||
for (const key in body) {
|
||||
body[key].forEach(element => {
|
||||
user_name.push(element.user_name);
|
||||
phone.push(element.phone);
|
||||
});
|
||||
}
|
||||
where = { role, user_name, phone };
|
||||
} else if (modelType == "all") {
|
||||
where = { role };
|
||||
}
|
||||
const resetList = await ctx.model5.Examinee.update({ salt: this.encryptRequest(salt), status: 0, password: originPassword }, { where });
|
||||
return resetList.length == 0 ? false : resetList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "resetPassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async loginStatus(uid, login_status) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
await ctx.model5.Examinee.update({ login_status }, { where });
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginStatus";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ExamService;
|
||||
133
app/service/ExamManager.js
Normal file
133
app/service/ExamManager.js
Normal file
@@ -0,0 +1,133 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "ExamManager";
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
class ExamManagerService extends Service {
|
||||
async loginUser(name) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { account_name: name };
|
||||
const result = await ctx.model5.Manager.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async uidfinder(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model5.Manager.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "uidfinder";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async getUser(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const attributes = ['account_name', 'role', 'status'];
|
||||
const where = { uid };
|
||||
const result = await ctx.model5.Manager.findOne({ attributes, where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "getUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async editUser(userMsg, uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model5.Manager.update(userMsg, { where });
|
||||
return result[0] == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async changePassword(uid, oldPassword, newPassword) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const salt = this.generateRandomString();
|
||||
const setPassword = this.shaForm(newPassword, salt);
|
||||
const result = await ctx.model5.Manager.findOne({ where });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const resultList = await ctx.model5.Manager.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "changePassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model5.Manager.findOne({ where: { uid, role: [6, 9] } });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const salt = this.generateRandomString();
|
||||
if(defaultPassword == "") {
|
||||
defaultPassword = '123456';
|
||||
}
|
||||
const originPassword = this.shaForm(defaultPassword, salt);
|
||||
let where = {}, role;
|
||||
if(result.dataValues.password == 9) {
|
||||
role = { [Op.not]: [9] };
|
||||
} else {
|
||||
role = { [Op.not]: [6, 9] };
|
||||
}
|
||||
if(modelType == "single") {
|
||||
where = { role, ...body };
|
||||
} else if (modelType == "multiple") {
|
||||
let account_name = [], user_name = [], phone = [];
|
||||
for (const key in body) {
|
||||
body[key].forEach(element => {
|
||||
account_name.push(element.account_name);
|
||||
user_name.push(element.user_name);
|
||||
phone.push(element.phone);
|
||||
});
|
||||
}
|
||||
where = { role, account_name, user_name, phone };
|
||||
} else if (modelType == "all") {
|
||||
where = { role };
|
||||
}
|
||||
const resetList = await ctx.model5.Manager.update({ salt: this.encryptRequest(salt), status: 0, password: originPassword }, { where });
|
||||
return resetList.length == 0 ? false : resetList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "resetPassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async loginStatus(uid, login_status) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
await ctx.model5.Manager.update({ login_status }, { where });
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginStatus";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ExamManagerService;
|
||||
75
app/service/Id2MVService.js
Normal file
75
app/service/Id2MVService.js
Normal file
@@ -0,0 +1,75 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "Id2MVService";
|
||||
|
||||
const Cloudauth20190307 = require('@alicloud/cloudauth20190307');
|
||||
const OpenApi = require('@alicloud/openapi-client');
|
||||
const Util = require('@alicloud/tea-util');
|
||||
|
||||
class Client {
|
||||
static createClient() {
|
||||
let config = new OpenApi.Config({
|
||||
// 凭证类型。
|
||||
// type: 'access_key',
|
||||
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
|
||||
accessKeyId: "LTAI5tM3QC6kY4r23sWnsvuY",
|
||||
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
|
||||
accessKeySecret: "Lj9QTWVMJSTAffscjykhaKZt7RN0Xh",
|
||||
// 访问的地域
|
||||
// regionId: 'cn-beijing'
|
||||
});
|
||||
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
|
||||
// 访问的地址
|
||||
config.endpoint = `cloudauth.cn-beijing.aliyuncs.com`;
|
||||
return new Cloudauth20190307.default(config);
|
||||
}
|
||||
}
|
||||
|
||||
class Id2MVServiceService extends Service {
|
||||
// 身份二要素核验
|
||||
async checkIdCard(idCard, name) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let client = Client.createClient();
|
||||
// 创建请求对象并设置入参
|
||||
let id2MetaVerifyRequest = new Cloudauth20190307.Id2MetaVerifyRequest({
|
||||
paramType: "md5",
|
||||
identifyNum: idCard.substring(0, 6) + this.calculateMD5(idCard.substring(6, 14)) + idCard.substring(14),
|
||||
userName: this.calculateMD5(name.substring(0, 1)) + name.substring(1),
|
||||
});
|
||||
// 创建运行时配置对象
|
||||
let runtime = new Util.RuntimeOptions({});
|
||||
runtime.readTimeout = 5000;
|
||||
runtime.connectTimeout = 5000;
|
||||
// 发起请求
|
||||
const response = await client.id2MetaVerifyWithOptions(id2MetaVerifyRequest, runtime);
|
||||
const { code, data } = response.body;
|
||||
if(code == "OK" && data.isConsistent == "1") return { status: 1, msg: "姓名与身份证信息核验一致" };
|
||||
if(code == "OK" && data.isConsistent == "2") return { status: 2, msg: "姓名与身份证信息核验不一致" };
|
||||
if(code == "OK" && data.isConsistent == "3") return { status: 3, msg: "查无此人" };
|
||||
} catch (error) {
|
||||
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
|
||||
// 错误 message
|
||||
// console.log('1===========================================')
|
||||
// console.log(error.message);
|
||||
// 若捕捉到 ConnectTimeout 错误,则尝试重发
|
||||
if(error.message.includes("ConnectTimeout")) return { status: 600, msg: "尝试重新核验" };
|
||||
// console.log('2===========================================')
|
||||
// 诊断地址
|
||||
console.log(error);
|
||||
// console.log('3===========================================')
|
||||
// console.log(error.data);
|
||||
// console.log('4===========================================')
|
||||
// console.log(error.data["Recommend"]);
|
||||
// Util.default.assertAsString(error.message);
|
||||
|
||||
const blockName = fileName + "--" + "checkIdCard";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Id2MVServiceService;
|
||||
133
app/service/Insiders.js
Normal file
133
app/service/Insiders.js
Normal file
@@ -0,0 +1,133 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "Insiders";
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
class InsidersService extends Service {
|
||||
async loginUser(name) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { name };
|
||||
const result = await ctx.model3.Insiders.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async uidfinder(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model3.Insiders.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "uidfinder";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async getUser(uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const attributes = ['status', 'role', 'name', 'department'];
|
||||
const where = { uid };
|
||||
const result = await ctx.model3.Insiders.findOne({ attributes, where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "getUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async editUser(userMsg, uid) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const result = await ctx.model3.Insiders.update(userMsg, { where });
|
||||
return result[0] == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async changePassword(uid, oldPassword, newPassword) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
const salt = this.generateRandomString();
|
||||
const setPassword = this.shaForm(newPassword, salt);
|
||||
const result = await ctx.model3.Insiders.findOne({ where });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const resultList = await ctx.model3.Insiders.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "changePassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid, role: [6, 9] } });
|
||||
if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
|
||||
const salt = this.generateRandomString();
|
||||
if(defaultPassword == "") {
|
||||
defaultPassword = '123456';
|
||||
}
|
||||
const originPassword = this.shaForm(defaultPassword, salt);
|
||||
let where = {}, role;
|
||||
if(result.dataValues.password == 9) {
|
||||
role = { [Op.not]: [9] };
|
||||
} else {
|
||||
role = { [Op.not]: [6, 9] };
|
||||
}
|
||||
if(modelType == "single") {
|
||||
where = { role, ...body };
|
||||
} else if (modelType == "multiple") {
|
||||
let account_name = [], user_name = [], phone = [];
|
||||
for (const key in body) {
|
||||
body[key].forEach(element => {
|
||||
account_name.push(element.account_name);
|
||||
user_name.push(element.user_name);
|
||||
phone.push(element.phone);
|
||||
});
|
||||
}
|
||||
where = { role, account_name, user_name, phone };
|
||||
} else if (modelType == "all") {
|
||||
where = { role };
|
||||
}
|
||||
const resetList = await ctx.model3.Insiders.update({ salt: this.encryptRequest(salt), status: 0, password: originPassword }, { where });
|
||||
return resetList.length == 0 ? false : resetList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "resetPassword";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async loginStatus(uid, login_status) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { uid };
|
||||
await ctx.model.BSide.update({ login_status }, { where });
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginStatus";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = InsidersService;
|
||||
108
app/service/SMSService.js
Normal file
108
app/service/SMSService.js
Normal file
@@ -0,0 +1,108 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "SMSService";
|
||||
|
||||
const Dysmsapi20170525 = require('@alicloud/dysmsapi20170525');
|
||||
const OpenApi = require('@alicloud/openapi-client');
|
||||
const Util = require('@alicloud/tea-util');
|
||||
|
||||
class Client {
|
||||
static createClient() {
|
||||
let config = new OpenApi.Config({
|
||||
// 凭证类型。
|
||||
// type: 'access_key',
|
||||
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
|
||||
accessKeyId: "LTAI5tM3QC6kY4r23sWnsvuY",
|
||||
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
|
||||
accessKeySecret: "Lj9QTWVMJSTAffscjykhaKZt7RN0Xh",
|
||||
// 访问的地域
|
||||
// regionId: 'cn-beijing'
|
||||
});
|
||||
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
|
||||
// 访问的地址
|
||||
config.endpoint = `dysmsapi.aliyuncs.com`;
|
||||
return new Dysmsapi20170525.default(config);
|
||||
}
|
||||
}
|
||||
|
||||
class SMSServiceService extends Service {
|
||||
// 向手机发送短信验证码
|
||||
async sendSMS(phone) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const code = this.generateCodeString();
|
||||
const mark = await ctx.app.redis.get('db3').get(phone);
|
||||
if(mark == null) await ctx.app.redis.get('db3').set(phone, JSON.stringify({ status: 0 }), 'EX', 600);
|
||||
let client = Client.createClient();
|
||||
// 创建请求对象并设置入参
|
||||
let sendSmsRequest = new Dysmsapi20170525.SendSmsRequest({
|
||||
phoneNumbers: phone,
|
||||
// signName: "身份验证",
|
||||
// templateCode: "SMS_480180061",
|
||||
// signName: "登录验证",
|
||||
// templateCode: "SMS_487315107",
|
||||
signName: "华云智联",
|
||||
templateCode: "SMS_487315108",
|
||||
// signName: "北京华云智联",
|
||||
// templateCode: "SMS_487350086",
|
||||
// signName: "北京华云智联科技",
|
||||
// templateCode: "SMS_487410093",
|
||||
templateParam: `{\"code\":\"${code}\"}`,
|
||||
});
|
||||
// 创建运行时配置对象
|
||||
let runtime = new Util.RuntimeOptions({});
|
||||
runtime.readTimeout = 5000;
|
||||
runtime.connectTimeout = 5000;
|
||||
// 发起请求
|
||||
const response = await client.sendSmsWithOptions(sendSmsRequest, runtime);
|
||||
if(response.body.code == "OK") {
|
||||
await ctx.app.redis.get('db3').set(code, phone.toString(), 'EX', 600);
|
||||
return { status: 200, msg: "验证码发送成功" };
|
||||
};
|
||||
} catch (error) {
|
||||
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
|
||||
// 错误 message
|
||||
// console.log('1===========================================')
|
||||
// console.log(error.message);
|
||||
// 若捕捉到 ConnectTimeout 错误,则尝试重发
|
||||
if(error.message.includes("ConnectTimeout")) return { status: 600, msg: "尝试重新核验" };
|
||||
// console.log('2===========================================')
|
||||
// 诊断地址
|
||||
console.log(error);
|
||||
// console.log('3===========================================')
|
||||
// console.log(error.data);
|
||||
// console.log('4===========================================')
|
||||
// console.log(error.data["Recommend"]);
|
||||
// Util.default.assertAsString(error.message);
|
||||
|
||||
const blockName = fileName + "--" + "sendSMS";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 校验短信验证码
|
||||
async checkCode(phone, code) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const phoneResult = await ctx.app.redis.get('db3').get(phone);
|
||||
if (phoneResult == null) await ctx.app.redis.get('db3').set(phone, JSON.stringify({ status: 0 }), 'EX', 600);
|
||||
else if (JSON.parse(phoneResult).status == '1') return true;
|
||||
const check = await ctx.app.redis.get('db3').get(code);
|
||||
if (check == null || check != phone) return false;
|
||||
await ctx.app.redis.get('db3').del(code);
|
||||
let remainder = await ctx.app.redis.get('db3').ttl(phone);
|
||||
if (remainder < 60) remainder = 600;
|
||||
await ctx.app.redis.get('db3').set(phone, JSON.stringify({ status: 1 }), 'EX', remainder);
|
||||
return true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "checkCode";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = SMSServiceService;
|
||||
84
app/service/verify.js
Normal file
84
app/service/verify.js
Normal file
@@ -0,0 +1,84 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const fileName = "verify";
|
||||
|
||||
// const sha256 = require("crypto-js/sha256");
|
||||
|
||||
const { Op } = require("sequelize");
|
||||
|
||||
class VerifyService extends Service {
|
||||
async toLogin(origin_url) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
// const temporary = sha256(sha256(this.generateRandomString()).toString()+'temporary').toString();
|
||||
// Op.regexp 正则匹配,适用于不同端用户登录同一域名的网站
|
||||
// await ctx.model.Business.update({ temporary_id: temporary }, { where: { client_url: { [Op.regexp]: origin_url } } });
|
||||
// const result = await ctx.model.Business.findOne({ where: { client_url: { [Op.regexp]: origin_url } } });
|
||||
// Op.startsWith 包含,适用于不同端用户登录不同域名网站
|
||||
// await ctx.model.Business.update({ temporary_id: temporary }, { where: { client_url: { [Op.startsWith]: origin_url } } });
|
||||
const where = { client_url: { [Op.startsWith]: origin_url } };
|
||||
const result = await ctx.model3.Business.findOne({ where });
|
||||
return result || false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "toLogin";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async loginClient(client_id) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let checkFixedClient = false;
|
||||
ctx.app.config.fixedClient.forEach(element => {
|
||||
if (client_id == element) checkFixedClient = true;
|
||||
});
|
||||
if (checkFixedClient) {
|
||||
return {
|
||||
dataValues: {
|
||||
client_id,
|
||||
client_secret: client_id
|
||||
}
|
||||
};
|
||||
} else {
|
||||
const where = { temporary_id: client_id };
|
||||
const result = await ctx.model3.Business.findOne({ where });
|
||||
return result || false;
|
||||
}
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "loginClient";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
async getToken(client_id) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let checkFixedClient = false;
|
||||
ctx.app.config.fixedClient.forEach(element => {
|
||||
if (client_id == element) checkFixedClient = true;
|
||||
});
|
||||
if (checkFixedClient) {
|
||||
return {
|
||||
dataValues: {
|
||||
client_id,
|
||||
client_secret: client_id
|
||||
}
|
||||
};
|
||||
} else {
|
||||
const where = { client_id };
|
||||
const result = await ctx.model3.Business.findOne({ where });
|
||||
return result || false;
|
||||
}
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "getToken";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = VerifyService;
|
||||
Reference in New Issue
Block a user