'use strict'; const BaseService = require('../core/base_service.js'); const sha256 = require("crypto-js/sha256"); const fileName = "home"; class HomeService extends BaseService { // token 状态查询接口 async tokenStatus(uid) { const { ctx } = this; const redis = ctx.app.redis; try { let result = {}; const tokenUser = await redis.get('db4').get(uid); if (!tokenUser) { const where = { user_uid: uid }; const attributes = ['token']; result.remainder = false; result.token = await ctx.model.BuserToken.findOne({ attributes, where }); result.type = result.token == null ? 'none' : "long"; } else { result.remainder = await redis.get('db4').ttl(uid); result.token = JSON.parse(tokenUser).token; result.type = JSON.parse(tokenUser).lifeHold ? "lifeHold" : "short"; } const token = await redis.get('db4').get(result.token); if(token) { result.attacksMark = JSON.parse(token).attacksMark; result.banAt = result.attacksMark ? JSON.parse(token).banAt : 0; } return result ? result : false; } catch (error) { const blockName = fileName + "--" + "tokenStatus"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } // 用户获取短期 token 的接口 async getUserToken(uid) { const { ctx } = this; const redis = ctx.app.redis; try { const token = this.shaForm(uid, this.generateRandomString()); const checkUser = await redis.get('db4').get(uid); let tokenUser, tokenMark; if (!checkUser) { const where = { user_uid: uid }; const attributes = ['token']; const result = await ctx.model.BuserToken.findOne({ attributes, where }); if (result == null) { // 设置过期时间为一周 tokenUser = await redis.get('db4').set(uid, JSON.stringify({ token, lifeHold: false }), 'EX', 604800); tokenMark = await redis.get('db4').set(token, JSON.stringify({ uid, attacksMark: false }), 'EX', 604800); } } return tokenUser && tokenMark ? true : false; } catch (error) { const blockName = fileName + "--" + "getUserToken"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } // 用户延续短期 token 有效时间的接口 async lifeHold(uid) { const { ctx } = this; const redis = ctx.app.redis; try { const user = await redis.get('db4').get(uid); let tokenUser, tokenMark; if (!JSON.parse(user).lifeHold) { let ex = await redis.get('db4').ttl(uid) + 604800; tokenUser = await redis.get('db4').set(uid, JSON.stringify({ token: JSON.parse(user).token, lifeHold: true }), 'EX', ex); tokenMark = await redis.get('db4').expire(JSON.parse(user).token, ex); } return tokenUser && tokenMark ? true : false; } catch (error) { const blockName = fileName + "--" + "lifeHold"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } } module.exports = HomeService;