Browse Source

✨ feat(UpdateInfo): 增加更新个人信息接口

Pchen. 8 months ago
parent
commit
e9f17b92f3
2 changed files with 88 additions and 2 deletions
  1. 80 0
      apis/User/UpdateInfo.js
  2. 8 2
      apis/User/WXWorkUrl.js

+ 80 - 0
apis/User/UpdateInfo.js

@@ -0,0 +1,80 @@
+const API = require("../../lib/API");
+const { BaseStdResponse } = require("../../BaseStdResponse");
+const db = require("../../plugin/DataBase/db");
+const AccessControl = require("../../lib/AccessControl");
+const {
+    getUserInfo,
+    getUserID
+} = require("../../plugin/WXWork/GetInfo");
+
+class UpdateInfo extends API {
+    constructor() {
+        super();
+        this.setMethod("POST");
+        this.setPath("/User/UpdateInfo");
+    }
+
+    async onRequest(req, res) {
+        this.setAllowCORS(res);
+
+        let { uuid, session, code } = req.body;
+        if (!uuid || !session || !code) {
+            res.json({ ...BaseStdResponse.MISSING_PARAMETER, endpoint: 7841686 });
+            return;
+        }
+
+        // 检查 session 是否有效
+        if (!await AccessControl.checkSession(uuid, session)) {
+            return res.json({
+                ...BaseStdResponse.ACCESS_DENIED,
+                endpoint: 48153145
+            });
+        }
+
+        try {
+            const idRes = await getUserID(code);
+            if (!idRes || !idRes.success) {
+                return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: `更新失败!${idRes.msg}` });
+            }
+
+            const wxid = idRes.userid;
+
+            let sql = 'SELECT wxid FROM users WHERE uuid = ?';
+            let [rows] = await db.query(sql, [uuid]);
+
+            if (rows.length !== 1 || !rows[0].wxid || !rows[0].session) 
+                return res.json({ ...BaseStdResponse.ERR, endpoint: 7894188, msg: `更新失败!` });
+            if(rows[0].wxid !== wxid)
+                return res.json({ ...BaseStdResponse.ERR, endpoint: 7894188, msg: `更新失败!当前登录的企业微信账号与绑定的企业微信账号不一致` });
+
+            const infoRes = await getUserInfo(wxid);
+            if (!infoRes || !infoRes.success) {
+                return res.json({ ...BaseStdResponse.ERR, endpoint: 7894198, msg: `更新失败!${infoRes.msg}` });
+            }
+
+            let { name: username, avatar } = infoRes;
+
+            sql = 'UPDATE users SET username = ?, avatar = ? WHERE uuid = ?';
+            result = await db.query(sql, [username, avatar, uuid]);
+
+            if (result && result.affectedRows > 0) {
+                return res.json({
+                    ...BaseStdResponse.OK,
+                    data: {
+                        uuid,
+                        username,
+                        wxid,
+                        avatar,
+                        session
+                    }
+                });
+            } else {
+                return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: '更新失败!' });
+            }
+        } catch (error) {
+            return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: '更新失败!' });
+        }
+    }
+}
+
+module.exports.UpdateInfo = UpdateInfo;

+ 8 - 2
apis/User/WXWorkUrl.js

@@ -14,8 +14,14 @@ class WXWorkUrl extends API {
     async onRequest(data, res) {
     async onRequest(data, res) {
         // this.setAllowCORS(res);
         // this.setAllowCORS(res);
 
 
-        const { num } = data;
-        let redirect = encodeURIComponent(`https://kq.ctbu.top/#/UserLogin/Stage2?num=${num}`);
+        const { num, type } = data;
+
+        let redirect;
+        if(type === 'login')
+            redirect = encodeURIComponent(`https://kq.ctbu.top/#/UserLogin/Stage2?num=${num}`);
+        else
+            redirect = encodeURIComponent(`https://kq.ctbu.top/#/UpdateInfo/Stage2?num=${num}`);
+
         const url = `https://login.work.weixin.qq.com/wwlogin/sso/login?login_type=CorpApp&appid=${config.wxwork.corpid}&redirect_uri=${redirect}&state=STATE&agentid=${config.wxwork.agentid}`
         const url = `https://login.work.weixin.qq.com/wwlogin/sso/login?login_type=CorpApp&appid=${config.wxwork.corpid}&redirect_uri=${redirect}&state=STATE&agentid=${config.wxwork.agentid}`
         return res.json({
         return res.json({
             ...BaseStdResponse.OK,
             ...BaseStdResponse.OK,