Browse Source

🦄 refactor: 删除不必要的文件

Pchen. 1 month ago
parent
commit
27b3524b0a
47 changed files with 0 additions and 4239 deletions
  1. 0 58
      apis/Article/Admin/DeleteArticle.js
  2. 0 74
      apis/Article/Admin/GetArticle.js
  3. 0 124
      apis/Article/Admin/GetArticleList.js
  4. 0 77
      apis/Article/Admin/PostArticle.js
  5. 0 79
      apis/Article/Admin/PublicArticle.js
  6. 0 64
      apis/Article/GetArticle.js
  7. 0 109
      apis/Article/GetArticleList.js
  8. 0 116
      apis/Corn/StartPowerCheck.js
  9. 0 74
      apis/Corn/UpdateState.js
  10. 0 82
      apis/Corn/UpdateStateAll.js
  11. 0 92
      apis/Data/IndexData.js
  12. 0 52
      apis/IC/IcInfo/GetOpenScope.js
  13. 0 56
      apis/IC/IcInfo/GetSeatInfo.js
  14. 0 57
      apis/IC/IcInfo/GetSeatMenu.js
  15. 0 50
      apis/IC/Order/OrderHistory.js
  16. 0 75
      apis/IC/Rule/AddRule.js
  17. 0 49
      apis/IC/Rule/DeleteRule.js
  18. 0 47
      apis/IC/Rule/GetRule.js
  19. 0 56
      apis/IC/Seat/DeleteSeat.js
  20. 0 56
      apis/IC/Seat/EndAhead.js
  21. 0 60
      apis/IC/Seat/MyOrder.js
  22. 0 60
      apis/IC/Seat/OrderSeat.js
  23. 0 74
      apis/IC/Star/AddStar.js
  24. 0 66
      apis/IC/Star/AddStarGroup.js
  25. 0 49
      apis/IC/Star/DeleteStar.js
  26. 0 49
      apis/IC/Star/DeleteStarGroup.js
  27. 0 47
      apis/IC/Star/GetStar.js
  28. 0 47
      apis/IC/Star/GetStarGroup.js
  29. 0 77
      apis/JW/ActiveAccount.js
  30. 0 59
      apis/JW/AddAccount.js
  31. 0 49
      apis/JW/DeleteAccount.js
  32. 0 63
      apis/JW/GetAccount.js
  33. 0 108
      apis/Lepao/Face/BeginFaceReco.js
  34. 0 81
      apis/Power/AddAccount.js
  35. 0 52
      apis/Power/DeleteAccount.js
  36. 0 52
      apis/Power/GetAccount.js
  37. 0 51
      apis/Power/GetChangeRecord.js
  38. 0 51
      apis/Power/GetPowerData.js
  39. 0 33
      apis/Public/EncrypedPwd.js
  40. 0 65
      apis/QK/Rule/AddRule.js
  41. 0 49
      apis/QK/Rule/DeleteRule.js
  42. 0 47
      apis/QK/Rule/GetRule.js
  43. 0 71
      apis/QuXuanShu/GetBookImg.js
  44. 0 209
      apis/QuXuanShu/GetBookList.js
  45. 0 335
      lib/IC/IC.js
  46. 0 192
      plugin/Browser/IcCookie.js
  47. 0 696
      plugin/RSAUtils/RSAUtils.js

+ 0 - 58
apis/Article/Admin/DeleteArticle.js

@@ -1,58 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-// 删除文章
-class DeleteArticle extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Admin/Article')
-        this.setMethod('DELETE')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        // 检查权限
-        let permission = await AccessControl.getPermission(uuid)
-        if (!permission.includes("admin") && !permission.includes("article"))
-            return res.json({
-                ...BaseStdResponse.PERMISSION_DENIED
-            })
-
-        let sql = 'DELETE FROM article WHERE id = ?'
- 
-        let r = await db.query(sql, [id])
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除文章失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`删除文章失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "删除文章失败!",
-            });
-        }
-    }
-}
-
-module.exports.DeleteArticle = DeleteArticle;

+ 0 - 74
apis/Article/Admin/GetArticle.js

@@ -1,74 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-// 管理后台获取文章内容
-class GetArticle extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Admin/Article')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.query
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        // 检查权限
-        let permission = await AccessControl.getPermission(uuid)
-        if (!permission.includes("admin") && !permission.includes("article"))
-            return res.json({
-                ...BaseStdResponse.PERMISSION_DENIED
-            })
-
-        let sql = `
-                SELECT 
-                    a.id,
-                    a.title,
-                    a.cover,
-                    a.describe,
-                    a.content,
-                    a.type,
-                    a.state,
-                    a.views,
-                    a.time,
-                    u.username AS author
-                FROM 
-                    article a
-                LEFT JOIN 
-                    users u 
-                ON 
-                    a.author = u.uuid
-                WHERE 
-                    a.id = ?
-            `
-
-        let rows = await db.query(sql, [id])
-
-        if (!rows || rows.length !== 1)
-            return res.json({
-                ...BaseStdResponse.MISSING_FILE,
-                msg: '文章不存在'
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-
-}
-
-module.exports.GetArticle = GetArticle;

+ 0 - 124
apis/Article/Admin/GetArticleList.js

@@ -1,124 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class GetArticleList extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Admin/Article/List')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, pagesize, current, type, state } = req.query
-
-        if ([uuid, session, pagesize, current, type, state].some(value => value === '' || value === null || value === undefined)) {
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 1513126
-            })
-        }
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        // 检查权限
-        let permission = await AccessControl.getPermission(uuid)
-        if (!permission.includes("admin") && !permission.includes("article"))
-            return res.json({
-                ...BaseStdResponse.PERMISSION_DENIED
-            })
-
-        // 转换参数类型
-        pagesize = parseInt(pagesize, 10)
-        current = parseInt(current, 10)
-
-        // 校验分页参数
-        if (isNaN(pagesize) || pagesize <= 0) {
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: '参数错误'
-            })
-        }
-
-        if (isNaN(current) || current <= 0) {
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: '参数错误'
-            })
-        }
-
-        // 计算分页的 offset
-        const offset = (current - 1) * pagesize
-
-        let sql = `
-            SELECT 
-                a.id,
-                a.title,
-                a.cover,
-                a.describe,
-                a.type,
-                a.time,
-                a.views,
-                a.state,
-                u.username AS author
-            FROM 
-                article a
-            LEFT JOIN 
-                users u 
-            ON 
-                a.author = u.uuid
-            WHERE 
-                a.type = ?
-                AND a.state = ?
-            ORDER BY 
-                a.id DESC
-        `
-
-        // 查询文章总数,方便返回总页数
-        let countSql = `
-            SELECT COUNT(*) AS total
-            FROM article a
-            WHERE a.type = ?;
-        `
-
-        try {
-            // 获取文章列表
-            let articles = await db.query(sql, [type, state])
-
-            // 获取总记录数
-            let countResult = await db.query(countSql, [type])
-            let total = countResult[0].total;
-
-            // 计算总页数
-            const totalPages = Math.ceil(total / pagesize)
-
-            // 返回结果
-            res.json({
-                ...BaseStdResponse.OK,
-                data: articles || [],
-                pagination: {
-                    current: current,
-                    pagesize: pagesize,
-                    total: total,
-                    totalPages: totalPages
-                }
-            })
-
-        } catch (err) {
-            this.logger.error(`获取文章列表失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: '获取文章列表失败!',
-                endpoint: 153127
-            })
-        }
-    }
-}
-
-module.exports.GetArticleList = GetArticleList;

+ 0 - 77
apis/Article/Admin/PostArticle.js

@@ -1,77 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-// 发布/修改文章
-class PostArticle extends API {
-    constructor() {
-        super()
-
-        this.setPath('/Admin/Article')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-
-        let {
-            uuid,
-            session,
-            id,
-            title,
-            cover,
-            describe,
-            content,
-            type,
-            state
-        } = req.body
-
-        if ([uuid, session, title, cover, content, type].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        // 检查权限
-        let permission = await AccessControl.getPermission(uuid)
-        if (!permission.includes("admin") && !permission.includes("article"))
-            return res.json({
-                ...BaseStdResponse.PERMISSION_DENIED
-            })
-
-        const time = new Date().getTime()
-        let sql, r
-        if (!id) {
-            sql = 'INSERT INTO article (title, cover, time, content, author, state, \`describe\`, type) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'
-            r = await db.query(sql, [title, cover, time, content, uuid, state, describe, type])
-        } else {
-            sql = 'UPDATE article SET title = ?, cover = ?, content = ?, state = ?, \`describe\` = ?, type = ? WHERE id = ?'
-            r = await db.query(sql, [title, cover, content, state, describe, type, id])
-        }
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK,
-                    id: r.insertId
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '发表文章失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`发表文章失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "发表文章失败!",
-            });
-        }
-    }
-
-}
-
-module.exports.PostArticle = PostArticle;

+ 0 - 79
apis/Article/Admin/PublicArticle.js

@@ -1,79 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-// 公开/私密文章
-class PublicArticle extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Admin/Article/Public');
-        this.setMethod('POST');
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined)) {
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-            })
-        }
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session)) {
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED,
-            });
-        }
-
-        // 检查权限
-        let permission = await AccessControl.getPermission(uuid);
-        if (!permission.includes("admin") && !permission.includes("article")) {
-            return res.json({
-                ...BaseStdResponse.PERMISSION_DENIED,
-            })
-        }
-
-        try {
-            // 查询当前文章的状态
-            let [currentState] = await db.query('SELECT state FROM article WHERE id = ?', [id]);
-
-            if (!currentState) {
-                return res.json({
-                    ...BaseStdResponse.ERR,
-                    endpoint: 7894379,
-                    msg: '文章不存在!'
-                })
-            }
-
-            // 计算新的状态
-            let newState = currentState.state === 0 ? 1 : 0;
-
-            // 更新状态
-            let sql = 'UPDATE article SET state = ? WHERE id = ?';
-            let result = await db.query(sql, [newState, id]);
-
-            if (result && result.affectedRows > 0) {
-                return res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                return res.json({
-                    ...BaseStdResponse.ERR,
-                    endpoint: 7894378,
-                    msg: '修改文章状态失败!数据库错误',
-                });
-            }
-        } catch (err) {
-            this.logger.error(`修改文章状态失败!${err.stack}`)
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: "修改文章状态失败!",
-            });
-        }
-    }
-}
-
-module.exports.PublicArticle = PublicArticle

+ 0 - 64
apis/Article/GetArticle.js

