Feat: user setting

This commit is contained in:
HFO4
2020-02-19 16:05:54 +08:00
parent 33a917cc75
commit 4420a75c04
16 changed files with 577 additions and 20 deletions

View File

@@ -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,
}
// 创建文件系统

View File

@@ -17,6 +17,7 @@ func ParamErrorMsg(filed string, tag string) string {
"Path": "路径",
"SourceID": "原始资源",
"URL": "链接",
"Nick": "昵称",
}
// 未通过的规则与中文对应
tagMap := map[string]string{

View File

@@ -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))
}
}

View File

@@ -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))
}
}