github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/routers/controllers/site.go (about)

     1  package controllers
     2  
     3  import (
     4  	model "github.com/cloudreve/Cloudreve/v3/models"
     5  	"github.com/cloudreve/Cloudreve/v3/pkg/conf"
     6  	"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
     7  	"github.com/cloudreve/Cloudreve/v3/pkg/util"
     8  	"github.com/cloudreve/Cloudreve/v3/pkg/wopi"
     9  	"github.com/gin-gonic/gin"
    10  	"github.com/mojocn/base64Captcha"
    11  )
    12  
    13  // SiteConfig 获取站点全局配置
    14  func SiteConfig(c *gin.Context) {
    15  	siteConfig := model.GetSettingByNames(
    16  		"siteName",
    17  		"login_captcha",
    18  		"reg_captcha",
    19  		"email_active",
    20  		"forget_captcha",
    21  		"email_active",
    22  		"themes",
    23  		"defaultTheme",
    24  		"home_view_method",
    25  		"share_view_method",
    26  		"authn_enabled",
    27  		"captcha_ReCaptchaKey",
    28  		"captcha_type",
    29  		"captcha_TCaptcha_CaptchaAppId",
    30  		"register_enabled",
    31  		"show_app_promotion",
    32  	)
    33  
    34  	var wopiExts []string
    35  	if wopi.Default != nil {
    36  		wopiExts = wopi.Default.AvailableExts()
    37  	}
    38  
    39  	// 如果已登录,则同时返回用户信息和标签
    40  	user, _ := c.Get("user")
    41  	if user, ok := user.(*model.User); ok {
    42  		c.JSON(200, serializer.BuildSiteConfig(siteConfig, user, wopiExts))
    43  		return
    44  	}
    45  
    46  	c.JSON(200, serializer.BuildSiteConfig(siteConfig, nil, wopiExts))
    47  }
    48  
    49  // Ping 状态检查页面
    50  func Ping(c *gin.Context) {
    51  	version := conf.BackendVersion
    52  	if conf.IsPro == "true" {
    53  		version += "-pro"
    54  	}
    55  
    56  	c.JSON(200, serializer.Response{
    57  		Code: 0,
    58  		Data: version,
    59  	})
    60  }
    61  
    62  // Captcha 获取验证码
    63  func Captcha(c *gin.Context) {
    64  	options := model.GetSettingByNames(
    65  		"captcha_IsShowHollowLine",
    66  		"captcha_IsShowNoiseDot",
    67  		"captcha_IsShowNoiseText",
    68  		"captcha_IsShowSlimeLine",
    69  		"captcha_IsShowSineLine",
    70  	)
    71  	// 验证码配置
    72  	var configD = base64Captcha.ConfigCharacter{
    73  		Height: model.GetIntSetting("captcha_height", 60),
    74  		Width:  model.GetIntSetting("captcha_width", 240),
    75  		//const CaptchaModeNumber:数字,CaptchaModeAlphabet:字母,CaptchaModeArithmetic:算术,CaptchaModeNumberAlphabet:数字字母混合.
    76  		Mode:               model.GetIntSetting("captcha_mode", 3),
    77  		ComplexOfNoiseText: model.GetIntSetting("captcha_ComplexOfNoiseText", 0),
    78  		ComplexOfNoiseDot:  model.GetIntSetting("captcha_ComplexOfNoiseDot", 0),
    79  		IsShowHollowLine:   model.IsTrueVal(options["captcha_IsShowHollowLine"]),
    80  		IsShowNoiseDot:     model.IsTrueVal(options["captcha_IsShowNoiseDot"]),
    81  		IsShowNoiseText:    model.IsTrueVal(options["captcha_IsShowNoiseText"]),
    82  		IsShowSlimeLine:    model.IsTrueVal(options["captcha_IsShowSlimeLine"]),
    83  		IsShowSineLine:     model.IsTrueVal(options["captcha_IsShowSineLine"]),
    84  		CaptchaLen:         model.GetIntSetting("captcha_CaptchaLen", 6),
    85  	}
    86  
    87  	// 生成验证码
    88  	idKeyD, capD := base64Captcha.GenerateCaptcha("", configD)
    89  	// 将验证码UID存入Session以便后续验证
    90  	util.SetSession(c, map[string]interface{}{
    91  		"captchaID": idKeyD,
    92  	})
    93  
    94  	// 将验证码图像编码为Base64
    95  	base64stringD := base64Captcha.CaptchaWriteToBase64Encoding(capD)
    96  
    97  	c.JSON(200, serializer.Response{
    98  		Code: 0,
    99  		Data: base64stringD,
   100  	})
   101  }
   102  
   103  // Manifest 获取manifest.json
   104  func Manifest(c *gin.Context) {
   105  	options := model.GetSettingByNames(
   106  		"siteName",
   107  		"siteTitle",
   108  		"pwa_small_icon",
   109  		"pwa_medium_icon",
   110  		"pwa_large_icon",
   111  		"pwa_display",
   112  		"pwa_theme_color",
   113  		"pwa_background_color",
   114  	)
   115  
   116  	c.JSON(200, map[string]interface{}{
   117  		"short_name": options["siteName"],
   118  		"name":       options["siteTitle"],
   119  		"icons": []map[string]string{
   120  			{
   121  				"src":   options["pwa_small_icon"],
   122  				"sizes": "64x64 32x32 24x24 16x16",
   123  				"type":  "image/x-icon",
   124  			},
   125  			{
   126  				"src":   options["pwa_medium_icon"],
   127  				"type":  "image/png",
   128  				"sizes": "192x192",
   129  			},
   130  			{
   131  				"src":   options["pwa_large_icon"],
   132  				"type":  "image/png",
   133  				"sizes": "512x512",
   134  			},
   135  		},
   136  		"start_url":        ".",
   137  		"display":          options["pwa_display"],
   138  		"theme_color":      options["pwa_theme_color"],
   139  		"background_color": options["pwa_background_color"],
   140  	})
   141  }