@@ -1,64 +0,0 @@
-const API = require("../../lib/API");
-const db = require("../../plugin/DataBase/db");
-const { BaseStdResponse } = require("../../BaseStdResponse");
-
-class GetArticle extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Article')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { id } = req.query
-
-        if (!id) {
-            res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 153123
-            });
-            return;
-        }
-
-        let sql = 'UPDATE article SET views = views + 1 WHERE state = 1 AND id = ?'
-        await db.query(sql, [id])
-
-        sql = `
-                SELECT 
-                    a.id,
-                    a.title,
-                    a.cover,
-                    a.\`describe\`,
-                    a.content,
-                    a.type,
-                    a.views,
-                    a.time,
-                    u.username AS author
-                FROM 
-                    article a
-                LEFT JOIN 
-                    users u 
-                ON 
-                    a.author = u.uuid
-                WHERE 
-                    a.state = 1 AND a.id = ?
-            `
-
-        let rows = await db.query(sql, [id])
-
-        if (!rows || rows.length !== 1)
-            return res.json({
-                ...BaseStdResponse.MISSING_FILE,
-                msg: '文章不存在或无查看权限'
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-
-}
-
-module.exports.GetArticle = GetArticle;

+ 0 - 109
apis/Article/GetArticleList.js

@@ -1,109 +0,0 @@
-const API = require("../../lib/API");
-const db = require("../../plugin/DataBase/db");
-const { BaseStdResponse } = require("../../BaseStdResponse");
-
-class GetArticleList extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Article/List')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { pagesize, current, type } = req.query;
-
-        if ([pagesize, current, type].some(value => value === '' || value === null || value === undefined)) {
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 1513126
-            })
-        }
-
-        // 校验分页参数
-        if (isNaN(pagesize) || pagesize <= 0) {
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: '参数错误'
-            })
-        }
-
-        if (isNaN(current) || current <= 0) {
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: '参数错误'
-            })
-        }
-
-        // 计算分页的 offset
-        let offset = (current - 1) * pagesize
-
-        pagesize = parseInt(pagesize, 10)
-        offset = parseInt(offset, 10)
-
-        let sql = `
-            SELECT 
-                a.id,
-                a.title,
-                a.\`describe\`,
-                a.cover,
-                a.type,
-                a.views,
-                a.time,
-                u.username AS author
-            FROM 
-                article a
-            LEFT JOIN 
-                users u 
-            ON 
-                a.author = u.uuid
-            WHERE 
-                a.state = 1 
-                AND a.type = ?
-            ORDER BY 
-                a.id DESC
-        `
-
-        // 查询文章总数,方便返回总页数
-        let countSql = `
-            SELECT COUNT(*) AS total
-            FROM article a
-            WHERE a.state = 1 
-              AND a.type = ?;
-        `
-
-        try {
-            // 获取文章列表
-            let articles = await db.query(sql, [type])
-
-            // 获取总记录数
-            let countResult = await db.query(countSql, [type])
-            let total = countResult[0].total;
-
-            // 计算总页数
-            const totalPages = Math.ceil(total / pagesize)
-
-            // 返回结果
-            res.json({
-                ...BaseStdResponse.OK,
-                data: articles || [],
-                pagination: {
-                    current: current,
-                    pagesize: pagesize,
-                    total: total,
-                    totalPages: totalPages
-                }
-            })
-
-        } catch (err) {
-            this.logger.error(`获取文章列表失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: '获取文章列表失败!',
-                endpoint: 153127
-            })
-        }
-    }
-}
-
-module.exports.GetArticleList = GetArticleList;

+ 0 - 116
apis/Corn/StartPowerCheck.js

@@ -1,116 +0,0 @@
-const API = require("../../lib/API.js")
-const db = require('../../plugin/DataBase/db.js')
-const axios = require("axios")
-const EmailTemplate = require('../../plugin/Email/emailTemplate')
-const { BaseStdResponse } = require("../../BaseStdResponse.js")
-
-class StartPowerCheck extends API {
-    constructor() {
-        super()
-        this.noEncrypt()
-        this.setPath('/Corn/StartPowerCheck')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        try {
-            res.json({ ...BaseStdResponse.OK })
-
-            this.logger.info('开始执行电费提醒任务')
-
-            const sql = 'SELECT id, email, balance, lowest, area, building, room, is_notice FROM power_task'
-            const tasks = await db.query(sql)
-
-            if (!tasks) {
-                this.logger.error('获取电费提醒任务失败!')
-                return
-            }
-
-            for (const item of tasks) {
-                const { id, email, balance, lowest, area, building, room, is_notice } = item
-                this.logger.info(`${building}-${room} 开始电费查询余额`)
-
-                try {
-                    const endpoint = `https://hqpay.ctbu.edu.cn/weixin/ashx/frmuser.ashx?test=lastlist&pid=${room}&dyid=${building}`
-                    const response = await axios.get(endpoint, { proxy: false, timeout: 8000 })
-
-                    if (!response || !response.data || !response.data[0]) {
-                        this.logger.error('获取电费信息失败!返回数据:' + (response && response.data ? JSON.stringify(response.data) : 'no-response'))
-                        continue
-                    }
-
-                    const now_balance_raw = response.data[0][1]
-                    const now_change_time = response.data[0][2]
-
-                    this.logger.info(`${building}-${room} 电费余额:${now_balance_raw},扣费时间:${now_change_time}`)
-                    const time = Date.now()
-
-                    const nowBalanceNum = parseFloat(String(now_balance_raw).replace(/[^0-9.-]/g, ''))
-                    const balanceNum = parseFloat(String(balance).replace(/[^0-9.-]/g, '')) || 0
-                    const lowestNum = parseFloat(String(lowest).replace(/[^0-9.-]/g, '')) || 0
-
-                    if (Number.isNaN(nowBalanceNum)) {
-                        this.logger.error(`${building}-${room}:解析当前余额失败,原值:${now_balance_raw}`)
-                        continue
-                    }
-
-                    // 如果余额未变,跳过当前任务
-                    if (nowBalanceNum === balanceNum) {
-                        continue
-                    }
-
-                    // 记录变更并更新任务表余额
-                    const insertSql = 'INSERT INTO power_change_record (time, balance, old_balance, change_time, task_id) VALUES (?, ?, ?, ?, ?)'
-                    const insertRows = await db.query(insertSql, [time, nowBalanceNum, balanceNum, now_change_time, id])
-
-                    const updateSql = 'UPDATE power_task SET update_time = ?, balance = ?, koufei_date = ? WHERE id = ?'
-                    const updateRows = await db.query(updateSql, [time, nowBalanceNum, now_change_time, id])
-
-                    if (!insertRows || insertRows.affectedRows !== 1 || !updateRows || updateRows.affectedRows !== 1) {
-                        this.logger.error(`${building}-${room}:更新电费信息失败! 数据库错误`)
-                        continue
-                    }
-
-                    // 余额低于阈值且尚未通知 -> 发邮件并置 is_notice = 1
-                    if (nowBalanceNum < balanceNum && nowBalanceNum <= lowestNum && Number(is_notice) === 0) {
-                        const data = { now_balance: nowBalanceNum, now_change_time, lowest: lowestNum, area, building, room }
-                        try {
-                            await EmailTemplate.powerCheck(email, data)
-                            const upd = await db.query('UPDATE power_task SET is_notice = 1 WHERE id = ?', [id])
-                            if (!upd || upd.affectedRows !== 1) {
-                                this.logger.error(`${building}-${room}:更新 is_notice=1 失败`)
-                            }
-                        } catch (err) {
-                            this.logger.error(`${building}-${room}:发送邮件失败:${err.stack || err}`)
-                        }
-                    }
-
-                    // 充值后恢复未提醒状态
-                    if (nowBalanceNum > balanceNum && nowBalanceNum > lowestNum) {
-                        const upd = await db.query('UPDATE power_task SET is_notice = 0 WHERE id = ?', [id])
-                        if (!upd || upd.affectedRows !== 1) {
-                            this.logger.error(`${building}-${room}:更新 is_notice=0 失败`)
-                        }
-                    }
-                } catch (error) {
-                    this.logger.error(`获取电费信息失败!${error.stack || error}`)
-                    continue
-                }
-            }
-
-            // 删除180天前的记录
-            const delete_time = new Date().getTime() - 15552000000
-
-            let deleteSql = 'DELETE FROM power_change_record WHERE time < ?'
-            let deleteRows = await db.query(deleteSql, [delete_time])
-            if (!deleteRows) {
-                this.logger.error(`删除电费变更记录失败`)
-                return
-            }
-        } catch (error) {
-            this.logger.error(error)
-        }
-    }
-}
-
-module.exports.StartPowerCheck = StartPowerCheck

+ 0 - 74
apis/Corn/UpdateState.js

@@ -1,74 +0,0 @@
-const API = require("../../lib/API.js")
-const db = require('../../plugin/DataBase/db.js')
-const { BaseStdResponse } = require("../../BaseStdResponse.js")
-const {
-    probeSetZone,
-    isProbeSetZoneOk,
-    getProbeFailMessage
-} = require('../../plugin/Lepao/runforgeSetZoneProbe')
-
-const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms))
-
-class UpdateState extends API {
-    constructor() {
-        super()
-
-        this.noEncrypt()
-        this.setPath('/Corn/UpdateState')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        try {
-            res.json({
-                ...BaseStdResponse.OK
-            })
-
-            this.logger.info('开始更新乐跑账号登录状态')
-
-            let sql = `SELECT id, uid, token, school_id, name, student_num, userAgent FROM lepao_account WHERE state = 0 AND auto_run = 1 AND token IS NOT NULL`
-
-            let r = await db.query(sql)
-            if (!r)
-                return this.logger.error('更新乐跑账号登录状态失败!')
-
-            for (const item of r) {
-                const { name, student_num, token, uid, school_id, userAgent } = item
-                this.logger.info(`${name}(${student_num})开始更新乐跑登录状态`)
-
-                await sleep(2000)
-
-                try {
-                    const data = await probeSetZone({
-                        uid,
-                        token,
-                        school_id,
-                        student_num,
-                        random_id: 1,
-                        userAgent
-                    })
-
-                    this.logger.info(`${student_num}更新乐跑登录状态返回结果: ${JSON.stringify(data)}`)
-
-                    if (!isProbeSetZoneOk(data)) {
-                        this.logger.info(`${name}(${student_num})数据获取失败,不更新`)
-                        continue
-                    }
-
-                    const updateSql = 'UPDATE lepao_account SET state = 1 WHERE student_num  = ?'
-                    await db.query(updateSql, [student_num])
-
-                    this.logger.info(`${name}(${student_num})数据获取成果,状态更新为正常`)
-                } catch (err) {
-                    this.logger.error(`${name}(${student_num})更新乐跑登录状态失败:${err.message || err}`)
-                }
-            }
-
-            this.logger.info('更新乐跑账号登录状态完成')
-        } catch (error) {
-            this.logger.error(error)
-        }
-    }
-}
-
-module.exports.UpdateState = UpdateState

+ 0 - 82
apis/Corn/UpdateStateAll.js

@@ -1,82 +0,0 @@
-const API = require("../../lib/API.js")
-const db = require('../../plugin/DataBase/db.js')
-const { BaseStdResponse } = require("../../BaseStdResponse.js")
-const {
-    probeSetZone,
-    isProbeSetZoneOk,
-    getProbeFailMessage
-} = require('../../plugin/Lepao/runforgeSetZoneProbe')
-
-const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms))
-
-class UpdateStateAll extends API {
-    constructor() {
-        super()
-
-        this.noEncrypt()
-        this.setPath('/Corn/UpdateStateAll')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        try {
-            res.json({
-                ...BaseStdResponse.OK
-            })
-
-            this.logger.info('开始更新乐跑账号登录状态')
-
-            let sql = `SELECT id, uid, token, school_id, name, student_num, userAgent FROM lepao_account WHERE token IS NOT NULL`
-
-            let r = await db.query(sql)
-            if (!r)
-                return this.logger.error('更新乐跑账号登录状态失败!')
-
-            for (const item of r) {
-                const { name, student_num, token, uid, school_id, userAgent } = item
-                this.logger.info(`${name}(${student_num})开始更新乐跑登录状态`)
-
-                await sleep(2000)
-
-                try {
-                    const data = await probeSetZone({
-                        uid,
-                        token,
-                        school_id,
-                        student_num,
-                        random_id: 1,
-                        userAgent
-                    })
-
-                    this.logger.info(`${student_num}更新乐跑登录状态返回结果: ${JSON.stringify(data)}`)
-
-                    if (!isProbeSetZoneOk(data)) {
-                        const msg = getProbeFailMessage(data)
-                        if (msg && msg.includes('重新登录')) {
-                            const failSql = 'UPDATE lepao_account SET state = 0 WHERE student_num  = ?'
-                            await db.query(failSql, [student_num])
-                            this.logger.info(`${name}(${student_num})状态更新为待登录`)
-                        } else {
-                            this.logger.info(`${name}(${student_num})数据获取失败`)
-                        }
-
-                        continue
-                    }
-
-                    const okSql = 'UPDATE lepao_account SET state = 1 WHERE student_num  = ?'
-                    await db.query(okSql, [student_num])
-
-                    this.logger.info(`${name}(${student_num})状态更新为正常`)
-                } catch (err) {
-                    this.logger.error(`${name}(${student_num})更新乐跑登录状态失败:${err.message || err}`)
-                }
-            }
-
-            this.logger.info('更新乐跑账号登录状态完成')
-        } catch (error) {
-            this.logger.error(error)
-        }
-    }
-}
-
-module.exports.UpdateStateAll = UpdateStateAll

+ 0 - 92
apis/Data/IndexData.js

@@ -1,92 +0,0 @@
-const API = require("../../lib/API");
-const db = require("../../plugin/DataBase/db");
-const AccessControl = require("../../lib/AccessControl");
-const { BaseStdResponse } = require("../../BaseStdResponse");
-
-class IndexData extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Admin/IndexData')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined)) {
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 1513126
-            })
-        }
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = `
-                    SELECT
-                        (SELECT COUNT(*) FROM jw_account WHERE create_user = ?) AS accounts,
-                        (SELECT COUNT(*) FROM ic_rule) AS rules
-                `
-
-        try {
-            let r = await db.query(sql, [uuid])
-            if (!r)
-                return res.json({
-                    ...BaseStdResponse.DATABASE_ERR
-                })
-            
-            let { accounts, rules } = r[0]
-
-            sql = `
-            SELECT 
-                a.id,
-                a.title,
-                a.\`describe\`,
-                a.views,
-                a.type,
-                a.time,
-                u.username AS author
-            FROM 
-                article a
-            LEFT JOIN 
-                users u 
-            ON 
-                a.author = u.uuid
-            WHERE 
-                a.state = 1 
-                AND a.type = 'news'
-            ORDER BY 
-                a.id DESC
-            LIMIT 9
-        `
-
-            r = await db.query(sql)
-            if(!r)
-                return res.json({
-                    ...BaseStdResponse.DATABASE_ERR
-                })
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: {
-                    accounts,
-                    rules,
-                    article: r
-                }
-            })
-
-        } catch (err) {
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: `获取数据失败!${err.message || ''}`
-            })
-        }
-    }
-}
-
-module.exports.IndexData = IndexData;

+ 0 - 52
apis/IC/IcInfo/GetOpenScope.js

@@ -1,52 +0,0 @@
-const API = require("../../../lib/API");
-const AccessControl = require("../../../lib/AccessControl");
-const ic = require("../../../lib/IC/IC").IC;
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class GetOpenScope extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/GetOpenScope')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, username, roomId } = req.query
-
-        if ([uuid, session, username, roomId].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const password = await AccessControl.checkJwAccount(uuid, username)
-        if(!password)
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: '教务系统账号未绑定或未激活'
-            })
-
-        try {
-            const cookie = await ic.getCookie(username, password)
-            const data = await ic.getOpenScope(cookie, roomId)
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data
-            })
-        } catch (error) {
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: error.message || '获取位置信息失败!请稍后再试'
-            })
-        }
-    }
-}
-
-module.exports.GetOpenScope = GetOpenScope;

+ 0 - 56
apis/IC/IcInfo/GetSeatInfo.js

