瀏覽代碼

feat: able to set whether to enable message persistence and message rendering now

JustSong 2 年之前
父節點
當前提交
6ed173affa
共有 5 個文件被更改,包括 70 次插入20 次删除
  1. 2 0
      common/constants.go
  2. 30 8
      controller/message.go
  3. 14 12
      controller/misc.go
  4. 6 0
      model/option.go
  5. 18 0
      web/src/components/SystemSetting.js

+ 2 - 0
common/constants.go

@@ -29,6 +29,8 @@ var GitHubOAuthEnabled = false
 var WeChatAuthEnabled = false
 var TurnstileCheckEnabled = false
 var RegisterEnabled = true
+var MessagePersistenceEnabled = true
+var MessageRenderEnabled = true
 
 var SMTPServer = ""
 var SMTPAccount = ""

+ 30 - 8
controller/message.go

@@ -113,14 +113,18 @@ func pushMessageHelper(c *gin.Context, message *model.Message) {
 			message.Channel = channel.TypeEmail
 		}
 	}
-	err = message.UpdateAndInsert(user.Id)
-	message.URL = fmt.Sprintf("%s/message/%s", common.ServerAddress, message.Link)
-	if err != nil {
-		c.JSON(http.StatusOK, gin.H{
-			"success": false,
-			"message": err.Error(),
-		})
-		return
+	if common.MessagePersistenceEnabled {
+		err = message.UpdateAndInsert(user.Id)
+		if err != nil {
+			c.JSON(http.StatusOK, gin.H{
+				"success": false,
+				"message": err.Error(),
+			})
+			return
+		}
+		message.URL = fmt.Sprintf("%s/message/%s", common.ServerAddress, message.Link)
+	} else {
+		message.URL = fmt.Sprintf("%s/message/unsaved", common.ServerAddress)
 	}
 	err = channel.SendMessage(message, &user)
 	if err != nil {
@@ -143,7 +147,25 @@ func GetStaticFile(c *gin.Context) {
 }
 
 func RenderMessage(c *gin.Context) {
+	if !common.MessageRenderEnabled {
+		c.HTML(http.StatusOK, "message.html", gin.H{
+			"title":       "无法渲染",
+			"time":        time.Now().Format("2006-01-02 15:04:05"),
+			"description": "超级管理员禁用了消息渲染",
+			"content":     "很抱歉,您所使用的消息推送服务的管理员禁用了消息渲染功能,因此您的消息无法渲染。",
+		})
+		return
+	}
 	link := c.Param("link")
+	if link == "unsaved" {
+		c.HTML(http.StatusOK, "message.html", gin.H{
+			"title":       "无法渲染",
+			"time":        time.Now().Format("2006-01-02 15:04:05"),
+			"description": "超级管理员禁用了消息持久化",
+			"content":     "很抱歉,您所使用的消息推送服务的管理员禁用了消息持久化功能,您的消息并没有存储到数据库中,因此无法渲染。",
+		})
+		return
+	}
 	message, err := model.GetMessageByLink(link)
 	if err != nil {
 		c.Status(http.StatusNotFound)

+ 14 - 12
controller/misc.go

@@ -14,18 +14,20 @@ func GetStatus(c *gin.Context) {
 		"success": true,
 		"message": "",
 		"data": gin.H{
-			"version":            common.Version,
-			"start_time":         common.StartTime,
-			"email_verification": common.EmailVerificationEnabled,
-			"github_oauth":       common.GitHubOAuthEnabled,
-			"github_client_id":   common.GitHubClientId,
-			"system_name":        common.SystemName,
-			"footer_html":        common.Footer,
-			"wechat_qrcode":      common.WeChatAccountQRCodeImageURL,
-			"wechat_login":       common.WeChatAuthEnabled,
-			"server_address":     common.ServerAddress,
-			"turnstile_check":    common.TurnstileCheckEnabled,
-			"turnstile_site_key": common.TurnstileSiteKey,
+			"version":             common.Version,
+			"start_time":          common.StartTime,
+			"email_verification":  common.EmailVerificationEnabled,
+			"github_oauth":        common.GitHubOAuthEnabled,
+			"github_client_id":    common.GitHubClientId,
+			"system_name":         common.SystemName,
+			"footer_html":         common.Footer,
+			"wechat_qrcode":       common.WeChatAccountQRCodeImageURL,
+			"wechat_login":        common.WeChatAuthEnabled,
+			"server_address":      common.ServerAddress,
+			"turnstile_check":     common.TurnstileCheckEnabled,
+			"turnstile_site_key":  common.TurnstileSiteKey,
+			"message_persistence": common.MessagePersistenceEnabled,
+			"message_render":      common.MessageRenderEnabled,
 		},
 	})
 	return

+ 6 - 0
model/option.go

@@ -32,6 +32,8 @@ func InitOptionMap() {
 	common.OptionMap["WeChatAuthEnabled"] = strconv.FormatBool(common.WeChatAuthEnabled)
 	common.OptionMap["TurnstileCheckEnabled"] = strconv.FormatBool(common.TurnstileCheckEnabled)
 	common.OptionMap["RegisterEnabled"] = strconv.FormatBool(common.RegisterEnabled)
+	common.OptionMap["MessagePersistenceEnabled"] = strconv.FormatBool(common.MessagePersistenceEnabled)
+	common.OptionMap["MessageRenderEnabled"] = strconv.FormatBool(common.MessageRenderEnabled)
 	common.OptionMap["SMTPServer"] = ""
 	common.OptionMap["SMTPAccount"] = ""
 	common.OptionMap["SMTPToken"] = ""
@@ -103,6 +105,10 @@ func updateOptionMap(key string, value string) {
 			common.TurnstileCheckEnabled = boolValue
 		case "RegisterEnabled":
 			common.RegisterEnabled = boolValue
+		case "MessagePersistenceEnabled":
+			common.MessagePersistenceEnabled = boolValue
+		case "MessageRenderEnabled":
+			common.MessageRenderEnabled = boolValue
 		}
 	}
 	switch key {

+ 18 - 0
web/src/components/SystemSetting.js

@@ -24,6 +24,8 @@ const SystemSetting = () => {
     TurnstileSiteKey: '',
     TurnstileSecretKey: '',
     RegisterEnabled: '',
+    MessagePersistenceEnabled: '',
+    MessageRenderEnabled: '',
   });
   let originInputs = {};
   let [loading, setLoading] = useState(false);
@@ -57,6 +59,8 @@ const SystemSetting = () => {
       case 'WeChatAuthEnabled':
       case 'TurnstileCheckEnabled':
       case 'RegisterEnabled':
+      case 'MessagePersistenceEnabled':
+      case 'MessageRenderEnabled':
         value = inputs[key] === 'true' ? 'false' : 'true';
         break;
       default:
@@ -179,6 +183,20 @@ const SystemSetting = () => {
           <Form.Button onClick={submitServerAddress}>
             更新服务器地址
           </Form.Button>
+          <Form.Group inline>
+            <Form.Checkbox
+              checked={inputs.MessagePersistenceEnabled === 'true'}
+              label='保存消息到数据库(此项为否时,用户推送的消息将不会保存到数据库)'
+              name='MessagePersistenceEnabled'
+              onChange={handleInputChange}
+            />
+            <Form.Checkbox
+              checked={inputs.MessageRenderEnabled === 'true'}
+              label='允许消息渲染(此项为否时,将禁用消息渲染)'
+              name='MessageRenderEnabled'
+              onChange={handleInputChange}
+            />
+          </Form.Group>
           <Divider />
           <Header as='h3'>配置登录注册</Header>
           <Form.Group inline>