Explorar o código

:tada: front page part is done

Song %!s(int64=4) %!d(string=hai) anos
pai
achega
f815124699
Modificáronse 2 ficheiros con 235 adicións e 96 borrados
  1. 31 3
      routers/index.js
  2. 204 93
      views/configure.ejs

+ 31 - 3
routers/index.js

@@ -2,7 +2,9 @@ const express = require('express');
 const router = express.Router();
 const { User } = require('../models');
 const { tokenStore } = require('../common/token');
-const { requestToken } = require('../common/wechat');
+const requestWeChatToken = require('../common/wechat').requestToken;
+const requestCorpToken = require('../common/wechat-corp').requestToken;
+
 const {
   userRequired,
   adminRequired,
@@ -117,19 +119,28 @@ router.get('/configure', userRequired, (req, res, next) => {
 router.post('/configure', userRequired, async (req, res, next) => {
   let id = req.session.user.id;
   let user = {
+    // Common
     username: req.body.username,
     password: req.body.password,
     accessToken: req.body.accessToken,
-    email: req.body.email,
+    defaultMethod: req.body.defaultMethod,
     prefix: req.body.prefix,
+    // WeChat public account
     wechatAppId: req.body.wechatAppId,
     wechatAppSecret: req.body.wechatAppSecret,
     wechatTemplateId: req.body.wechatTemplateId,
     wechatOpenId: req.body.wechatOpenId,
     wechatVerifyToken: req.body.wechatVerifyToken,
+    // Email
+    email: req.body.email,
     smtpServer: req.body.smtpServer,
     smtpUser: req.body.smtpUser,
     smtpPass: req.body.smtpPass,
+    // WeChat corp
+    corpId: req.body.corpId,
+    corpAgentId: req.body.corpAgentId,
+    corpAppSecret: req.body.corpAppSecret,
+    corpUserId: req.body.corpUserId,
   };
   for (let field in user) {
     let value = user[field];
@@ -150,18 +161,35 @@ router.post('/configure', userRequired, async (req, res, next) => {
     if (userObj) {
       await userObj.update(user);
     }
+    if (userObj.prefix !== req.session.user.prefix) {
+      tokenStore.delete(req.session.user.prefix);
+    }
     req.session.user = userObj;
     tokenStore.set(userObj.prefix, {
+      // Common
+      accessToken: userObj.accessToken,
+      defaultMethod: userObj.defaultMethod,
+      // WeChat test account
       wechatAppId: userObj.wechatAppId,
       wechatAppSecret: userObj.wechatAppSecret,
       wechatTemplateId: userObj.wechatTemplateId,
       wechatOpenId: userObj.wechatOpenId,
       wechatVerifyToken: userObj.wechatVerifyToken,
-      token: await requestToken(userObj.wechatAppId, userObj.wechatAppSecret),
+      wechatToken: await requestWeChatToken(
+        userObj.wechatAppId,
+        userObj.wechatAppSecret
+      ),
+      // Email
       email: userObj.email,
       smtpServer: userObj.smtpServer,
       smtpUser: userObj.smtpUser,
       smtpPass: userObj.smtpPass,
+      // WeChat corporation account
+      corpId: userObj.corpId,
+      corpAgentId: userObj.corpAgentId,
+      corpAppSecret: userObj.corpAppSecret,
+      corpUserId: userObj.corpUserId,
+      corpToken: await requestCorpToken(userObj.corpId, userObj.corpAppSecret),
     });
     message = '配置更新成功';
     console.debug(tokenStore);

+ 204 - 93
views/configure.ejs

@@ -1,5 +1,21 @@
 <%- include('./partials/header') %>
 
+<script>
+  // Credit: https://codepen.io/t7team/pen/ZowdRN
+  function openTab(e, tabName) {
+    let i, x, tabLinks;
+    x = document.getElementsByClassName('content-tab');
+    for (i = 0; i < x.length; i++) {
+      x[i].style.display = 'none';
+    }
+    tabLinks = document.getElementsByClassName('tab');
+    for (i = 0; i < x.length; i++) {
+      tabLinks[i].className = tabLinks[i].className.replace(' is-active', '');
+    }
+    document.getElementById(tabName).style.display = 'block';
+    e.className += ' is-active';
+  }
+</script>
 <div class="normal-container">
     <div>
         <h2 class="title">配置页面</h2>
@@ -13,144 +29,239 @@
                     你正在使用的密码是默认密码,请尽快修改!
                 </div>
             </article>
-        <% }%>
+        <% } %>
         <article class="message is-light">
             <div class="message-header">
                 <p>注意</p>
             </div>
             <div class="message-body">
-                <a target="_blank" href="https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index">微信公众平台测试号配置链接</a>,如果遇到问题,请仔细阅读 <a target="_blank" href="https://github.com/songquanpeng/message-pusher/blob/master/README.md">README</a>,如果还不能解决,请提 <a target="_blank" href="https://github.com/songquanpeng/message-pusher/issues/new">issue</a>。
-                <br>
-                <br>
-                根据你在 config.js 中填写的 href 以及你的 prefix,你的接口验证 URL为:<%- verifyUrl %>。
-                <br>
-                <br>
-                如果本项目对你有意义,<a target="_blank" href="https://github.com/songquanpeng/message-pusher">请 ⭐ 该项目</a>,<del>这是我继续维护的主要动力</del>,谢谢 :)。
+                如果遇到问题,请仔细阅读
+                <a target="_blank"
+                   href="https://github.com/songquanpeng/message-pusher/blob/master/README.md">README</a>,如果还不能解决,请提
+                <a target="_blank"
+                   href="https://github.com/songquanpeng/message-pusher/issues/new">issue</a>。
+                <br />
+                <br />
+                如果本项目对你有意义,<a target="_blank" href="https://github.com/songquanpeng/message-pusher">请 ⭐ 该项目</a>,
+                <del>这是我继续维护的主要动力</del>
+                ,谢谢 :)。
             </div>
         </article>
         <form action="/configure" method="post">
-            <div class="field">
-                <label class="label">APP ID</label>
-                <div class="control">
-                    <input class="input" name="wechatAppId" value="<%- wechatAppId %>" type="text" required placeholder="请输入 APP ID">
-                </div>
+            <div class="tabs">
+                <ul>
+                    <li class="tab is-active" onclick="openTab(this,'userTab')"><a>用户设置</a></li>
+                    <li class="tab" onclick="openTab(this,'testTab')"><a>微信测试号设置</a></li>
+                    <li class="tab" onclick="openTab(this,'corpTab')"><a>微信企业号设置</a></li>
+                    <li class="tab" onclick="openTab(this,'emailTab')"><a>邮件推送设置</a></li>
+                </ul>
             </div>
 
-            <div class="field">
-                <label class="label">APP SECRET</label>
-                <div class="control">
-                    <input class="input" name="wechatAppSecret" value="<%- wechatAppSecret %>" type="text" required placeholder="请输入 APP SECRET">
+            <div id="userTab" class="content-tab">
+                <div class="field">
+                    <label class="label">用户名</label>
+                    <div class="control">
+                        <input class="input" name="username" value="<%- username; %>" type="text"
+                               placeholder="请输入新的用户名">
+                    </div>
                 </div>
-            </div>
-
-            <div class="field">
-                <label class="label">OPEN ID</label>
-                <div class="control">
-                    <input class="input" name="wechatOpenId" value="<%- wechatOpenId %>" type="text" required placeholder="请输入你的 OPEN ID">
+                <div class="field">
+                    <label class="label">密码</label>
+                    <div class="control">
+                        <input class="input" name="password" type="text" placeholder="请输入新的密码">
+                    </div>
                 </div>
-            </div>
-
-            <div class="field">
-                <label class="label">TEMPLATE ID</label>
-                <div class="control">
-                    <input class="input" name="wechatTemplateId" value="<%- wechatTemplateId %>" type="text" required placeholder="请输入一个模板通知 ID">
+                <div class="field">
+                    <label class="label">默认推送方式</label>
+                    <article class="message">
+                        <div class="message-body">
+                            可选值有:test(使用微信测试号进行推送),corp(使用微信企业号进行推送),email(使用邮件进行推送)
+                        </div>
+                    </article>
+                    <div class="control">
+                        <input class="input" name="defaultMethod" value="<%- defaultMethod; %>" type="text"
+                               placeholder="请输入新的默认推送方式">
+                    </div>
+                </div>
+                <div class="field">
+                    <label class="label">前缀</label>
+                    <article class="message">
+                        <div class="message-body">
+                            前缀默认和用户名相同,如非必要,无需修改
+                        </div>
+                    </article>
+                    <div class="control">
+                        <input class="input" name="prefix" value="<%- prefix ? prefix : username; %>" type="text"
+                               placeholder="请输入你的前缀">
+                    </div>
                 </div>
-            </div>
 
-            <div class="field">
-                <label class="label">TOKEN</label>
-                <div class="control">
-                    <input class="input" name="wechatVerifyToken" value="<%- wechatVerifyToken %>" type="text" required placeholder="请输入你的 TOKEN">
+                <div class="field">
+                    <label class="label">ACCESS TOKEN</label>
+                    <article class="message">
+                        <div class="message-body">
+                            Access Token 可防止未授权者利用本系统向你发送消息,留空则不做该检查
+                        </div>
+                    </article>
+                    <div class="control">
+                        <input class="input" name="accessToken" value="<%- accessToken; %>" type="text"
+                               placeholder="请设置新的 ACCESS TOKEN(可不填)">
+                    </div>
                 </div>
             </div>
-
-            <div class="field">
-                <label class="label">前缀</label>
+            <div id="testTab" class="content-tab" style="display:none">
                 <article class="message">
                     <div class="message-body">
-                        前缀默认和用户名相同,如非必要,无需修改
+                        <a target="_blank"
+                           href="https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index">微信公众平台测试号配置链接</a>
+                        <br>
+                        <br>
+                        根据你在 config.js 中填写的 href 以及你的 prefix,你的接口验证 URL为:<%- verifyUrl; %>。
+                        <br>
                     </div>
                 </article>
-                <div class="control">
-                    <input class="input" name="prefix" value="<%- prefix ? prefix : username %>" type="text" placeholder="请输入你的前缀">
+                <div class="field">
+                    <label class="label">APP ID</label>
+                    <div class="control">
+                        <input class="input" name="wechatAppId" value="<%- wechatAppId; %>" type="text" required
+                               placeholder="请输入 APP ID">
+                    </div>
                 </div>
-            </div>
 
-            <div class="field">
-                <label class="label">ACCESS TOKEN</label>
-                <article class="message">
-                    <div class="message-body">
-                        Access Token 可防止未授权者利用本系统向你发送消息,留空则不做该检查
+                <div class="field">
+                    <label class="label">APP SECRET</label>
+                    <div class="control">
+                        <input class="input" name="wechatAppSecret" value="<%- wechatAppSecret; %>" type="text" required
+                               placeholder="请输入 APP SECRET">
                     </div>
-                </article>
-                <div class="control">
-                    <input class="input" name="accessToken" value="<%- accessToken %>" type="text" placeholder="请设置新的 ACCESS TOKEN(可不填)">
                 </div>
-            </div>
 
-            <div class="field">
-                <label class="label">默认目标邮箱</label>
-                <article class="message">
-                    <div class="message-body">
-                        要用 QQ 邮箱或者 Foxmail 邮箱,否则将无法通过微信得到邮件消息提醒
+                <div class="field">
+                    <label class="label">OPEN ID</label>
+                    <div class="control">
+                        <input class="input" name="wechatOpenId" value="<%- wechatOpenId; %>" type="text" required
+                               placeholder="请输入你的 OPEN ID">
                     </div>
-                </article>
-                <div class="control">
-                    <input class="input" name="email" value="<%- email %>" type="email" placeholder="请输入你的邮箱(可不填)">
                 </div>
-            </div>
 
-            <div class="field">
-                <label class="label">SMTP 服务器地址</label>
-                <article class="message">
-                    <div class="message-body">
-                        此项可选,但如果不配置该项,则无法发送邮件类型的消息
+                <div class="field">
+                    <label class="label">TEMPLATE ID</label>
+                    <div class="control">
+                        <input class="input" name="wechatTemplateId" value="<%- wechatTemplateId; %>" type="text"
+                               required
+                               placeholder="请输入一个模板通知 ID">
                     </div>
-                </article>
-                <div class="control">
-                    <input class="input" name="smtpServer" value="<%- smtpServer %>" type="text" placeholder="如 smtp.qq.com">
                 </div>
-            </div>
 
-            <div class="field">
-                <label class="label">SMTP 账号</label>
-                <article class="message">
-                    <div class="message-body">
-                        此项可选,但如果不配置该项,则无法发送邮件类型的消息
+                <div class="field">
+                    <label class="label">TOKEN</label>
+                    <div class="control">
+                        <input class="input" name="wechatVerifyToken" value="<%- wechatVerifyToken; %>" type="text"
+                               required
+                               placeholder="请输入你的 TOKEN">
                     </div>
-                </article>
-                <div class="control">
-                    <input class="input" name="smtpUser" value="<%- smtpUser %>" type="email" placeholder="请输入 SMTP 账号(是一个邮箱地址)">
                 </div>
             </div>
-
-            <div class="field">
-                <label class="label">SMTP 凭据</label>
+            <div id="corpTab" class="content-tab" style="display:none">
                 <article class="message">
                     <div class="message-body">
-                        此项可选,但如果不配置该项,则无法发送邮件类型的消息
+                        <a target="_blank" href="https://work.weixin.qq.com/">在此处注册微信企业号</a>,之后<a target="_blank"
+                                                                                                  href="https://work.weixin.qq.com/wework_admin/frame#profile/wxPlugin">在此处扫码关注</a>,
+                        再之后<a target="_blank"
+                               href="https://work.weixin.qq.com/wework_admin/frame#apps">在此处创建一个应用</a>。
+                        <br>
                     </div>
                 </article>
-                <div class="control">
-                    <input class="input" name="smtpPass" type="text" placeholder="请输入新的 SMTP Token">
+                <div class="field">
+                    <label class="label">企业 ID</label>
+                    <article class="message">
+                        <div class="message-body">
+                            <a target="_blank"
+                               href="https://work.weixin.qq.com/wework_admin/frame#profile">在此处找到企业 ID</a>
+                            <br>
+                        </div>
+                    </article>
+                    <div class="control">
+                        <input class="input" name="corpId" value="<%- corpId; %>" type="text" required
+                               placeholder="请输入企业 ID">
+                    </div>
+                </div>
+                <div class="field">
+                    <label class="label">应用 AgentId</label>
+                    <article class="message">
+                        <div class="message-body">
+                            应用详情页可找到
+                        </div>
+                    </article>
+                    <div class="control">
+                        <input class="input" name="corpAgentId" value="<%- corpAgentId; %>" type="text" required
+                               placeholder="请输入应用的 AgentId">
+                    </div>
+                </div>
+                <div class="field">
+                    <label class="label">应用 Secret</label>
+                    <article class="message">
+                        <div class="message-body">
+                            应用详情页可找到
+                        </div>
+                    </article>
+                    <div class="control">
+                        <input class="input" name="corpAppSecret" value="<%- corpAppSecret; %>" type="text" required
+                               placeholder="请输入应用的 Secret">
+                    </div>
+                </div>
+                <div class="field">
+                    <label class="label">用户账号</label>
+                    <article class="message">
+                        <div class="message-body">
+                            <a target="_blank"
+                               href="https://work.weixin.qq.com/wework_admin/frame#contacts">在此处找到你的用户账号</a>
+                            <br>
+                        </div>
+                    </article>
+                    <div class="control">
+                        <input class="input" name="corpUserId" value="<%- corpUserId; %>" type="text" required
+                               placeholder="请输入你的 corpUserId">
+                    </div>
                 </div>
             </div>
+            <div id="emailTab" class="content-tab" style="display:none">
+                <div class="field">
+                    <label class="label">默认目标邮箱</label>
+                    <article class="message">
+                        <div class="message-body">
+                            要用 QQ 邮箱或者 Foxmail 邮箱,否则将无法通过微信得到邮件消息提醒
+                        </div>
+                    </article>
+                    <div class="control">
+                        <input class="input" name="email" value="<%- email; %>" type="email" placeholder="请输入你的邮箱(可不填)">
+                    </div>
+                </div>
 
-            <div class="field">
-                <label class="label">用户名</label>
-                <div class="control">
-                    <input class="input" name="username" value="<%- username %>" type="text" placeholder="请输入新的用户名">
+                <div class="field">
+                    <label class="label">SMTP 服务器地址</label>
+                    <div class="control">
+                        <input class="input" name="smtpServer" value="<%- smtpServer; %>" type="text"
+                               placeholder="如 smtp.qq.com">
+                    </div>
                 </div>
-            </div>
 
-            <div class="field">
-                <label class="label">密码</label>
-                <div class="control">
-                    <input class="input" name="password" type="text" placeholder="请输入新的密码">
+                <div class="field">
+                    <label class="label">SMTP 账号</label>
+                    <div class="control">
+                        <input class="input" name="smtpUser" value="<%- smtpUser; %>" type="email"
+                               placeholder="请输入 SMTP 账号(是一个邮箱地址)">
+                    </div>
                 </div>
-            </div>
 
-            <div class="field is-grouped is-grouped-right">
+                <div class="field">
+                    <label class="label">SMTP 凭据</label>
+                    <div class="control">
+                        <input class="input" name="smtpPass" type="text" placeholder="请输入新的 SMTP Token">
+                    </div>
+                </div>
+            </div>
+            <div class="field is-grouped is-grouped-right" style="margin-top: 16px">
                 <div class="control">
                     <input type="submit" class="button is-light" value="提交">
                 </div>