@@ -1,56 +0,0 @@
-const API = require("../../../lib/API");
-const AccessControl = require("../../../lib/AccessControl");
-const ic = require("../../../lib/IC/IC").IC;
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class GetSeatInfo extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/GetSeatInfo')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, username, roomId, date } = req.query
-
-        if ([uuid, session, username, roomId, date].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const password = await AccessControl.checkJwAccount(uuid, username)
-        if(!password)
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: '教务系统账号未绑定或未激活'
-            })
-
-        try {
-            let cookie = await ic.getCookie(username, password)
-            let data = await ic.getSeatInfo(cookie, roomId, date)
-            if(data.code === 300) {
-                cookie = await ic.resetCookie(username, password)
-                data = await ic.getSeatInfo(cookie, roomId, date)
-            }
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data
-            })
-        } catch (error) {
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: error.message || '获取位置信息失败!请稍后再试'
-            })
-        }
-    }
-}
-
-module.exports.GetSeatInfo = GetSeatInfo

+ 0 - 57
apis/IC/IcInfo/GetSeatMenu.js

@@ -1,57 +0,0 @@
-const API = require("../../../lib/API");
-const AccessControl = require("../../../lib/AccessControl");
-const ic = require("../../../lib/IC/IC").IC;
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class GetSeatMenu extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/GetSeatMenu')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, username } = req.query
-
-        if ([uuid, session, username].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const password = await AccessControl.checkJwAccount(uuid, username)
-        if (!password)
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: '教务系统账号未绑定或未激活'
-            })
-
-        try {
-            const cookie = await ic.getCookie(username, password)
-            const data = await ic.getSeatMenu(cookie)
-
-            if (data.code || data.code === 300) {
-                cookie = await ic.resetCookie(username, password)
-                data = await ic.getSeatMenu(cookie)
-            }
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data
-            })
-        } catch (error) {
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: error.message || '获取位置信息失败!请稍后再试'
-            })
-        }
-    }
-}
-
-module.exports.GetSeatMenu = GetSeatMenu;

+ 0 - 50
apis/IC/Order/OrderHistory.js

@@ -1,50 +0,0 @@
-const API = require("../../../lib/API");
-const AccessControl = require("../../../lib/AccessControl");
-const db = require('../../../plugin/DataBase/db')
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class OrderHistory extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/OrderHistory')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-
-        try {
-            let sql = 'SELECT * FROM ic_record WHERE create_user = ?'
-            let rows = await db.query(sql, [uuid])
-            if(!rows)
-                return res.json({
-                    ...BaseStdResponse.DATABASE_ERR
-                })
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: rows
-            })
-        } catch (error) {
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: error.message || '获取信息失败!请稍后再试'
-            })
-        }
-    }
-}
-
-module.exports.OrderHistory = OrderHistory

+ 0 - 75
apis/IC/Rule/AddRule.js

@@ -1,75 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class AddRule extends API {
-    constructor() {
-        super()
-
-        this.setPath('/IC/Rule')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-        let {
-            uuid,
-            session,
-            id,
-            name,
-            loop,
-            mode,
-            day_of_week,
-            state,
-            users,
-            beginTime,
-            endTime
-        } = req.body
-
-        if ([uuid, session, name, loop, mode, users, beginTime, endTime].some(value => value === '' || value === null || value === undefined) || (loop && !day_of_week))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql, r
-        const time = new Date().getTime()
-
-        if (!id) {
-            sql = 'INSERT INTO ic_rule (\`name\`, create_user, create_time, \`loop\`, \`mode\`, day_of_week, users, beginTime, endTime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)'
-            r = await db.query(sql, [name, uuid, time, loop, mode, day_of_week, users, beginTime, endTime])
-        } else {
-            // 确保只有一个规则生效
-            // if(state == 1) {
-            //     sql = 'UPDATE ic_rule SET \`state\` = 0 WHERE create_user = ?'
-            //     await db.query(sql, [uuid])
-            // }
-
-            sql = 'UPDATE ic_rule SET \`name\` = ?, \`loop\` = ?, \`mode\` = ?, day_of_week = ?, update_time = ?, \`state\` = ?, users = ?, beginTime = ?, endTime = ? WHERE id = ? AND create_user = ?'
-            r = await db.query(sql, [name, loop, mode, day_of_week, time, state, users, beginTime, endTime, id, uuid])
-        }
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加规则失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`添加规则失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "添加规则失败!",
-            });
-        }
-    }
-}
-
-module.exports.AddRule = AddRule;

+ 0 - 49
apis/IC/Rule/DeleteRule.js

@@ -1,49 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class DeleteRule extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/Rule')
-        this.setMethod('DELETE')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'DELETE FROM ic_rule WHERE id = ? AND create_user = ?'
-        let r = await db.query(sql, [id, uuid])
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除规则失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`删除规则失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "删除规则失败!",
-            });
-        }
-    }
-}
-
-module.exports.DeleteRule = DeleteRule

+ 0 - 47
apis/IC/Rule/GetRule.js

@@ -1,47 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class GetRule extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/Rule')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let {
-            uuid,
-            session
-        } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'SELECT * FROM ic_rule WHERE create_user = ?'
-        let rows = await db.query(sql, [uuid])
-
-        if (!rows)
-            return res.json({
-                ...BaseStdResponse.MISSING_FILE,
-                msg: '获取规则列表失败!'
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-}
-
-module.exports.GetRule = GetRule;

+ 0 - 56
apis/IC/Seat/DeleteSeat.js

@@ -1,56 +0,0 @@
-const API = require("../../../lib/API");
-const AccessControl = require("../../../lib/AccessControl");
-const ic = require("../../../lib/IC/IC").IC;
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class DeleteSeat extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/Seat')
-        this.setMethod('delete')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, username, seatuuid } = req.body
-
-        if ([uuid, session, username, seatuuid].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const password = await AccessControl.checkJwAccount(uuid, username)
-        if(!password)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: '教务系统账号未绑定或未激活'
-            })
-
-        try {
-            let cookie = await ic.getCookie(username, password)
-            let resdata = await ic.deleteSeat(cookie, seatuuid)
-            if (resdata.code === 300) {
-                cookie = await ic.resetCookie(username, password)
-                resdata = await ic.deleteSeat(cookie, seatuuid)
-            }
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: resdata.data
-            })
-        } catch (error) {
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: error.message || '取消预约失败!请稍后再试'
-            })
-        }
-    }
-}
-
-module.exports.DeleteSeat = DeleteSeat

+ 0 - 56
apis/IC/Seat/EndAhead.js

@@ -1,56 +0,0 @@
-const API = require("../../../lib/API");
-const AccessControl = require("../../../lib/AccessControl");
-const ic = require("../../../lib/IC/IC").IC;
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class EndAhead extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/Seat/EndAhead')
-        this.setMethod('post')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, username, seatuuid } = req.body
-
-        if ([uuid, session, username, seatuuid].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const password = await AccessControl.checkJwAccount(uuid, username)
-        if(!password)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: '教务系统账号未绑定或未激活'
-            })
-
-        try {
-            let cookie = await ic.getCookie(username, password)
-            let resdata = await ic.endAhead(cookie, seatuuid)
-            if (resdata.code === 300) {
-                cookie = await ic.resetCookie(username, password)
-                resdata = await ic.endAhead(cookie, seatuuid)
-            }
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: resdata.data
-            })
-        } catch (error) {
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: error.message || '取消预约失败!请稍后再试'
-            })
-        }
-    }
-}
-
-module.exports.EndAhead = EndAhead

+ 0 - 60
apis/IC/Seat/MyOrder.js

@@ -1,60 +0,0 @@
-const API = require("../../../lib/API");
-const AccessControl = require("../../../lib/AccessControl");
-const ic = require("../../../lib/IC/IC").IC;
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class MyOrder extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/Seat/MyOrder')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, username, beginDate, endDate, page, pageNum } = req.body
-
-        if ([uuid, session, username, beginDate, endDate, page, pageNum].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const password = await AccessControl.checkJwAccount(uuid, username)
-        if (!password)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: '教务系统账号未绑定或未激活'
-            })
-
-        const data = {
-            beginDate, endDate, page, pageNum
-        }
-
-        try {
-            let cookie = await ic.getCookie(username, password)
-            let resdata = await ic.getMyOrder(cookie, data)
-            if (resdata.code === 300) {
-                cookie = await ic.resetCookie(username, password)
-                resdata = await ic.getMyOrder(cookie, data)
-            }
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: resdata.data
-            })
-        } catch (error) {
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: error.message || '获取信息失败!请稍后再试'
-            })
-        }
-    }
-}
-
-module.exports.MyOrder = MyOrder

+ 0 - 60
apis/IC/Seat/OrderSeat.js

@@ -1,60 +0,0 @@
-const API = require("../../../lib/API");
-const AccessControl = require("../../../lib/AccessControl");
-const ic = require("../../../lib/IC/IC").IC;
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class OrderSeat extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/Seat')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, username, resvDev, resvBeginTime, resvEndTime } = req.body
-
-        if ([uuid, session, username, resvDev, resvBeginTime, resvEndTime].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const password = await AccessControl.checkJwAccount(uuid, username)
-        if(!password)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: '教务系统账号未绑定或未激活'
-            })
-
-        const data = {
-            resvDev, resvBeginTime, resvEndTime
-        }
-
-        try {
-            let cookie = await ic.getCookie(username, password)
-            let resdata = await ic.orderSeat(cookie, data)
-            if (resdata.code === 300) {
-                cookie = await ic.resetCookie(username, password)
-                resdata = await ic.orderSeat(cookie, data)
-            }
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: resdata.data
-            })
-        } catch (error) {
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: error.message || '预定座位失败!请稍后再试'
-            })
-        }
-    }
-}
-
-module.exports.OrderSeat = OrderSeat

+ 0 - 74
apis/IC/Star/AddStar.js

@@ -1,74 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class AddStar extends API{
-    constructor(){
-        super()
-
-        this.setPath('/IC/Star')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res){
-
-        let {
-            uuid,
-            session,
-            devId,
-            id,
-            state,
-            name,
-            index
-        } = req.body
-
-        if ([uuid, session, devId, name].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql, r
-        const time = new Date().getTime()
-
-        if(!id) {
-            sql = 'SELECT id FROM ic_star WHERE create_user = ? AND devId = ?'
-            const rows = await db.query(sql, [uuid, devId])
-            if (!rows)
-                return res.json({ ...BaseStdResponse.ERR, endpoint: 794378, msg: '添加志愿失败!数据库错误' })
-            if(rows.length > 0)
-                return res.json({ ...BaseStdResponse.ERR, endpoint: 789378, msg: '您已添加过该位置' })
-
-            sql = 'INSERT INTO ic_star (devId, create_user, create_time, \`name\`) VALUES (?, ?, ?, ?)'
-            r = await db.query(sql, [devId, uuid, time, name])
-        } else {
-            sql = 'UPDATE ic_star SET devId = ?, state = ?, \`name\` = ?, \`index\` = ? WHERE id = ? AND create_user = ?'
-            r = await db.query(sql, [devId, state, name, index, id, uuid])
-        }
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加志愿失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`添加志愿失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "添加志愿失败!",
-            });
-        }
-    }
-
-}
-
-module.exports.AddStar = AddStar;

+ 0 - 66
apis/IC/Star/AddStarGroup.js

@@ -1,66 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class AddStarGroup extends API{
-    constructor(){
-        super()
-
-        this.setPath('/IC/StarGroup')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res){
-
-        let {
-            uuid,
-            session,
-            id,
-            seats,
-            state,
-            name,
-            index
-        } = req.body
-
-        if ([uuid, session, seats, name, state].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql, r
-        const time = new Date().getTime()
-
-        if(!id) {
-            sql = 'INSERT INTO ic_star_group (seats, create_user, create_time, \`name\`, state) VALUES (?, ?, ?, ?, ?)'
-            r = await db.query(sql, [seats, uuid, time, name, state])
-        } else {
-            sql = 'UPDATE ic_star_group SET seats = ?, state = ?, \`name\` = ?, \`index\` = ?, update_time = ? WHERE id = ? AND create_user = ?'
-            r = await db.query(sql, [seats, state, name, index, time, id, uuid])
-        }
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加志愿组失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`添加志愿组失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "添加志愿组失败!",
-            });
-        }
-    }
-}
-
-module.exports.AddStarGroup = AddStarGroup

+ 0 - 49
apis/IC/Star/DeleteStar.js

@@ -1,49 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class DeleteStar extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/Star')
-        this.setMethod('DELETE')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'DELETE FROM ic_star WHERE id = ? AND create_user = ?'
-        let r = await db.query(sql, [id, uuid])
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除志愿失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`删除志愿失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "删除志愿失败!",
-            });
-        }
-    }
-}
-
-module.exports.DeleteStar = DeleteStar;

+ 0 - 49
apis/IC/Star/DeleteStarGroup.js

@@ -1,49 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class DeleteStarGroup extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/StarGroup')
-        this.setMethod('DELETE')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'DELETE FROM ic_star_group WHERE id = ? AND create_user = ?'
-        let r = await db.query(sql, [id, uuid])
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除志愿组失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`删除志愿组失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "删除志愿组失败!",
-            });
-        }
-    }
-}
-
-module.exports.DeleteStarGroup = DeleteStarGroup;

+ 0 - 47
apis/IC/Star/GetStar.js

