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 }