mirror of
https://github.com/halejohn/Cloudreve.git
synced 2026-01-26 09:34:57 +08:00
Feat: user setting
This commit is contained in:
@@ -9,7 +9,6 @@ import (
|
||||
"github.com/HFO4/cloudreve/pkg/filesystem/driver/local"
|
||||
"github.com/HFO4/cloudreve/pkg/filesystem/fsctx"
|
||||
"github.com/HFO4/cloudreve/pkg/serializer"
|
||||
"github.com/HFO4/cloudreve/pkg/util"
|
||||
"github.com/HFO4/cloudreve/service/explorer"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
@@ -294,7 +293,7 @@ func FileUploadStream(c *gin.Context) {
|
||||
File: c.Request.Body,
|
||||
Size: fileSize,
|
||||
Name: fileName,
|
||||
VirtualPath: util.DotPathToStandardPath(filePath),
|
||||
VirtualPath: filePath,
|
||||
}
|
||||
|
||||
// 创建文件系统
|
||||
|
||||
@@ -17,6 +17,7 @@ func ParamErrorMsg(filed string, tag string) string {
|
||||
"Path": "路径",
|
||||
"SourceID": "原始资源",
|
||||
"URL": "链接",
|
||||
"Nick": "昵称",
|
||||
}
|
||||
// 未通过的规则与中文对应
|
||||
tagMap := map[string]string{
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
model "github.com/HFO4/cloudreve/models"
|
||||
"github.com/HFO4/cloudreve/pkg/authn"
|
||||
"github.com/HFO4/cloudreve/pkg/serializer"
|
||||
"github.com/HFO4/cloudreve/pkg/thumb"
|
||||
"github.com/HFO4/cloudreve/pkg/util"
|
||||
"github.com/HFO4/cloudreve/service/user"
|
||||
"github.com/duo-labs/webauthn/webauthn"
|
||||
@@ -157,3 +158,117 @@ func UserTasks(c *gin.Context) {
|
||||
c.JSON(200, ErrorResponse(err))
|
||||
}
|
||||
}
|
||||
|
||||
// UserSetting 获取用户设定
|
||||
func UserSetting(c *gin.Context) {
|
||||
var service user.SettingService
|
||||
if err := c.ShouldBindUri(&service); err == nil {
|
||||
res := service.Settings(c, CurrentUser(c))
|
||||
c.JSON(200, res)
|
||||
} else {
|
||||
c.JSON(200, ErrorResponse(err))
|
||||
}
|
||||
}
|
||||
|
||||
// UseGravatar 设定头像使用全球通用
|
||||
func UseGravatar(c *gin.Context) {
|
||||
u := CurrentUser(c)
|
||||
if err := u.Update(map[string]interface{}{"avatar": "gravatar"}); err != nil {
|
||||
c.JSON(200, serializer.Err(serializer.CodeDBError, "无法更新头像", err))
|
||||
return
|
||||
}
|
||||
c.JSON(200, serializer.Response{})
|
||||
}
|
||||
|
||||
// UploadAvatar 从文件上传头像
|
||||
func UploadAvatar(c *gin.Context) {
|
||||
// 取得头像上传大小限制
|
||||
maxSize := model.GetIntSetting("avatar_size", 2097152)
|
||||
if c.Request.ContentLength == -1 || c.Request.ContentLength > int64(maxSize) {
|
||||
c.JSON(200, serializer.Err(serializer.CodeUploadFailed, "头像尺寸太大", nil))
|
||||
return
|
||||
}
|
||||
|
||||
// 取得上传的文件
|
||||
file, err := c.FormFile("avatar")
|
||||
if err != nil {
|
||||
c.JSON(200, serializer.Err(serializer.CodeIOFailed, "无法读取头像数据", err))
|
||||
return
|
||||
}
|
||||
|
||||
// 初始化头像
|
||||
r, err := file.Open()
|
||||
if err != nil {
|
||||
c.JSON(200, serializer.Err(serializer.CodeIOFailed, "无法读取头像数据", err))
|
||||
return
|
||||
}
|
||||
avatar, err := thumb.NewThumbFromFile(r, file.Filename)
|
||||
if err != nil {
|
||||
c.JSON(200, serializer.Err(serializer.CodeIOFailed, "无法解析图像数据", err))
|
||||
return
|
||||
}
|
||||
|
||||
// 创建头像
|
||||
u := CurrentUser(c)
|
||||
err = avatar.CreateAvatar(u.ID)
|
||||
if err != nil {
|
||||
c.JSON(200, serializer.Err(serializer.CodeIOFailed, "无法创建头像", err))
|
||||
return
|
||||
}
|
||||
|
||||
// 保存头像标记
|
||||
if err := u.Update(map[string]interface{}{
|
||||
"avatar": "file",
|
||||
}); err != nil {
|
||||
c.JSON(200, serializer.Err(serializer.CodeDBError, "无法更新头像", err))
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, serializer.Response{})
|
||||
}
|
||||
|
||||
// GetUserAvatar 获取用户头像
|
||||
func GetUserAvatar(c *gin.Context) {
|
||||
var service user.AvatarService
|
||||
if err := c.ShouldBindUri(&service); err == nil {
|
||||
res := service.Get(c)
|
||||
if res.Code == -301 {
|
||||
// 重定向到gravatar
|
||||
c.Redirect(301, res.Data.(string))
|
||||
}
|
||||
} else {
|
||||
c.JSON(200, ErrorResponse(err))
|
||||
}
|
||||
}
|
||||
|
||||
// UpdateOption 更改用户设定
|
||||
func UpdateOption(c *gin.Context) {
|
||||
var service user.SettingUpdateService
|
||||
if err := c.ShouldBindUri(&service); err == nil {
|
||||
var (
|
||||
subService user.OptionsChangeHandler
|
||||
subErr error
|
||||
)
|
||||
|
||||
switch service.Option {
|
||||
case "nick":
|
||||
subService = &user.ChangerNick{}
|
||||
case "vip":
|
||||
subService = &user.VIPUnsubscribe{}
|
||||
case "qq":
|
||||
subService = &user.QQBind{}
|
||||
}
|
||||
|
||||
subErr = c.ShouldBindJSON(subService)
|
||||
if subErr != nil {
|
||||
c.JSON(200, ErrorResponse(subErr))
|
||||
return
|
||||
}
|
||||
|
||||
res := subService.Update(c, CurrentUser(c))
|
||||
c.JSON(200, res)
|
||||
|
||||
} else {
|
||||
c.JSON(200, ErrorResponse(err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,3 +131,14 @@ func PayJSCallback(c *gin.Context) {
|
||||
payNotify.SendResponseMsg()
|
||||
|
||||
}
|
||||
|
||||
// QQCallback QQ互联回调
|
||||
func QQCallback(c *gin.Context) {
|
||||
var service vas.QQCallbackService
|
||||
if err := c.ShouldBindJSON(&service); err == nil {
|
||||
res := service.Callback(c, CurrentUser(c))
|
||||
c.JSON(200, res)
|
||||
} else {
|
||||
c.JSON(200, ErrorResponse(err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,6 +112,11 @@ func InitMasterRouter() *gin.Engine {
|
||||
middleware.HashID(hashid.UserID),
|
||||
controllers.GetUserShare,
|
||||
)
|
||||
// 获取用户头像
|
||||
user.GET("avatar/:id/:size",
|
||||
middleware.HashID(hashid.UserID),
|
||||
controllers.GetUserAvatar,
|
||||
)
|
||||
}
|
||||
|
||||
// 需要携带签名验证的
|
||||
@@ -132,6 +137,11 @@ func InitMasterRouter() *gin.Engine {
|
||||
// 回调接口
|
||||
callback := v3.Group("callback")
|
||||
{
|
||||
// QQ互联回调
|
||||
callback.POST(
|
||||
"qq",
|
||||
controllers.QQCallback,
|
||||
)
|
||||
// PAYJS回调
|
||||
callback.POST(
|
||||
"payjs",
|
||||
@@ -266,6 +276,14 @@ func InitMasterRouter() *gin.Engine {
|
||||
setting.GET("policies", controllers.UserAvailablePolicies)
|
||||
// 任务队列
|
||||
setting.GET("tasks", controllers.UserTasks)
|
||||
// 获取当前用户设定
|
||||
setting.GET("", controllers.UserSetting)
|
||||
// 从文件上传头像
|
||||
setting.POST("avatar", controllers.UploadAvatar)
|
||||
// 设定为Gravatar头像
|
||||
setting.PUT("avatar", controllers.UseGravatar)
|
||||
// 更改用户设定
|
||||
setting.PATCH(":option", controllers.UpdateOption)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user