@@ -1,47 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class GetStar extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/Star')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let {
-            uuid,
-            session
-        } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'SELECT * FROM ic_star WHERE create_user = ?'
-        let rows = await db.query(sql, [uuid])
-
-        if (!rows)
-            return res.json({
-                ...BaseStdResponse.MISSING_FILE,
-                msg: '获取志愿列表失败!'
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-}
-
-module.exports.GetStar = GetStar;

+ 0 - 47
apis/IC/Star/GetStarGroup.js

@@ -1,47 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class GetStarGroup extends API {
-    constructor() {
-        super();
-
-        this.setPath('/IC/StarGroup')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let {
-            uuid,
-            session
-        } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'SELECT * FROM ic_star_group WHERE create_user = ?'
-        let rows = await db.query(sql, [uuid])
-
-        if (!rows)
-            return res.json({
-                ...BaseStdResponse.MISSING_FILE,
-                msg: '获取志愿组列表失败!'
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-}
-
-module.exports.GetStarGroup = GetStarGroup;

+ 0 - 77
apis/JW/ActiveAccount.js

@@ -1,77 +0,0 @@
-const API = require("../../lib/API.js");
-const db = require("../../plugin/DataBase/db.js");
-const AccessControl = require("../../lib/AccessControl");
-const ic = require("../../lib/IC/IC").IC;
-const { BaseStdResponse } = require("../../BaseStdResponse.js");
-
-// 激活教务账号
-class ActiveAccount extends API {
-    constructor() {
-        super();
-
-        this.setPath('/JW/ActiveAccount')
-        this.setMethod('POST')
-    }
-
-    async checkJwAccount(uuid, username) {
-        const sql = 'SELECT password FROM jw_account WHERE create_user = ? AND username = ?'
-        const rows = await db.query(sql, [uuid, username]);
-        if (!rows || rows.length !== 1 || !rows[0].password)
-            return false
-        return rows[0].password;
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, username } = req.body
-
-        if ([uuid, session, username].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 1513126
-            })
-
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const password = await this.checkJwAccount(uuid, username)
-        if (!password)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: '教务系统账号未绑定'
-            })
-
-        try {
-            let cookie = await ic.resetCookie(username, password)
-            let user = await ic.getUserInfo(cookie)
-            if (user.code === 300) {
-                cookie = await ic.resetCookie(username, password)
-                user = await ic.getUserInfo(cookie)
-            }
-
-            const { trueName, className, deptName } = user
-
-            const time = new Date().getTime()
-
-            let sql = 'UPDATE jw_account SET state = 1, update_time = ?, realname = ?, className = ?, deptName = ? WHERE username = ?'
-
-            let r = await db.query(sql, [time, trueName, className, deptName, username])
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK,
-                    id: r.insertId
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '激活账号失败!数据库错误' })
-            }
-        } catch (err) {
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: `激活账号失败!${err.message || ''}`,
-            });
-        }
-    }
-}
-
-module.exports.ActiveAccount = ActiveAccount

+ 0 - 59
apis/JW/AddAccount.js

@@ -1,59 +0,0 @@
-const API = require("../../lib/API.js");
-const db = require("../../plugin/DataBase/db.js");
-const { BaseStdResponse } = require("../../BaseStdResponse.js");
-const AccessControl = require("../../lib/AccessControl");
-
-class GetType extends API {
-    constructor() {
-        super();
-
-        this.setPath('/JW/Account')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, username, password, id } = req.body
-
-        if ([uuid, session, username, password].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 1513126
-            })
-
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const time = new Date().getTime()
-        password = atob(password)
-
-        let sql, r
-        if (!id) {
-            sql = 'INSERT INTO jw_account (username, password, create_user, create_time) VALUES (?, ?, ?, ?)'
-            r = await db.query(sql, [username, password, uuid, time])
-        } else {
-            sql = 'UPDATE jw_account SET username = ?, password = ?, update_time = ?, state = ? WHERE id = ?'
-            r = await db.query(sql, [username, password, time, 0, id])
-        }
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK,
-                    id: r.insertId
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加教务系统账号失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`添加教务系统账号失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "添加教务系统账号失败!",
-            });
-        }
-    }
-}
-
-module.exports.GetType = GetType;

+ 0 - 49
apis/JW/DeleteAccount.js

@@ -1,49 +0,0 @@
-const API = require("../../lib/API");
-const db = require("../../plugin/DataBase/db");
-const AccessControl = require("../../lib/AccessControl");
-const { BaseStdResponse } = require("../../BaseStdResponse");
-
-class DeleteAccount extends API {
-    constructor() {
-        super();
-
-        this.setPath('/JW/Account')
-        this.setMethod('DELETE')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'DELETE FROM jw_account WHERE id = ? AND create_user = ?'
-        let r = await db.query(sql, [id, uuid])
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除账号失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`删除账号失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "删除账号失败!",
-            });
-        }
-    }
-}
-
-module.exports.DeleteAccount = DeleteAccount

+ 0 - 63
apis/JW/GetAccount.js

@@ -1,63 +0,0 @@
-const API = require("../../lib/API.js");
-const db = require("../../plugin/DataBase/db.js");
-const { BaseStdResponse } = require("../../BaseStdResponse.js");
-const AccessControl = require("../../lib/AccessControl");
-
-class GetAccount extends API {
-    constructor() {
-        super();
-
-        this.setPath('/JW/Account')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 1513126
-            })
-
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = `
-                SELECT 
-                    a.id,
-                    a.username,
-                    a.realname,
-                    a.deptName,
-                    a.className,
-                    a.create_time,
-                    a.update_time,
-                    a.state,
-                    u.username AS create_user
-                FROM 
-                    jw_account a
-                LEFT JOIN 
-                    users u 
-                ON 
-                    a.create_user = u.uuid
-                WHERE 
-                    a.create_user = ?
-            `
-
-        let rows = await db.query(sql, [uuid])
-
-        if (!rows)
-            return res.json({
-                ...BaseStdResponse.DATABASE_ERR
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-}
-
-module.exports.GetAccount = GetAccount;

+ 0 - 108
apis/Lepao/Face/BeginFaceReco.js

@@ -1,108 +0,0 @@
-const API = require("../../../lib/API.js")
-const db = require("../../../plugin/DataBase/db.js")
-const axios = require('axios')
-const { v4: uuidv4 } = require('uuid')
-const Redis = require('../../../plugin/DataBase/Redis')
-const { BaseStdResponse } = require("../../../BaseStdResponse.js")
-
-class BeginFaceReco extends API {
-    constructor() {
-        super()
-
-        this.setPath('/Face/BeginFaceReco')
-        this.setMethod('POST')
-    }
-
-    /**
-     * 获取图片并转换为Base64
-     * @param {string} url - 图片链接
-     * @returns {Promise<string>} - Base64字符串
-     */
-    async getImageBase64(url) {
-        try {
-            const response = await axios.get(url, {
-                proxy: false,
-                responseType: "arraybuffer"
-            })
-            const base64 = Buffer.from(response.data, "binary").toString("base64")
-
-            // 获取图片MIME类型
-            const contentType = response.headers["content-type"]
-            return `data:${contentType};base64,${base64}`
-        } catch (error) {
-            throw new Error(`获取图片失败: ${error.message}`)
-        }
-    }
-
-    async onRequest(req, res) {
-        let { bind_code } = req.body
-
-        if ([bind_code].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        try {
-            let sql = `
-                SELECT
-                    f.student_num,
-                    l.name,
-                    l.user_avatar,
-                    l.academy_name,
-                    l.state
-                FROM 
-                    lepao_extra f
-                JOIN
-                    lepao_account l
-                ON
-                    f.student_num = l.student_num
-                WHERE
-                    f.bind_code  = ?
-            `
-            let rows = await db.query(sql, [bind_code])
-            if (!rows)
-                return res.json({
-                    ...BaseStdResponse.DATABASE_ERR,
-                    msg: '获取用户人脸信息失败,请重试'
-                })
-            if (rows.length !== 1)
-                return res.json({
-                    ...BaseStdResponse.ERR,
-                    msg: '采集码输入错误'
-                })
-            if(rows[0].state !== 1)
-                return res.json({
-                    ...BaseStdResponse.ERR,
-                    msg: '账号状态为未登录,请用乐跑登录器更新账号状态后再进行人脸识别'
-                })
-
-            const face_img = await this.getImageBase64('https://lepao-cloud.xxoo365.top/view.php/a517e6d3b4cf9834c99ff819b473d58d.jpg')
-            // 此时应该从乐跑获取人脸照片
-
-            const key = uuidv4()
-
-            await Redis.set(`faceReco:${rows[0].student_num}`, key, {
-                EX: 1800
-            })
-
-            let resData = {
-                ...rows[0],
-                key,
-                face_img
-            }
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: resData
-            })
-        } catch (error) {
-            this.logger.error(`获取用户人脸信息失败。${error.stack}`)
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: '获取用户人脸信息失败,请重试'
-            })
-        }
-    }
-}
-
-module.exports.BeginFaceReco = BeginFaceReco

+ 0 - 81
apis/Power/AddAccount.js

@@ -1,81 +0,0 @@
-const API = require("../../lib/API.js")
-const db = require("../../plugin/DataBase/db.js")
-const axios = require("axios")
-const { BaseStdResponse } = require("../../BaseStdResponse.js")
-const AccessControl = require("../../lib/AccessControl.js")
-
-class AddAccount extends API {
-    constructor() {
-        super()
-
-        this.setPath('/Power/Account')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, area, building, room, email, lowest, notes, id } = req.body
-
-        if ([uuid, session, area, building, lowest, room].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        const time = new Date().getTime()
-
-        let sql, r
-
-        if (!id) {
-            let balance, koufei_date
-            try {
-                const endpoint = `https://hqpay.ctbu.edu.cn/weixin/ashx/frmuser.ashx?test=lastlist&pid=${room}&dyid=${building}`
-                const res = await axios.get(endpoint, {
-                    proxy: false
-                })
-
-                if (!res || !res.data || !res.data[0])
-                    return res.json({
-                        ...BaseStdResponse.ERR,
-                        msg: '获取电费信息失败!请稍后再试'
-                    })
-                balance = res.data[0][1]
-                koufei_date = res.data[0][2]
-
-            } catch (error) {
-                this.logger.error(`获取电费信息失败!${error.stack}`)
-                return res.json({
-                    ...BaseStdResponse.ERR,
-                    msg: '获取电费信息失败!请稍后再试'
-                })
-            }
-
-            sql = 'INSERT INTO power_task (create_user, create_time, update_time, area, building, room, email, lowest, notes, balance, koufei_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
-            r = await db.query(sql, [uuid, time, time, area, building, room, email, lowest, notes ?? '', balance, koufei_date])
-        } else {
-            sql = 'UPDATE power_task SET area = ?, building = ?, room = ?, email = ?, lowest = ?, notes = ?, is_notice = 0 WHERE id = ?'
-            r = await db.query(sql, [area, building, room, email, lowest, notes ?? '', id])
-        }
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                return res.json({ ...BaseStdResponse.ERR, msg: '添加电费提醒任务失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`添加电费提醒任务失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "添加电费提醒任务失败!",
-            })
-        }
-    }
-}
-
-module.exports.AddAccount = AddAccount

+ 0 - 52
apis/Power/DeleteAccount.js

@@ -1,52 +0,0 @@
-const API = require("../../lib/API")
-const db = require("../../plugin/DataBase/db")
-const AccessControl = require("../../lib/AccessControl")
-const { BaseStdResponse } = require("../../BaseStdResponse")
-
-class DeleteAccount extends API {
-    constructor() {
-        super()
-
-        this.setPath('/Power/Account')
-        this.setMethod('DELETE')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'DELETE FROM power_task WHERE create_user = ? AND id = ?'
-        let r = await db.query(sql, [uuid, id])
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                return res.json({
-                    ...BaseStdResponse.ERR,
-                    msg: '删除电费提醒任务失败!数据库错误'
-                })
-            }
-        } catch (err) {
-            this.logger.error(`删除电费提醒任务失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "删除电费提醒任务失败!",
-            })
-        }
-    }
-}
-
-module.exports.DeleteAccount = DeleteAccount

+ 0 - 52
apis/Power/GetAccount.js

@@ -1,52 +0,0 @@
-const API = require("../../lib/API.js");
-const db = require("../../plugin/DataBase/db.js");
-const { BaseStdResponse } = require("../../BaseStdResponse.js");
-const AccessControl = require("../../lib/AccessControl.js");
-
-class GetAccount extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Power/Account')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 1513126
-            })
-
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = `
-                SELECT 
-                    *
-                FROM 
-                    power_task
-                WHERE 
-                    create_user = ?
-                ORDER BY id DESC
-            `
-
-        let rows = await db.query(sql, [uuid])
-
-        if (!rows)
-            return res.json({
-                ...BaseStdResponse.DATABASE_ERR
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-}
-
-module.exports.GetAccount = GetAccount

+ 0 - 51
apis/Power/GetChangeRecord.js

@@ -1,51 +0,0 @@
-const API = require("../../lib/API.js");
-const db = require("../../plugin/DataBase/db.js");
-const { BaseStdResponse } = require("../../BaseStdResponse.js");
-const AccessControl = require("../../lib/AccessControl.js");
-
-class GetAccount extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Power/GetChangeRecord')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = `
-                SELECT 
-                    *
-                FROM 
-                    power_change_record
-                WHERE 
-                    task_id = ?
-                ORDER BY id DESC
-            `
-
-        let rows = await db.query(sql, [id])
-
-        if (!rows)
-            return res.json({
-                ...BaseStdResponse.DATABASE_ERR
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-}
-
-module.exports.GetAccount = GetAccount

+ 0 - 51
apis/Power/GetPowerData.js

@@ -1,51 +0,0 @@
-const API = require("../../lib/API.js")
-const axios = require("axios")
-const { BaseStdResponse } = require("../../BaseStdResponse.js")
-
-// 获取楼栋
-class GetDyList extends API {
-    constructor() {
-        super()
-
-        this.setPath("/Power/GetPowerData")
-        this.setMethod("POST")
-    }
-
-    async onRequest(req, res) {
-        try {
-            const { type, pid } = req.body
-            if ([type].some(value => value === '' || value === null || value === undefined))
-                return res.json({
-                    ...BaseStdResponse.MISSING_PARAMETER
-                })
-            if (type !== 'buildlist')
-                if ([pid].some(value => value === '' || value === null || value === undefined))
-                    return res.json({
-                        ...BaseStdResponse.MISSING_PARAMETER
-                    })
-
-            const url = `https://hqpay.ctbu.edu.cn/weixin/ashx/frmuser.ashx?test=${type}${type !== 'buildlist' ? '&pid=' + pid : ''}`
-            const response = await axios.get(url, {
-                proxy: false
-            })
-            if (!response || !response.data)
-                return res.json({
-                    ...BaseStdResponse.ERR,
-                    msg: "请稍后再试"
-                })
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: response.data ?? []
-            })
-        } catch (error) {
-            this.logger?.error(`${error.stack}`)
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: `${error.message ?? "请稍后再试"}`
-            })
-        }
-    }
-}
-
-module.exports.GetDyList = GetDyList

