token.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. const { User } = require('../models');
  2. const tokenStore = new Map();
  3. async function initializeTokenStore() {
  4. let users = [];
  5. if (process.env.MODE === '1') {
  6. console.log('Current mode is Heroku mode.');
  7. let user = {
  8. // Common
  9. prefix: process.env.PREFIX,
  10. accessToken: process.env.ACCESS_TOKEN,
  11. defaultMethod: process.env.DEFAULT_METHOD,
  12. // WeChat public account
  13. wechatAppId: process.env.WECHAT_APP_ID,
  14. wechatAppSecret: process.env.WECHAT_APP_SECRET,
  15. wechatTemplateId: process.env.WECHAT_TEMPLATE_ID,
  16. wechatOpenId: process.env.WECHAT_OPEN_ID,
  17. wechatVerifyToken: process.env.WECHAT_VERIFY_TOKEN,
  18. // Email
  19. email: process.env.EMAIL,
  20. smtpServer: process.env.SMTP_SERVER,
  21. smtpUser: process.env.SMTP_USER,
  22. smtpPass: process.env.SMTP_PASS,
  23. // WeChat corporation account
  24. corpId: process.env.CORP_ID,
  25. corpAgentId: process.env.CORP_AGENT_ID,
  26. corpAppSecret: process.env.CORP_APP_SECRET,
  27. corpUserId: process.env.CORP_USER_ID,
  28. };
  29. users.push(user);
  30. } else {
  31. users = await User.findAll({
  32. raw: true,
  33. });
  34. }
  35. users.forEach((user) => {
  36. if (user.prefix) {
  37. tokenStore.set(user.prefix, {
  38. // Common
  39. accessToken: user.accessToken,
  40. defaultMethod: user.defaultMethod,
  41. // WeChat test account
  42. wechatAppId: user.wechatAppId,
  43. wechatAppSecret: user.wechatAppSecret,
  44. wechatTemplateId: user.wechatTemplateId,
  45. wechatOpenId: user.wechatOpenId,
  46. wechatVerifyToken: user.wechatVerifyToken,
  47. wechatToken: '',
  48. // Email
  49. email: user.email,
  50. smtpServer: user.smtpServer,
  51. smtpUser: user.smtpUser,
  52. smtpPass: user.smtpPass,
  53. // WeChat corporation account
  54. corpId: user.corpId,
  55. corpAgentId: user.corpAgentId,
  56. corpAppSecret: user.corpAppSecret,
  57. corpUserId: user.corpUserId,
  58. corpToken: '',
  59. });
  60. }
  61. });
  62. console.log('Token store initialized.');
  63. }
  64. function updateTokenStore(prefix, key, value) {
  65. let user = tokenStore.get(prefix);
  66. user[key] = value;
  67. tokenStore.set(prefix, user);
  68. }
  69. function getUserDefaultMethod(prefix) {
  70. let user = tokenStore.get(prefix);
  71. return user.defaultMethod;
  72. }
  73. function checkAccessToken(prefix, token) {
  74. let user = tokenStore.get(prefix);
  75. if (user.accessToken === '') {
  76. return true;
  77. } else {
  78. return user.accessToken === token;
  79. }
  80. }
  81. function checkPrefix(prefix) {
  82. let user = tokenStore.get(prefix);
  83. return user !== undefined;
  84. }
  85. function registerWebSocket(prefix, token, ws) {
  86. let user = tokenStore.get(prefix);
  87. if (user && user.accessToken === token) {
  88. updateTokenStore(prefix, 'ws', ws);
  89. } else {
  90. ws.terminate();
  91. }
  92. }
  93. module.exports = {
  94. initializeTokenStore,
  95. updateTokenStore,
  96. getUserDefaultMethod,
  97. tokenStore,
  98. checkAccessToken,
  99. checkPrefix,
  100. registerWebSocket,
  101. };