ActiveAccount.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const API = require("../../lib/API.js");
  2. const db = require("../../plugin/DataBase/db.js");
  3. const AccessControl = require("../../lib/AccessControl");
  4. const ic = require("../../lib/IC/IC").IC;
  5. const { BaseStdResponse } = require("../../BaseStdResponse.js");
  6. // 激活统一认证账号
  7. class ActiveAccount extends API {
  8. constructor() {
  9. super();
  10. this.noEncrypt()
  11. this.setPath('/JW/ActiveAccount')
  12. this.setMethod('POST')
  13. }
  14. async checkJwAccount(uuid, username) {
  15. const sql = 'SELECT password FROM jw_account WHERE create_user = ? AND username = ?'
  16. const rows = await db.query(sql, [uuid, username]);
  17. if (!rows || rows.length !== 1 || !rows[0].password)
  18. return false
  19. return rows[0].password;
  20. }
  21. async onRequest(req, res) {
  22. let { uuid, session, username } = req.body
  23. if ([uuid, session, username].some(value => value === '' || value === null || value === undefined))
  24. return res.json({
  25. ...BaseStdResponse.MISSING_PARAMETER,
  26. endpoint: 1513126
  27. })
  28. if (!await AccessControl.checkSession(uuid, session))
  29. return res.status(401).json({
  30. ...BaseStdResponse.ACCESS_DENIED
  31. })
  32. const password = await this.checkJwAccount(uuid, username)
  33. if (!password)
  34. res.json({
  35. ...BaseStdResponse.ERR,
  36. msg: '教务系统账号未绑定'
  37. })
  38. try {
  39. let cookie = await ic.resetCookie(username, password)
  40. let user = await ic.getUserInfo(cookie)
  41. if (user.code === 300) {
  42. cookie = await ic.resetCookie(username, password)
  43. user = await ic.getUserInfo(cookie)
  44. }
  45. const { trueName, className, deptName } = user
  46. const time = new Date().getTime()
  47. let sql = 'UPDATE jw_account SET state = 1, update_time = ?, realname = ?, className = ?, deptName = ? WHERE username = ?'
  48. let r = await db.query(sql, [time, trueName, className, deptName, username])
  49. if (r && r.affectedRows > 0) {
  50. res.json({
  51. ...BaseStdResponse.OK,
  52. id: r.insertId
  53. })
  54. } else {
  55. res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '激活账号失败!数据库错误' })
  56. }
  57. } catch (err) {
  58. res.json({
  59. ...BaseStdResponse.ERR,
  60. msg: `激活账号失败!${err.message || ''}`,
  61. });
  62. }
  63. }
  64. }
  65. module.exports.ActiveAccount = ActiveAccount