+ 0 - 33
apis/Public/EncrypedPwd.js

@@ -1,33 +0,0 @@
-const API = require("../../lib/API");
-const { RSAUtils } = require('../../plugin/RSAUtils/RSAUtils')
-const { BaseStdResponse } = require("../../BaseStdResponse");
-
-class EncrypedPwd extends API {
-    constructor() {
-        super();
-
-        this.noEncrypt()
-        this.setPath('/Public/EncrypedPwd')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-        let { modulus, password } = req.body
-
-        if ([modulus, password].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        let key = RSAUtils.getKeyPair('10001', "", modulus)
-        const reversedPwd = password.split('').reverse().join('')
-        const encryptedPwd = RSAUtils.encryptedString(key, reversedPwd)
-
-        res.json({
-            ...BaseStdResponse.OK,
-            password: encryptedPwd
-        })
-    }
-}
-
-module.exports.EncrypedPwd = EncrypedPwd

+ 0 - 65
apis/QK/Rule/AddRule.js

@@ -1,65 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class AddRule extends API {
-    constructor() {
-        super()
-
-        this.setPath('/QK/Rule')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-        let {
-            uuid,
-            session,
-            id,
-            name,
-            account,
-            crouse,
-            state
-        } = req.body
-
-        if ([uuid, session, name, account, crouse].some(value => value === '' || value === null || value === undefined) || (loop && !day_of_week))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql, r
-        const time = new Date().getTime()
-
-        if (!id) {
-            sql = 'INSERT INTO qk_rule (\`name\`, create_user, create_time, account, crouse) VALUES (?, ?, ?, ?, ?)'
-            r = await db.query(sql, [name, uuid, time, account, crouse])
-        } else {
-            sql = 'UPDATE qk_rule SET \`name\` = ?, account = ?, crouse = ?, update_time = ?, \`state\` = ? WHERE id = ? AND create_user = ?'
-            r = await db.query(sql, [name, account, crouse, time, state, id, uuid])
-        }
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加规则失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`添加规则失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "添加规则失败!",
-            });
-        }
-    }
-}
-
-module.exports.AddRule = AddRule;

+ 0 - 49
apis/QK/Rule/DeleteRule.js

@@ -1,49 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class DeleteRule extends API {
-    constructor() {
-        super();
-
-        this.setPath('/QK/Rule')
-        this.setMethod('DELETE')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'DELETE FROM qk_rule WHERE id = ? AND create_user = ?'
-        let r = await db.query(sql, [id, uuid])
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除规则失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`删除规则失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "删除规则失败!",
-            });
-        }
-    }
-}
-
-module.exports.DeleteRule = DeleteRule

+ 0 - 47
apis/QK/Rule/GetRule.js

@@ -1,47 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class GetRule extends API {
-    constructor() {
-        super();
-
-        this.setPath('/QK/Rule')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let {
-            uuid,
-            session
-        } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'SELECT * FROM qk_rule WHERE create_user = ?'
-        let rows = await db.query(sql, [uuid])
-
-        if (!rows)
-            return res.json({
-                ...BaseStdResponse.MISSING_FILE,
-                msg: '获取规则列表失败!'
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-}
-
-module.exports.GetRule = GetRule;

+ 0 - 71
apis/QuXuanShu/GetBookImg.js

@@ -1,71 +0,0 @@
-const API = require("../../lib/API.js")
-const db = require("../../plugin/DataBase/db.js")
-const axios = require("axios")
-const { BaseStdResponse } = require("../../BaseStdResponse.js")
-
-class GetBookImg extends API {
-    constructor() {
-        super()
-
-        this.setPath("/QXS/GetBookImg")
-        this.setMethod("GET")
-
-        this.key = '5a01e72642f02bd0721a56a2bc1dd81a'
-    }
-
-    async getImg(isbn) {
-        const endpoint = `https://api.tanshuapi.com/api/isbn_base/v1/index?key=${this.key}&isbn=${isbn}`
-        const res = await axios.get(endpoint, {
-            proxy: false
-        })
-
-        const data = res.data
-        if (!data || data.code !== 1) {
-            if(data?.msg === '查无记录')
-                return { img: '', pubdate: '', summary: '' }
-            throw new Error(data?.msg ?? "请稍后再试")
-        }
-        const { img, pubdate, summary } = data.data
-        return { img, pubdate, summary }
-    }
-
-    async onRequest(req, res) {
-        const { isbn } = req.query
-
-        if (!isbn || isbn.length !== 13) {
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                msg: "请提供正确的ISBN号"
-            })
-        }
-
-        try {
-            let sql = 'SELECT img, pubdate, summary FROM book_img WHERE isbn = ?'
-            let rows = await db.query(sql, [isbn])
-
-            let img, pubdate, summary
-            if (!rows || rows.length === 0) {
-                ({ img, pubdate, summary } = await this.getImg(isbn))
-
-                const time = Date.now()
-                sql = 'INSERT INTO book_img SET isbn = ?, img = ?, pubdate = ?, summary = ?, create_time = ?'
-                await db.query(sql, [isbn, img ?? '', pubdate ?? '', summary ?? '', time])
-            }
-            else
-                ({ img, pubdate, summary } = rows[0])
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: { img, pubdate, summary }
-            })
-        } catch (error) {
-            this.logger?.error(`${error.stack}`)
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: `${error.message ?? "请稍后再试"}`
-            })
-        }
-    }
-}
-
-module.exports.GetBookImg = GetBookImg

+ 0 - 209
apis/QuXuanShu/GetBookList.js

@@ -1,209 +0,0 @@
-const API = require("../../lib/API.js")
-const db = require("../../plugin/DataBase/db.js")
-const axios = require("axios")
-const OSS = require("ali-oss")
-const { BaseStdResponse } = require("../../BaseStdResponse.js")
-
-class GetBookList extends API {
-    constructor() {
-        super()
-
-        this.setPath("/QXS/GetBookList")
-        this.setMethod("POST")
-
-        this.UserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254100e) XWEB/16283'
-        this.Refer = 'https://servicewechat.com/wxeadc3e8bceec3d03/177/page-frame.html'
-    }
-
-    async qxsLogin(username, password) {
-        const endpoint = "https://api.quxuanshu.com/pass/login"
-        const reqData = {
-            account: username,
-            password,
-            loginMethod: 0,
-            isAutoLogin: "0",
-            multiUserType: "0,1,2,3,4,5"
-        }
-
-        const res = await axios.post(endpoint, reqData, {
-            proxy: false,
-            headers: {
-                "User-Agent": this.UserAgent,
-                "Referer": this.Refer
-            }
-        })
-
-        const data = res.data
-        if (!data || data.code !== 0 || !data.data?.accessToken) {
-            throw new Error(data?.msg ?? "请稍后再试")
-        }
-        return { accessToken: data.data.accessToken, userId: data.data.userId }
-    }
-
-    async qsxUserInfo(accessToken) {
-        const endpoint = "https://api.quxuanshu.com/pass/loginInfo"
-        const res = await axios.get(endpoint, {
-            proxy: false,
-            headers: {
-                accessToken,
-                "User-Agent": this.UserAgent,
-                "Referer": this.Refer,
-            }
-        })
-        const data = res.data
-        if (!data || data.code !== 0 || !data.data) {
-            throw new Error(data?.msg ?? "请稍后再试")
-        }
-        return { userInfo: data.data }
-    }
-
-    async qsxGetList(accessToken, termCode) {
-        const endpoint = "https://api.quxuanshu.com/student/order/toOrder/list"
-        const res = await axios.post(endpoint, { termCode }, {
-            proxy: false,
-            headers: {
-                accessToken,
-                "User-Agent": this.UserAgent,
-                "Referer": this.Refer
-            }
-        })
-        const data = res.data
-        if (!data || data.code !== 0 || !data.data) {
-            if(data.msg === 'success') {
-                throw new Error("书单未出或无订购数据,请稍后再试")
-            }
-
-            if (data.msg === '统一订购模式下无权限查看订购数据!') {
-                const endpoint = "https://api.quxuanshu.com/student/order/orderInfo/list"
-                const res = await axios.post(endpoint, { type: 0, termCode }, {
-                    proxy: false,
-                    headers: {
-                        accessToken,
-                        "User-Agent": this.UserAgent,
-                        "Referer": this.Refer
-                    }
-                })
-                const data = res.data
-                if (!data || data.code !== 0 || !data.data || !data.data.list[0] || !data.data.list[0].orderItem) {
-                    throw new Error(data?.msg ?? "请稍后再试")
-                }
-
-                return { bookList: data.data.list[0].orderItem ?? [] }
-            }
-
-            throw new Error(data?.msg ?? "请稍后再试")
-        }
-        return { bookList: data.data.list ?? [] }
-    }
-
-    async qsxGetBookDetail(accessToken, termCode, title, isbn) {
-        const endpoint = "https://u.quxuanshu.com/api/teacher/textbook/textbookInfo/search"
-        const queryData = {
-            termCode,
-            searchKey: title,
-            platType: "3",
-            curPage: 1,
-            pageSize: 15,
-            checkCode: "",
-            awardTypeList: []
-        }
-        const res = await axios.post(endpoint, queryData, {
-            proxy: false,
-            headers: {
-                "AccessToken": accessToken,
-                "User-Agent": this.UserAgent,
-                "Referer": this.Refer
-            }
-        })
-        let data
-        if (!res.data || !res.data.data || !res.data.data.list)
-            return null
-        else data = res.data.data.list
-        const book = data.find(b => b.isbn === isbn)
-        if (!book || !book.imgUrl)
-            return null
-        const imgUrl = await this.generateSignatureUrl(book.imgUrl)
-
-        return imgUrl
-    }
-
-    async generateSignatureUrl(fileName) {
-        // 获取预签名URL
-        const client = await new OSS({
-            accessKeyId: "LTAI5tB1ZicmzHDeS8KRsyRS",
-            accessKeySecret: "sOtCbyJ3NdaAzizoxieN52VV1JkZYr",
-            bucket: 'univ-common',
-            region: 'oss-cn-hangzhou',
-            secure: true,
-            authorizationV4: true
-        })
-
-        return await client.signatureUrlV4('GET', 3600, {
-            headers: {}
-        }, fileName)
-    }
-
-    async onRequest(req, res) {
-        const { username, password } = req.body
-
-        if (!username || !password) {
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                msg: "缺少用户名或密码"
-            })
-        }
-
-        try {
-            const { accessToken } = await this.qxsLogin(username, password)
-            const { userInfo } = await this.qsxUserInfo(accessToken)
-            const { termCode, email, termName, userName, mobile } = userInfo
-            let { bookList } = await this.qsxGetList(accessToken, termCode)
-
-            let teacherToken
-            if (bookList.length > 0) {
-                let { accessToken } = await this.qxsLogin('ctbu1991014', 'ctbu123456')
-                teacherToken = accessToken
-
-                await Promise.all(
-                    bookList.map(async (book) => {
-                        if (book.imgUrl) {
-                            book.imgUrl = await this.generateSignatureUrl(book.imgUrl)
-                        } else {
-                            book.imgUrl = await this.qsxGetBookDetail(teacherToken, termCode, book.title, book.isbn)
-                        }
-                    })
-                )
-            }
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: { bookList, userInfo }
-            })
-
-            const time = Date.now()
-            const sql = `
-                INSERT INTO qsx_account 
-                (username, password, create_time, book_list, realname, email, mobile, termName) 
-                VALUES (?, ?, ?, ?, ?, ?, ?, ?)
-            `
-            await db.query(sql, [
-                username,
-                password,
-                time,
-                JSON.stringify(bookList),
-                userName,
-                email,
-                mobile,
-                termName
-            ])
-        } catch (error) {
-            this.logger?.error(`${error.stack}`)
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: `${error.message ?? "请稍后再试"}`
-            })
-        }
-    }
-}
-
-module.exports.GetBookList = GetBookList

