diff --git a/gm-server/app/controller/gmaccount.ts b/gm-server/app/controller/gmaccount.ts index 398684d94..1fc7ee4f6 100644 --- a/gm-server/app/controller/gmaccount.ts +++ b/gm-server/app/controller/gmaccount.ts @@ -35,6 +35,12 @@ export default class GmController extends Controller { ctx.body = await ctx.service.gmUser.createGmGroup(group, name, desc); } + public async saveGmGroup() { + const { ctx } = this; + const {groupId, group, name, desc} = ctx.request.body; + ctx.body = await ctx.service.gmUser.saveGmGroup(groupId, group, name, desc); + } + public async saveGmApiToGroup() { const { ctx } = this; const {id, apis} = ctx.request.body; diff --git a/gm-server/app/controller/login.ts b/gm-server/app/controller/login.ts index c92eeac9e..32793f304 100644 --- a/gm-server/app/controller/login.ts +++ b/gm-server/app/controller/login.ts @@ -15,7 +15,13 @@ export default class LoginController extends Controller { "data": ctx.user }; } - + + public async changeMyPass() { + const { ctx } = this; + const {uid, password} = ctx.request.body; + ctx.body = await ctx.service.gmUser.changeMyPass(uid, password); + } + public async getMenu() { const { ctx } = this; ctx.body = { diff --git a/gm-server/app/middleware/tokenParser.ts b/gm-server/app/middleware/tokenParser.ts index 996492633..430f959f5 100644 --- a/gm-server/app/middleware/tokenParser.ts +++ b/gm-server/app/middleware/tokenParser.ts @@ -1,6 +1,7 @@ import { GMUserModel } from '@db/GMUser'; import { GMUserGroupModel } from '@db/GMUserGroup' import { GMGroupModel } from '@db/GMGroup' +import { GMRecordModel } from '@db/GMRecord' import { ApiModel } from '@db/Api'; module.exports = () => { @@ -50,9 +51,11 @@ module.exports = () => { }; return; } - console.log(user.uid, ctx.request.url, new Date()); ctx.user = user; await next(); + if(ctx.request.method == "POST") { + await GMRecordModel.createRecord(user?user.uid:0, ctx.request.url, JSON.stringify(ctx.request.body||{}), JSON.stringify(ctx.body||{})); + } }; }; diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index 3ac5c474c..3f1a2f732 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -6,6 +6,7 @@ export default (app: Application) => { router.get('/api', controller.home.index); router.post('/api/login/account', controller.login.login); + router.post('/api/login/changeMyPass', tokenParser, controller.login.changeMyPass); router.post('/api/get_route', controller.login.getMenu); router.get('/api/currentUser', tokenParser, controller.login.currentUser); @@ -16,6 +17,7 @@ export default (app: Application) => { router.post('/api/gmaccount/getapilist',tokenParser, controller.gmaccount.getApiList); router.post('/api/gmaccount/saveapi',tokenParser, controller.gmaccount.saveApi); router.post('/api/gmaccount/creategmgroup',tokenParser, controller.gmaccount.createGmGroup); + router.post('/api/gmaccount/savegmgroup',tokenParser, controller.gmaccount.saveGmGroup); router.post('/api/gmaccount/saveapitogroup',tokenParser, controller.gmaccount.saveGmApiToGroup); @@ -23,6 +25,5 @@ export default (app: Application) => { router.post('/api/users/createrole',tokenParser, controller.users.createRole); router.post('/api/users/getrolelist',tokenParser, controller.users.getrolelist); router.post('/api/users/createroledata',tokenParser, controller.users.createRoleData); - }; diff --git a/gm-server/app/service/GmUser.ts b/gm-server/app/service/GmUser.ts index b2f72fbd7..b85fbb77e 100644 --- a/gm-server/app/service/GmUser.ts +++ b/gm-server/app/service/GmUser.ts @@ -13,8 +13,9 @@ export default class GMUsers extends Service { * 后台账号登录 */ public async login(username: string, password: string) { - // const {ctx} = this; - let user = await GMUserModel.login(username, password); + const {ctx} = this; + let token = ctx.service.utils.genCode(256); + let user = await GMUserModel.login(username, password, token); if(user) { let userGroups = await GMUserGroupModel.getUserGroupByUid(user.uid, 1); @@ -26,7 +27,7 @@ export default class GMUsers extends Service { return { "status": "ok", - "data": {...user, group} + "data": {...user, group, token} } } else { return { @@ -36,6 +37,33 @@ export default class GMUsers extends Service { } } + /** + * 修改我的密码 + */ + public async changeMyPass(uid: number, password: string) { + const {ctx} = this; + let user = ctx.user; + if(uid != user.uid) { + return { + "status": "error", + "data": "不可修改其他人的密码" + } + } + + let result = await GMUserModel.changePass(uid, password); + if(result) { + return { + "status": "ok", + "data": "修改成功" + } + } else { + return { + "status": "error", + "data": "修改失败" + } + } + } + /** * 后台账号列表 */ @@ -188,6 +216,26 @@ export default class GMUsers extends Service { } } + /** + * 修改用户组 + */ + public async saveGmGroup(groupId: number, group:string, name:string, desc: string) { + // const {ctx} = this; + + let result = await GMGroupModel.editGroup(groupId, group, name, desc); + if(result) { + return { + "status": "ok", + "data": "创建成功" + } + } else { + return { + "status": "error", + "data": "创建失败" + } + } + } + /** * 用户组添加接口 */ diff --git a/shared/db/GMGroup.ts b/shared/db/GMGroup.ts index 308cc5dbc..a44143645 100644 --- a/shared/db/GMGroup.ts +++ b/shared/db/GMGroup.ts @@ -32,6 +32,11 @@ export default class GMGroup extends BaseModel { return result; } + public static async editGroup(groupId: number, group: string, name: string, desc: string, lean = true) { + const result = await GMGroupModel.findOneAndUpdate({ id: groupId }, {$set: {group, desc, name}}).select('uid username name').lean(lean); + return result; + } + public static async getAllGroup(lean = true) { const list = await GMGroupModel.find().lean(lean); return list; diff --git a/shared/db/GMRecord.ts b/shared/db/GMRecord.ts new file mode 100644 index 000000000..784a71056 --- /dev/null +++ b/shared/db/GMRecord.ts @@ -0,0 +1,31 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +/** + * GM用户组接口 +*/ +@index({ uid: 1 }) +@index({ api: 1 }) + +export default class GMRecord extends BaseModel { + + @prop({ required: true }) + uid: number; + + @prop({ required: true }) + api: string; + + @prop({ required: true }) + body: string; + + @prop({ required: true }) + result: string; + + public static async createRecord(uid: number, api: string, body: string, result: string) { + const r = await GMRecordModel.insertMany({uid, api, body, result}); + return r; + } + +} + +export const GMRecordModel = getModelForClass(GMRecord); diff --git a/shared/db/GMUser.ts b/shared/db/GMUser.ts index 18dc48d85..469676653 100644 --- a/shared/db/GMUser.ts +++ b/shared/db/GMUser.ts @@ -31,11 +31,9 @@ export default class GMUser extends BaseModel { token: string; private static async encryptPass(password: string, salt?: string) { - console.log(salt) if(!salt) { salt = await bcrypt.genSalt(SALT_WORK_FACTOR); } - console.log(salt) let npassword = await bcrypt.hash(password, salt); return {npassword, salt}; } @@ -60,14 +58,12 @@ export default class GMUser extends BaseModel { return user; } - public static async login(username: string, password: string, lean = true) { + public static async login(username: string, password: string, token: string, lean = true) { const user = await GMUserModel.findOne({username}).select('salt').lean(); if(user) { let { salt } = user; - console.log(salt) let { npassword } = await this.encryptPass(password, salt); - console.log(username, npassword) - const checkUser = await GMUserModel.findOne({username, password: npassword}).select('uid username name token').lean(lean); + const checkUser = await GMUserModel.findOneAndUpdate({username, password: npassword}, { token }).select('uid username name token').lean(lean); return checkUser; } else { return null @@ -81,6 +77,11 @@ export default class GMUser extends BaseModel { return user; } + public static async changePass(uid: number, password: string, lean = true) { + let r = await this.encryptPass(password); + const user = await GMUserModel.findOneAndUpdate({uid}, { password: r.npassword, salt: r.salt}).select('uid username name').lean(lean); + return user; + } } export const GMUserModel = getModelForClass(GMUser);