seo 检索开关

This commit is contained in:
ryan
2026-06-09 08:35:13 +08:00
parent b0023787c5
commit 2ae55da52e
16 changed files with 163 additions and 5 deletions
@@ -146,9 +146,9 @@ func TestListSystemConfigs(t *testing.T) {
var configs []model.SystemConfig
json.Unmarshal(dataBytes, &configs)
// Defaults seed 22 configurations
if len(configs) != 22 {
t.Errorf("expected 22 default configs, got %d", len(configs))
// Defaults seed 23 configurations
if len(configs) != 23 {
t.Errorf("expected 23 default configs, got %d", len(configs))
}
})
+24
View File
@@ -39,6 +39,7 @@ type PublicConfigResponse struct {
EmailLoginVerificationEnabled bool `json:"email_login_verification_enabled"` // 是否启用邮箱登录验证
EmailRegisterVerificationEnabled bool `json:"email_register_verification_enabled"` // 是否启用邮箱注册验证
MenuDisplayConfig map[string]bool `json:"menu_display_config"` // 目录显示配置
SearchEngineIndexingEnabled bool `json:"search_engine_indexing_enabled"` // 是否允许搜索引擎检索
}
// GetPublicConfig 获取公共配置
@@ -117,6 +118,11 @@ func GetPublicConfig(c *gin.Context) {
emailRegisterVerificationEnabled = val
}
var searchEngineIndexingEnabled bool
if val, err := model.GetBoolByKey(ctx, model.ConfigKeySearchEngineIndexingEnabled); err == nil {
searchEngineIndexingEnabled = val
}
menuDisplayConfig, err := model.GetMenuDisplayConfig(ctx)
if err != nil {
menuDisplayConfig = make(map[string]bool)
@@ -135,7 +141,25 @@ func GetPublicConfig(c *gin.Context) {
EmailLoginVerificationEnabled: emailLoginVerificationEnabled,
EmailRegisterVerificationEnabled: emailRegisterVerificationEnabled,
MenuDisplayConfig: menuDisplayConfig,
SearchEngineIndexingEnabled: searchEngineIndexingEnabled,
}
c.JSON(http.StatusOK, util.OK(response))
}
// GetRobotsTXT 动态生成 robots.txt
// @Summary 获取 robots.txt
// @Description 根据系统配置决定是否允许搜索引擎检索,并返回相应的 robots.txt 文件内容
// @Tags config
// @Produce text/plain
// @Success 200 {string} string "robots.txt 内容"
// @Router /robots.txt [get]
func GetRobotsTXT(c *gin.Context) {
ctx := c.Request.Context()
enabled, err := model.GetBoolByKey(ctx, model.ConfigKeySearchEngineIndexingEnabled)
content := "User-Agent: *\nDisallow: /\n"
if err == nil && enabled {
content = "User-Agent: *\nAllow: /\n"
}
c.Data(http.StatusOK, "text/plain; charset=utf-8", []byte(content))
}
+1
View File
@@ -100,6 +100,7 @@ func init() {
// Disable standard DB/Redis initializations during tests to prevent connection attempts.
if isTest() {
c.Database.Enabled = false
c.Database.SQLitePath = ":memory:"
c.Redis.Enabled = false
c.ClickHouse.Enabled = false
}
+7
View File
@@ -105,6 +105,7 @@ func initSystemConfigs() {
ensureConfigKeyExists(model.ConfigKeyEmailLoginVerificationEnabled, "false", "system", "是否开启邮箱登录验证(true/false)")
ensureConfigKeyExists(model.ConfigKeyEmailRegisterVerificationEnabled, "false", "system", "是否开启邮箱注册验证(true/false)")
ensureConfigKeyExists(model.ConfigKeyMenuDisplayConfig, "{}", "system", "目录显示配置(JSON 字符串,格式为 {url: enabled})")
ensureConfigKeyExists(model.ConfigKeySearchEngineIndexingEnabled, "false", "system", "是否允许搜索引擎爬取/检索该站点(true/false)")
return
}
@@ -241,6 +242,12 @@ func initSystemConfigs() {
Type: "system",
Description: "目录显示配置(JSON 字符串,格式为 {url: enabled})",
},
{
Key: model.ConfigKeySearchEngineIndexingEnabled,
Value: "false",
Type: "system",
Description: "是否允许搜索引擎爬取/检索该站点(true/false)",
},
}
if err := tx.Create(&defaultConfigs).Error; err != nil {
+1
View File
@@ -55,6 +55,7 @@ const (
ConfigKeyEmailLoginVerificationEnabled = "email_login_verification_enabled" // 是否启用邮箱登录验证
ConfigKeyEmailRegisterVerificationEnabled = "email_register_verification_enabled" // 是否启用邮箱注册验证
ConfigKeyMenuDisplayConfig = "menu_display_config" // 目录显示配置 (JSON 字符串)
ConfigKeySearchEngineIndexingEnabled = "search_engine_indexing_enabled" // 是否允许搜索引擎检索
)
const (
+3
View File
@@ -105,6 +105,9 @@ func Serve() {
// Serve files by ID
r.GET("/f/:id", upload.ServeFileByID)
// Dynamic robots.txt serving
r.GET("/robots.txt", publicconfig.GetRobotsTXT)
apiGroup := r.Group(config.Config.App.APIPrefix)
{
if !config.Config.App.IsProduction() {
+6
View File
@@ -218,6 +218,12 @@ func seedDefaultConfigs(t *testing.T, tx *gorm.DB) {
Type: "system",
Description: "目录显示配置(JSON 字符串,格式为 {url: enabled})",
},
{
Key: model.ConfigKeySearchEngineIndexingEnabled,
Value: "false",
Type: "system",
Description: "是否允许搜索引擎检索",
},
}
if err := tx.Create(&defaultConfigs).Error; err != nil {