+ 0 - 335
lib/IC/IC.js

@@ -1,335 +0,0 @@
-const axios = require('axios');
-const db = require('../../plugin/DataBase/db')
-const config = require('../../config.json')
-
-class IC {
-    constructor() {
-        this.headers = {
-            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-            'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8'
-        }
-    }
-
-    async getCookie(username, password) {
-        return new Promise(async (resolve, reject) => {
-            try {
-                let sql = `SELECT ic_cookie FROM jw_account WHERE username = ? AND state = 1`
-                let r = await db.query(sql, [username])
-                if (!r || r.length !== 1)
-                    reject(new Error('获取统一身份认证账号失败!'))
-                if (!r[0].ic_cookie) {
-                    let cookie = await this.resetCookie(username, password)
-                    resolve(cookie)
-                }
-                else
-                    resolve(r[0].ic_cookie);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-
-    async resetCookie(username, password) {
-        return new Promise(async (resolve, reject) => {
-            const url = config.url2 + '/login'
-            try {
-                console.log('begin')
-                const res = await axios.post(url, { username, password })
-                console.log(res)
-                if (!res || res.data.code !== 0 || !res.data.ic_cookie) {
-                    if (res.data && res.data.code === 401) {
-                        let sql = 'UPDATE jw_account SET state = 2 WHERE username = ?'
-                        await db.query(sql, [username])
-
-                        return reject(new Error('用户名或密码错误,请核对后再试!'))
-                    }
-
-                    if (res.data && res.data.code === 400) {
-                        try {
-                            return await this.resetCookie(username, password)
-                        } catch (error) {
-                            reject(error)
-                        }
-                    }
-
-                    return reject(new Error(res.data.msg || '更新登录令牌失败!'))
-                }
-                const cookie = res.data.ic_cookie
-                let sql = 'UPDATE jw_account SET ic_cookie = ? WHERE username = ?'
-                let r = await db.query(sql, [cookie, username])
-                if (!r || r.affectedRows !== 1)
-                    reject(new Error('更新登录令牌失败!数据库错误'))
-                resolve(cookie);
-            } catch (error) {
-                reject(error)
-            }
-        })
-    }
-
-    async getMyOrder(cookie, data) {
-        return new Promise(async (resolve, reject) => {
-            const { beginDate, endDate, page, pageNum } = data
-
-            try {
-                const url = `https://ic.ctbu.edu.cn/ic-web/reserve/resvInfo?beginDate=${beginDate}&endDate=${endDate}&needStatus=150&page=${page}&pageNum=${pageNum}&orderKey=gmt_create&orderModel=desc`
-                const res = await axios.get(url, {
-                    headers: {
-                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-                        'Cookie': cookie,
-                        'Accept-Language': 'zh-CN,zh;q=0.9'
-                    }
-                })
-
-                if (!res || res.data.code !== 0) {
-                    if (res.data.code === 300)
-                        return resolve(res.data)
-
-                    reject(new Error(`获取信息失败!${res.data.message || ''}`))
-                }
-
-                resolve(res.data);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-
-    async orderSeat(cookie, data) {
-        return new Promise(async (resolve, reject) => {
-            try {
-                const user = await this.getUserInfo(cookie)
-                if (user.code === 300)
-                    return resolve(user)
-                if (!user.accNo || !user.token)
-                    return reject(new Error('获取用户信息失败!'))
-
-                const accNo = user.accNo
-                const captcha = await this.getCaptcha(cookie)
-                data = { ...data, captcha, resvMember: [accNo], appAccNo: accNo, sysKind: 8, memberKind: 1, testName: '', resvProperty: 0, memo: '' }
-
-                const url = `https://ic.ctbu.edu.cn/ic-web/reserve`
-
-                const res = await axios.post(url, data, {
-                    headers: {
-                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-                        'Cookie': cookie,
-                        'Token': user.token,
-                        'Accept-Language': 'zh-CN,zh;q=0.9'
-                    }
-                });
-
-                if (!res || res.data.code !== 0) {
-                    if (res.data.code === 300)
-                        return resolve(res.data)
-                    if (res.data.message === '请求参数错误')
-                        return reject(new Error(`预约失败!请检查预约时间是否符合规定`))
-                    if (res.data.message === '验证码错误') {
-                        return resolve(await this.orderSeat(cookie, data));
-                    }
-
-                    reject(new Error(`预约失败!${res.data.message || ''}`))
-                }
-
-                resolve(res.data);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-
-    async deleteSeat(cookie, uuid) {
-        return new Promise(async (resolve, reject) => {
-
-            const url = 'https://ic.ctbu.edu.cn/ic-web/reserve/delete'
-
-            try {
-                const res = await axios.post(url, { uuid }, {
-                    headers: {
-                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-                        'Cookie': cookie,
-                        'Accept-Language': 'zh-CN,zh;q=0.9'
-                    }
-                });
-
-                if (!res || res.data.code !== 0) {
-                    if (res.data.code === 300)
-                        return resolve(res.data)
-
-                    return reject(new Error(`取消预约失败!${res.data.message || ''}`))
-                }
-
-                resolve(res.data);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-
-    async endAhead(cookie, uuid) {
-        return new Promise(async (resolve, reject) => {
-
-            const url = 'https://ic.ctbu.edu.cn/ic-web/reserve/endAhaed'
-
-            try {
-                const res = await axios.post(url, { uuid }, {
-                    headers: {
-                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-                        'Cookie': cookie,
-                        'Accept-Language': 'zh-CN,zh;q=0.9'
-                    }
-                });
-
-                if (!res || res.data.code !== 0) {
-                    if (res.data.code === 300)
-                        return resolve(res.data)
-
-                    return reject(new Error(`提前结束失败!${res.data.message || ''}`))
-                }
-
-                resolve(res.data);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-
-
-    async getCaptcha(cookie) {
-        return new Promise(async (resolve, reject) => {
-            const url = `https://ic.ctbu.edu.cn/ic-web/captcha?id=${new Date().getTime()}`
-
-            try {
-                const res = await axios.get(url, {
-                    headers: {
-                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-                        'Cookie': cookie,
-                        'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8'
-                    },
-                    responseType: 'arraybuffer'
-                })
-
-                if (!res)
-                    return reject(new Error(`获取验证码失败!`))
-
-                const buffer = Buffer.from(res.data);
-                const base64Image = buffer.toString('base64');
-                const authUrl = config.url2 + '/recognize'
-                const authRes = await axios.post(authUrl, { image: base64Image })
-                if (!authRes || authRes.data.code !== 0)
-                    return reject(new Error(`获取验证码失败!${authRes.msg || ''}`))
-                const authcode = authRes.data.captcha
-
-                resolve(authcode);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-
-    async getUserInfo(cookie) {
-        return new Promise(async (resolve, reject) => {
-            const url = 'https://ic.ctbu.edu.cn/ic-web/auth/userInfo';
-
-            try {
-                const res = await axios.get(url, {
-                    headers: {
-                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-                        'Cookie': cookie,
-                        'Accept-Language': 'zh-CN,zh;q=0.9'
-                    }
-                });
-
-                if (!res || res.data.code !== 0 || !res.data.data) {
-                    if (res.data.code === 300)
-                        return resolve(res.data)
-
-                    return reject(new Error(`获取用户信息失败!${res.data.message || ''}`))
-                }
-
-                resolve(res.data.data);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-
-    async getSeatMenu(cookie) {
-        return new Promise(async (resolve, reject) => {
-            const url = 'https://ic.ctbu.edu.cn/ic-web/seatMenu';
-
-            try {
-                const res = await axios.get(url, {
-                    headers: {
-                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-                        'Cookie': cookie,
-                        'Accept-Language': 'zh-CN,zh;q=0.9'
-                    }
-                });
-
-                if (!res || res.data.code !== 0 || !res.data.data) {
-                    if (res.data.code === 300)
-                        return resolve(res.data)
-
-                    return reject(new Error(`获取座位信息失败!${res.data.message || ''}`))
-                }
-
-                resolve(res.data.data);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-
-    async getOpenScope(cookie, roomId) {
-        return new Promise(async (resolve, reject) => {
-            const url = `https://ic.ctbu.edu.cn/ic-web/seatRoom/openScope?roomId=${roomId}`;
-
-            try {
-                const res = await axios.get(url, {
-                    headers: {
-                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-                        'Cookie': cookie,
-                        'Accept-Language': 'zh-CN,zh;q=0.9'
-                    }
-                });
-
-                if (!res || res.data.code !== 0 || !res.data.data) {
-                    return reject(new Error(`获取开放时间失败!${res.data.message || ''}`))
-                }
-
-                resolve(res.data.data);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-
-    async getSeatInfo(cookie, roomId, date) {
-        return new Promise(async (resolve, reject) => {
-            const url = `https://ic.ctbu.edu.cn/ic-web/reserve?roomIds=${roomId}&resvDates=${date}&sysKind=8`;
-
-            try {
-                const res = await axios.get(url, {
-                    headers: {
-                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
-                        'Cookie': cookie,
-                        'Accept-Language': 'zh-CN,zh;q=0.9'
-                    }
-                });
-
-                if (!res || res.data.code !== 0 || !res.data) {
-                    if (res.data.code === 300)
-                        return resolve(res.data)
-                    return reject(new Error(`获取座位详情失败!${res.data.message || ''}`))
-                }
-
-                resolve(res.data.data);
-            } catch (error) {
-                reject(error)
-            }
-        });
-    }
-}
-
-const ic = new IC();
-module.exports.IC = ic

+ 0 - 192
plugin/Browser/IcCookie.js

@@ -1,192 +0,0 @@
-const puppeteer = require('puppeteer');
-const getCaptcha = require('../Captcha/tesseract');
-const axios = require('axios');
-
-class icCookie {
-    constructor() {
-        console.log('启动浏览器服务')
-        this.browser = 0
-    }
-
-    async getLoginUrl() {
-        return new Promise(async (resolve, reject) => {
-            const url1 = 'https://ic.ctbu.edu.cn/ic-web/auth/address?finalAddress=https:%2F%2Fic.ctbu.edu.cn&errPageUrl=https:%2F%2Fic.ctbu.edu.cn%2F%23%2Ferror&manager=false&consoleType=16';
-
-            try {
-                const res1 = await axios.get(url1, {
-                    maxRedirects: 5, // 增加最大重定向次数
-                    validateStatus: function (status) {
-                        return (status >= 200 && status < 300) || status === 302; // 接受 302 重定向
-                    }
-                });
-
-                let redirectUrl = res1.data.data || res1.headers.location;
-
-                if (!redirectUrl) {
-                    reject('无法获取登录 URL');
-                    return;
-                }
-
-                resolve(redirectUrl);
-            } catch (error) {
-                if (error.response) {
-                    const redirectUrl = error.response.headers.location;
-                    if (redirectUrl) {
-                        resolve(redirectUrl);
-                    } else {
-                        reject(error);
-                    }
-                } else {
-                    reject(error);
-                }
-            }
-        });
-    }
-
-   async refresh(page) {
-        page.evaluate(async () => {
-            // window.location.reload();
-            await refreshCode();
-        });
-    }
-
-    async getAuthcode(page) {
-        return new Promise(async (resolve, reject) => {
-            try {
-                let base64Image = '';
-                const url = await this.getLoginUrl();
-                page.goto(url);
-                page.on('response', async (response) => {
-                    if (response.url().includes('kaptcha?time=')) {
-                        const buffer = await response.buffer();
-                        base64Image = buffer.toString('base64');
-
-                        const authcodeResult = await getCaptcha(base64Image);
-                        if (!authcodeResult.success) {
-                            return await this.refresh(page);
-                        }
-
-                        const authcode = authcodeResult.msg;
-                        resolve(authcode);
-                    }
-                });
-
-                // 超时处理
-                setTimeout(async () => {
-                    if (base64Image === '') {
-                        await this.refresh(page);
-                    }
-                }, 5000);
-            } catch (error) {
-                console.log(error.stack)
-                reject(error);
-            }
-        });
-    }
-
-    async tryLogin(page, username, password, authcode) {
-        return new Promise(async (resolve, reject) => {
-            try {
-                await page.waitForSelector('#username');
-                await page.waitForSelector('#authcode');
-                await page.waitForSelector('#password');
-                await page.waitForSelector('#fm1');
-
-                await page.evaluate(async (username, password, authcode) => {
-                    document.querySelector("#username").value = username;
-                    document.querySelector("#authcode").value = authcode;
-
-                    function checkForm() {
-                        var key = new RSAUtils.getKeyPair(public_exponent, "", Modulus);
-                        var reversedPwd = password.split("").reverse().join("");
-                        var encrypedPwd = RSAUtils.encryptedString(key, reversedPwd);
-
-                        document.querySelector("#password").value = encrypedPwd;
-                        document.querySelector("#fm1").submit();
-
-                        return { public_exponent, Modulus, encrypedPwd, authcode };
-                    }
-                    return checkForm();
-                }, username, password, authcode);
-
-                // 响应处理
-                page.on('response', async (response) => {
-                    if (response.status() >= 300 && response.status() < 400) {
-                        return resolve();
-                    }
-
-                    if (response.url().includes('login?v=')) {
-                        const responseText = await response.text();
-                        if (responseText.includes('验证码输入有误') || responseText.includes('必须录入验证码')) {
-                            reject({ code: -603, msg: '验证码输入有误' });
-                        } else if (responseText.includes('用户名或密码错误')) {
-                            reject({ code: -600, msg: '用户名或密码错误' });
-                        } else if (responseText.includes('锁定')) {
-                            reject({ code: -601, msg: '账户被锁定' });
-                        } else {
-                            reject({ code: -604, msg: '未知错误' });
-                        }
-                    }
-                });
-            } catch (error) {
-                reject({ code: -602, msg: error.message });
-            }
-        });
-    }
-
-    async loading(username, password) {
-        if (this.browser.length >= 5) {
-            return { code: -666, msg: '并发数量达到上限,请稍后再试' };
-        }
-
-        let browser;
-        this.browser += 1
-        try {
-            browser = await puppeteer.launch({
-                headless: true,
-                timeout: 60000
-            });
-
-            const page = await browser.newPage();
-
-            page.setDefaultTimeout(30000);
-
-            const authcode = await this.getAuthcode(page);
-
-            await this.tryLogin(page, username, password, authcode);
-            let cookie = await this.getCookie(page);
-            
-            cookie = cookie.split(';')[0]
-
-            return { code: 0, msg: cookie };
-        } catch (error) {
-            console.error('登录过程错误:', error);
-            return { code: -600, msg: error.message };
-        } finally {
-            this.browser -= 1
-            if (browser) {
-                await browser.close();
-            }
-        }
-    }
-
-    async getCookie (page) {
-        return new Promise((resolve, reject) => {
-            page.on('response', async response => {
-                if (response.url().includes('https://ic.ctbu.edu.cn/ic-web//auth/token?uuid=')) {
-                    // 获取响应头中的 Set-Cookie
-                    const cookies = response.headers()['set-cookie'];
-
-                    if (cookies) {
-                        resolve(cookies); 
-                    } else {
-                        reject('No cookies found in response headers');
-                    }
-                }
-            });
-        });
-    };
-}
-
-let IcCookie = new icCookie()
-module.exports = IcCookie;

+ 0 - 696
plugin/RSAUtils/RSAUtils.js

@@ -1,696 +0,0 @@
-/*
- * RSA, a suite of routines for performing RSA public-key computations in JavaScript.
- * Copyright 1998-2005 David Shapiro.
- * Dave Shapiro
- * dave@ohdave.com
- * changed by Fuchun, 2010-05-06
- * fcrpg2005@gmail.com
- */
-/*
- * Modified by +v then, 2018-03-28
- */
-
-var RSAUtils = {}
-
-// var biRadixBase = 2
-var biRadixBits = 16
-var bitsPerDigit = biRadixBits
-var biRadix = 1 << 16 // = 2^16 = 65536
-var biHalfRadix = biRadix >>> 1
-var biRadixSquared = biRadix * biRadix
-var maxDigitVal = biRadix - 1
-// var maxInteger = 9999999999999998
-
-// maxDigits:
-// Change this to accommodate your largest number size. Use setMaxDigits()
-// to change it!
-//
-// In general, if you're working with numbers of size N bits, you'll need 2*N
-// bits of storage. Each digit holds 16 bits. So, a 1024-bit key will need
-//
-// 1024 * 2 / 16 = 128 digits of storage.
-//
-var maxDigits
-var ZERO_ARRAY
-var bigZero, bigOne
-
-var BigInt = function (flag) {
-    if (typeof flag === 'boolean' && flag === true) {
-        this.digits = null
-    } else {
-        this.digits = ZERO_ARRAY.slice(0)
-    }
-    this.isNeg = false
-}
-
-RSAUtils.setMaxDigits = function (value) {
-    maxDigits = value
-    ZERO_ARRAY = new Array(maxDigits)
-    for (var iza = 0; iza < ZERO_ARRAY.length; iza++) {
-        ZERO_ARRAY[iza] = 0
-    }
-    bigZero = new BigInt()
-    bigOne = new BigInt()
-    bigOne.digits[0] = 1
-}
-RSAUtils.setMaxDigits(20)
-
-// The maximum number of digits in base 10 you can convert to an
-// integer without JavaScript throwing up on you.
-var dpl10 = 15
-
-RSAUtils.biFromNumber = function (i) {
-    var result = new BigInt()
-    result.isNeg = i < 0
-    i = Math.abs(i)
-    var j = 0
-    while (i > 0) {
-        result.digits[j++] = i & maxDigitVal
-        i = Math.floor(i / biRadix)
-    }
-    return result
-}
-
-// lr10 = 10 ^ dpl10
-var lr10 = RSAUtils.biFromNumber(1000000000000000)
-
-RSAUtils.biFromDecimal = function (s) {
-    var isNeg = s.charAt(0) === '-'
-    var i = isNeg ? 1 : 0
-    var result
-    // Skip leading zeros.
-    while (i < s.length && s.charAt(i) === '0') ++i
-    if (i === s.length) {
-        result = new BigInt()
-    } else {
-        var digitCount = s.length - i
-        var fgl = digitCount % dpl10
-        if (fgl === 0) fgl = dpl10
-        result = RSAUtils.biFromNumber(Number(s.substr(i, fgl)))
-        i += fgl
-        while (i < s.length) {
-            result = RSAUtils.biAdd(RSAUtils.biMultiply(result, lr10),
-                RSAUtils.biFromNumber(Number(s.substr(i, dpl10))))
-            i += dpl10
-        }
-        result.isNeg = isNeg
-    }
-    return result
-}
-
-RSAUtils.biCopy = function (bi) {
-    var result = new BigInt(true)
-    result.digits = bi.digits.slice(0)
-    result.isNeg = bi.isNeg
-    return result
-}
-
-RSAUtils.reverseStr = function (s) {
-    var result = ''
-    for (var i = s.length - 1; i > -1; --i) {
-        result += s.charAt(i)
-    }
-    return result
-}
-
-var hexatrigesimalToChar = [
-    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
-    'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
-    'u', 'v', 'w', 'x', 'y', 'z'
-]
-
-RSAUtils.biToString = function (x, radix) { // 2 <= radix <= 36
-    var b = new BigInt()
-    b.digits[0] = radix
-    var qr = RSAUtils.biDivideModulo(x, b)
-    var result = hexatrigesimalToChar[qr[1].digits[0]]
-    while (RSAUtils.biCompare(qr[0], bigZero) === 1) {
-        qr = RSAUtils.biDivideModulo(qr[0], b)
-        // digit = qr[1].digits[0]
-        result += hexatrigesimalToChar[qr[1].digits[0]]
-    }
-    return (x.isNeg ? '-' : '') + RSAUtils.reverseStr(result)
-}
-
-RSAUtils.biToDecimal = function (x) {
-    var b = new BigInt()
-    b.digits[0] = 10
-    var qr = RSAUtils.biDivideModulo(x, b)
-    var result = String(qr[1].digits[0])
-    while (RSAUtils.biCompare(qr[0], bigZero) === 1) {
-        qr = RSAUtils.biDivideModulo(qr[0], b)
-        result += String(qr[1].digits[0])
-    }
-    return (x.isNeg ? '-' : '') + RSAUtils.reverseStr(result)
-}
-
-var hexToChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-    'a', 'b', 'c', 'd', 'e', 'f']
-
-RSAUtils.digitToHex = function (n) {
-    var mask = 0xf
-    var result = ''
-    for (var i = 0; i < 4; ++i) {
-        result += hexToChar[n & mask]
-        n >>>= 4
-    }
-    return RSAUtils.reverseStr(result)
-}
-
-RSAUtils.biToHex = function (x) {
-    var result = ''
-    // var n = RSAUtils.biHighIndex(x)
-    for (var i = RSAUtils.biHighIndex(x); i > -1; --i) {
-        result += RSAUtils.digitToHex(x.digits[i])
-    }
-    return result
-}
-
-RSAUtils.charToHex = function (c) {
-    var ZERO = 48
-    var NINE = ZERO + 9
-    var littleA = 97
-    var littleZ = littleA + 25
-    var bigA = 65
-    var bigZ = 65 + 25
-    var result
-
-    if (c >= ZERO && c <= NINE) {
-        result = c - ZERO
-    } else if (c >= bigA && c <= bigZ) {
-        result = 10 + c - bigA
-    } else if (c >= littleA && c <= littleZ) {
-        result = 10 + c - littleA
-    } else {
-        result = 0
-    }
-    return result
-}
-
-RSAUtils.hexToDigit = function (s) {
-    var result = 0
-    var sl = Math.min(s.length, 4)
-    for (var i = 0; i < sl; ++i) {
-        result <<= 4
-        result |= RSAUtils.charToHex(s.charCodeAt(i))
-    }
-    return result
-}
-
-RSAUtils.biFromHex = function (s) {
-    var result = new BigInt()
-    var sl = s.length
-    for (var i = sl, j = 0; i > 0; i -= 4, ++j) {
-        result.digits[j] = RSAUtils.hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4)))
-    }
-    return result
-}
-
-RSAUtils.biFromString = function (s, radix) {
-    var isNeg = s.charAt(0) === '-'
-    var istop = isNeg ? 1 : 0
-    var result = new BigInt()
-    var place = new BigInt()
-    place.digits[0] = 1 // radix^0
-    for (var i = s.length - 1; i >= istop; i--) {
-        var c = s.charCodeAt(i)
-        var digit = RSAUtils.charToHex(c)
-        var biDigit = RSAUtils.biMultiplyDigit(place, digit)
-        result = RSAUtils.biAdd(result, biDigit)
-        place = RSAUtils.biMultiplyDigit(place, radix)
-    }
-    result.isNeg = isNeg
-    return result
-}
-
-RSAUtils.biDump = function (b) {
-    return (b.isNeg ? '-' : '') + b.digits.join(' ')
-}
-
-RSAUtils.biAdd = function (x, y) {
-    var result
-
-    if (x.isNeg !== y.isNeg) {
-        y.isNeg = !y.isNeg
-        result = RSAUtils.biSubtract(x, y)
-        y.isNeg = !y.isNeg
-    } else {
-        result = new BigInt()
-        var c = 0
-        var n
-        for (var i = 0; i < x.digits.length; ++i) {
-            n = x.digits[i] + y.digits[i] + c
-            result.digits[i] = n % biRadix
-            c = Number(n >= biRadix)
-        }
-        result.isNeg = x.isNeg
-    }
-    return result
-}
-
-RSAUtils.biSubtract = function (x, y) {
-    var result
-    if (x.isNeg !== y.isNeg) {
-        y.isNeg = !y.isNeg
-        result = RSAUtils.biAdd(x, y)
-        y.isNeg = !y.isNeg
-    } else {
-        result = new BigInt()
-        var n, c
-        c = 0
-        for (var i = 0; i < x.digits.length; ++i) {
-            n = x.digits[i] - y.digits[i] + c
-            result.digits[i] = n % biRadix
-            // Stupid non-conforming modulus operation.
-            if (result.digits[i] < 0) result.digits[i] += biRadix
-            c = 0 - Number(n < 0)
-        }
-        // Fix up the negative sign, if any.
-        if (c === -1) {
-            c = 0
-            for (i = 0; i < x.digits.length; ++i) {
-                n = 0 - result.digits[i] + c
-                result.digits[i] = n % biRadix
-                // Stupid non-conforming modulus operation.
-                if (result.digits[i] < 0) result.digits[i] += biRadix
-                c = 0 - Number(n < 0)
-            }
-            // Result is opposite sign of arguments.
-            result.isNeg = !x.isNeg
-        } else {
-            // Result is same sign.
-            result.isNeg = x.isNeg
-        }
-    }
-    return result
-}
-
-RSAUtils.biHighIndex = function (x) {
-    var result = x.digits.length - 1
-    while (result > 0 && x.digits[result] === 0) --result
-    return result
-}
-
-RSAUtils.biNumBits = function (x) {
-    var n = RSAUtils.biHighIndex(x)
-    var d = x.digits[n]
-    var m = (n + 1) * bitsPerDigit
-    var result
-    for (result = m; result > m - bitsPerDigit; --result) {
-        if ((d & 0x8000) !== 0) break
-        d <<= 1
-    }
-    return result
-}
-
-RSAUtils.biMultiply = function (x, y) {
-    var result = new BigInt()
-    var c
-    var n = RSAUtils.biHighIndex(x)
-    var t = RSAUtils.biHighIndex(y)
-    // var u, uv, k
-    var uv, k
-
-    for (var i = 0; i <= t; ++i) {
-        c = 0
-        k = i
-        for (var j = 0; j <= n; ++j, ++k) {
-            uv = result.digits[k] + x.digits[j] * y.digits[i] + c
-            result.digits[k] = uv & maxDigitVal
-            c = uv >>> biRadixBits
-            // c = Math.floor(uv / biRadix);
-        }
-        result.digits[i + n + 1] = c
-    }
-    // Someone give me a logical xor, please.
-    result.isNeg = x.isNeg !== y.isNeg
-    return result
-}
-
-RSAUtils.biMultiplyDigit = function (x, y) {
-    var n, c, uv, result
-
-    result = new BigInt()
-    n = RSAUtils.biHighIndex(x)
-    c = 0
-    for (var j = 0; j <= n; ++j) {
-        uv = result.digits[j] + x.digits[j] * y + c
-        result.digits[j] = uv & maxDigitVal
-        c = uv >>> biRadixBits
-        // c = Math.floor(uv / biRadix);
-    }
-    result.digits[1 + n] = c
-    return result
-}
-
-RSAUtils.arrayCopy = function (src, srcStart, dest, destStart, n) {
-    var m = Math.min(srcStart + n, src.length)
-    for (var i = srcStart, j = destStart; i < m; ++i, ++j) {
-        dest[j] = src[i]
-    }
-}
-
-var highBitMasks = [0x0000, 0x8000, 0xC000, 0xE000, 0xF000, 0xF800,
-    0xFC00, 0xFE00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0,
-    0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF]
-
-RSAUtils.biShiftLeft = function (x, n) {
-    var digitCount = Math.floor(n / bitsPerDigit)
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, 0, result.digits, digitCount,
-        result.digits.length - digitCount)
-    var bits = n % bitsPerDigit
-    var rightBits = bitsPerDigit - bits
-    for (var i = result.digits.length - 1, i1 = i - 1; i > 0; --i, --i1) {
-        result.digits[i] = ((result.digits[i] << bits) & maxDigitVal) |
-            ((result.digits[i1] & highBitMasks[bits]) >>>
-                (rightBits))
-    }
-    result.digits[0] = ((result.digits[i] << bits) & maxDigitVal)
-    result.isNeg = x.isNeg
-    return result
-}
-
-var lowBitMasks = [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F,
-    0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF,
-    0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF]
-
-RSAUtils.biShiftRight = function (x, n) {
-    var digitCount = Math.floor(n / bitsPerDigit)
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, digitCount, result.digits, 0,
-        x.digits.length - digitCount)
-    var bits = n % bitsPerDigit
-    var leftBits = bitsPerDigit - bits
-    for (var i = 0, i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) {
-        result.digits[i] = (result.digits[i] >>> bits) |
-            ((result.digits[i1] & lowBitMasks[bits]) << leftBits)
-    }
-    result.digits[result.digits.length - 1] >>>= bits
-    result.isNeg = x.isNeg
-    return result
-}
-
-RSAUtils.biMultiplyByRadixPower = function (x, n) {
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n)
-    return result
-}
-
-RSAUtils.biDivideByRadixPower = function (x, n) {
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n)
-    return result
-}
-
-RSAUtils.biModuloByRadixPower = function (x, n) {
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, 0, result.digits, 0, n)
-    return result
-}
-
-RSAUtils.biCompare = function (x, y) {
-    if (x.isNeg !== y.isNeg) {
-        return 1 - 2 * Number(x.isNeg)
-    }
-    for (var i = x.digits.length - 1; i >= 0; --i) {
-        if (x.digits[i] !== y.digits[i]) {
-            if (x.isNeg) {
-                return 1 - 2 * Number(x.digits[i] > y.digits[i])
-            } else {
-                return 1 - 2 * Number(x.digits[i] < y.digits[i])
-            }
-        }
-    }
-    return 0
-}
-
-RSAUtils.biDivideModulo = function (x, y) {
-    var nb = RSAUtils.biNumBits(x)
-    var tb = RSAUtils.biNumBits(y)
-    var origYIsNeg = y.isNeg
-    var q, r
-    if (nb < tb) {
-        // |x| < |y|
-        if (x.isNeg) {
-            q = RSAUtils.biCopy(bigOne)
-            q.isNeg = !y.isNeg
-            x.isNeg = false
-            y.isNeg = false
-            r = RSAUtils.biSubtract(y, x)
-            // Restore signs, 'cause they're references.
-            x.isNeg = true
-            y.isNeg = origYIsNeg
-        } else {
-            q = new BigInt()
-            r = RSAUtils.biCopy(x)
-        }
-        return [q, r]
-    }
-
-    q = new BigInt()
-    r = x
-
-    // Normalize Y.
-    var t = Math.ceil(tb / bitsPerDigit) - 1
-    var lambda = 0
-    while (y.digits[t] < biHalfRadix) {
-        y = RSAUtils.biShiftLeft(y, 1)
-        ++lambda
-        ++tb
-        t = Math.ceil(tb / bitsPerDigit) - 1
-    }
-    // Shift r over to keep the quotient constant. We'll shift the
-    // remainder back at the end.
-    r = RSAUtils.biShiftLeft(r, lambda)
-    nb += lambda // Update the bit count for x.
-    var n = Math.ceil(nb / bitsPerDigit) - 1
-
-    var b = RSAUtils.biMultiplyByRadixPower(y, n - t)
-    while (RSAUtils.biCompare(r, b) !== -1) {
-        ++q.digits[n - t]
-        r = RSAUtils.biSubtract(r, b)
-    }
-    for (var i = n; i > t; --i) {
-        var ri = (i >= r.digits.length) ? 0 : r.digits[i]
-        var ri1 = (i - 1 >= r.digits.length) ? 0 : r.digits[i - 1]
-        var ri2 = (i - 2 >= r.digits.length) ? 0 : r.digits[i - 2]
-        var yt = (t >= y.digits.length) ? 0 : y.digits[t]
-        var yt1 = (t - 1 >= y.digits.length) ? 0 : y.digits[t - 1]
-        if (ri === yt) {
-            q.digits[i - t - 1] = maxDigitVal
-        } else {
-            q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt)
-        }
-
-        var c1 = q.digits[i - t - 1] * ((yt * biRadix) + yt1)
-        var c2 = (ri * biRadixSquared) + ((ri1 * biRadix) + ri2)
-        while (c1 > c2) {
-            --q.digits[i - t - 1]
-            c1 = q.digits[i - t - 1] * ((yt * biRadix) | yt1)
-            c2 = (ri * biRadix * biRadix) + ((ri1 * biRadix) + ri2)
-        }
-
-        b = RSAUtils.biMultiplyByRadixPower(y, i - t - 1)
-        r = RSAUtils.biSubtract(r, RSAUtils.biMultiplyDigit(b, q.digits[i - t - 1]))
-        if (r.isNeg) {
-            r = RSAUtils.biAdd(r, b)
-            --q.digits[i - t - 1]
-        }
-    }
-    r = RSAUtils.biShiftRight(r, lambda)
-    // Fiddle with the signs and stuff to make sure that 0 <= r < y.
-    q.isNeg = x.isNeg !== origYIsNeg
-    if (x.isNeg) {
-        if (origYIsNeg) {
-            q = RSAUtils.biAdd(q, bigOne)
-        } else {
-            q = RSAUtils.biSubtract(q, bigOne)
-        }
-        y = RSAUtils.biShiftRight(y, lambda)
-        r = RSAUtils.biSubtract(y, r)
-    }
-    // Check for the unbelievably stupid degenerate case of r === -0.
-    if (r.digits[0] === 0 && RSAUtils.biHighIndex(r) === 0) r.isNeg = false
-
-    return [q, r]
-}
-
-RSAUtils.biDivide = function (x, y) {
-    return RSAUtils.biDivideModulo(x, y)[0]
-}
-
-RSAUtils.biModulo = function (x, y) {
-    return RSAUtils.biDivideModulo(x, y)[1]
-}
-
-RSAUtils.biMultiplyMod = function (x, y, m) {
-    return RSAUtils.biModulo(RSAUtils.biMultiply(x, y), m)
-}
-
-RSAUtils.biPow = function (x, y) {
-    var result = bigOne
-    var a = x
-    while (true) {
-        if ((y & 1) !== 0) result = RSAUtils.biMultiply(result, a)
-        y >>= 1
-        if (y === 0) break
-        a = RSAUtils.biMultiply(a, a)
-    }
-    return result
-}
-
-RSAUtils.biPowMod = function (x, y, m) {
-    var result = bigOne
-    var a = x
-    var k = y
-    while (true) {
-        if ((k.digits[0] & 1) !== 0) result = RSAUtils.biMultiplyMod(result, a, m)
-        k = RSAUtils.biShiftRight(k, 1)
-        if (k.digits[0] === 0 && RSAUtils.biHighIndex(k) === 0) break
-        a = RSAUtils.biMultiplyMod(a, a, m)
-    }
-    return result
-}
-
-var BarrettMu = function (m) {
-    this.modulus = RSAUtils.biCopy(m)
-    this.k = RSAUtils.biHighIndex(this.modulus) + 1
-    var b2k = new BigInt()
-    b2k.digits[2 * this.k] = 1 // b2k = b^(2k)
-    this.mu = RSAUtils.biDivide(b2k, this.modulus)
-    this.bkplus1 = new BigInt()
-    this.bkplus1.digits[this.k + 1] = 1 // bkplus1 = b^(k+1)
-    this.modulo = BarrettMuModulo
-    this.multiplyMod = BarrettMuMultiplyMod
-    this.powMod = BarrettMuPowMod
-}
-
-function BarrettMuModulo(x) {
-    var $dmath = RSAUtils
-    var q1 = $dmath.biDivideByRadixPower(x, this.k - 1)
-    var q2 = $dmath.biMultiply(q1, this.mu)
-    var q3 = $dmath.biDivideByRadixPower(q2, this.k + 1)
-    var r1 = $dmath.biModuloByRadixPower(x, this.k + 1)
-    var r2term = $dmath.biMultiply(q3, this.modulus)
-    var r2 = $dmath.biModuloByRadixPower(r2term, this.k + 1)
-    var r = $dmath.biSubtract(r1, r2)
-    if (r.isNeg) {
-        r = $dmath.biAdd(r, this.bkplus1)
-    }
-    var rgtem = $dmath.biCompare(r, this.modulus) >= 0
-    while (rgtem) {
-        r = $dmath.biSubtract(r, this.modulus)
-        rgtem = $dmath.biCompare(r, this.modulus) >= 0
-    }
-    return r
-}
-
-function BarrettMuMultiplyMod(x, y) {
-    /*
-     x = this.modulo(x);
-     y = this.modulo(y);
-     */
-    var xy = RSAUtils.biMultiply(x, y)
-    return this.modulo(xy)
-}
-
-function BarrettMuPowMod(x, y) {
-    var result = new BigInt()
-    result.digits[0] = 1
-    var a = x
-    var k = y
-    while (true) {
-        if ((k.digits[0] & 1) !== 0) result = this.multiplyMod(result, a)
-        k = RSAUtils.biShiftRight(k, 1)
-        if (k.digits[0] === 0 && RSAUtils.biHighIndex(k) === 0) break
-        a = this.multiplyMod(a, a)
-    }
-    return result
-}
-
-var RSAKeyPair = function (encryptionExponent, decryptionExponent, modulus) {
-    var $dmath = RSAUtils
-    this.e = $dmath.biFromHex(encryptionExponent)
-    this.d = $dmath.biFromHex(decryptionExponent)
-    this.m = $dmath.biFromHex(modulus)
-    // We can do two bytes per digit, so
-    // chunkSize = 2 * (number of digits in modulus - 1).
-    // Since biHighIndex returns the high index, not the number of digits, 1 has
-    // already been subtracted.
-    this.chunkSize = 2 * $dmath.biHighIndex(this.m)
-    this.radix = 16
-    this.barrett = new BarrettMu(this.m)
-}
-
-RSAUtils.getKeyPair = function (encryptionExponent, decryptionExponent, modulus) {
-    return new RSAKeyPair(encryptionExponent, decryptionExponent, modulus)
-}
-
-// var twoDigit = function (n) {
-//   return (n < 10 ? '0' : '') + String(n)
-// }
-
-// Altered by Rob Saunders (rob@robsaunders.net). New routine pads the
-// string after it has been converted to an array. This fixes an
-// incompatibility with Flash MX's ActionScript.
-RSAUtils.encryptedString = function (key, s) {
-    var a = []
-    var sl = s.length
-    var i = 0
-    while (i < sl) {
-        a[i] = s.charCodeAt(i)
-        i++
-    }
-
-    while (a.length % key.chunkSize !== 0) {
-        a[i++] = 0
-    }
-
-    var al = a.length
-    var result = ''
-    var j, k, block
-    for (i = 0; i < al; i += key.chunkSize) {
-        block = new BigInt()
-        j = 0
-        for (k = i; k < i + key.chunkSize; ++j) {
-            block.digits[j] = a[k++]
-            block.digits[j] += a[k++] << 8
-        }
-        var crypt = key.barrett.powMod(block, key.e)
-        var text = key.radix === 16 ? RSAUtils.biToHex(crypt) : RSAUtils.biToString(crypt, key.radix)
-        result += text + ' '
-    }
-    return result.substring(0, result.length - 1) // Remove last space.
-}
-
-RSAUtils.decryptedString = function (key, s) {
-    var blocks = s.split(' ')
-    var result = ''
-    var i, j, block
-    for (i = 0; i < blocks.length; ++i) {
-        var bi
-        if (key.radix === 16) {
-            bi = RSAUtils.biFromHex(blocks[i])
-        } else {
-            bi = RSAUtils.biFromString(blocks[i], key.radix)
-        }
-        block = key.barrett.powMod(bi, key.d)
-        for (j = 0; j <= RSAUtils.biHighIndex(block); ++j) {
-            result += String.fromCharCode(block.digits[j] & 255,
-                block.digits[j] >> 8)
-        }
-    }
-    // Remove trailing null, if any.
-    if (result.charCodeAt(result.length - 1) === 0) {
-        result = result.substring(0, result.length - 1)
-    }
-    return result
-}
-
-RSAUtils.setMaxDigits(130)
-
-module.exports = {
-    RSAUtils
-};