mirror of
https://github.com/halejohn/Cloudreve.git
synced 2026-01-26 17:41:57 +08:00
Feat: login / register setting in dashboard
This commit is contained in:
13
service/admin/list.go
Normal file
13
service/admin/list.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
model "github.com/HFO4/cloudreve/models"
|
||||
"github.com/HFO4/cloudreve/pkg/serializer"
|
||||
)
|
||||
|
||||
// GroupList 获取用户组列表
|
||||
func (service *NoParamService) GroupList() serializer.Response {
|
||||
var res []model.Group
|
||||
model.DB.Model(&model.Group{}).Find(&res)
|
||||
return serializer.Response{Data: res}
|
||||
}
|
||||
@@ -36,13 +36,20 @@ func (service *BatchSettingGet) Get() serializer.Response {
|
||||
|
||||
// Change 批量更改站点设定
|
||||
func (service *BatchSettingChangeService) Change() serializer.Response {
|
||||
cacheClean := make([]string, 0, len(service.Options))
|
||||
|
||||
for _, setting := range service.Options {
|
||||
|
||||
if err := model.DB.Model(&model.Setting{}).Where("name = ?", setting.Key).Update("value", setting.Value).Error; err != nil {
|
||||
cache.Deletes(cacheClean, "setting_")
|
||||
return serializer.DBErr("设置 "+setting.Key+" 更新失败", err)
|
||||
}
|
||||
cache.Deletes([]string{setting.Key}, "setting_")
|
||||
|
||||
cacheClean = append(cacheClean, setting.Key)
|
||||
}
|
||||
|
||||
cache.Deletes(cacheClean, "setting_")
|
||||
|
||||
return serializer.Response{}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -203,8 +204,13 @@ func (service *PolicyChange) Update(c *gin.Context, user *model.User) serializer
|
||||
func (service *QQBind) Update(c *gin.Context, user *model.User) serializer.Response {
|
||||
// 解除绑定
|
||||
if user.OpenID != "" {
|
||||
// 只通过QQ登录的用户无法解除绑定
|
||||
if strings.HasSuffix(user.Email, "@login.qq.com") {
|
||||
return serializer.Err(serializer.CodeNoPermissionErr, "无法解绑此账号", nil)
|
||||
}
|
||||
|
||||
if err := user.Update(map[string]interface{}{"open_id": ""}); err != nil {
|
||||
return serializer.DBErr("接触绑定失败", err)
|
||||
return serializer.DBErr("接除绑定失败", err)
|
||||
}
|
||||
return serializer.Response{
|
||||
Data: "",
|
||||
|
||||
@@ -3,7 +3,9 @@ package vas
|
||||
import (
|
||||
model "github.com/HFO4/cloudreve/models"
|
||||
"github.com/HFO4/cloudreve/pkg/qq"
|
||||
"github.com/HFO4/cloudreve/pkg/request"
|
||||
"github.com/HFO4/cloudreve/pkg/serializer"
|
||||
"github.com/HFO4/cloudreve/pkg/thumb"
|
||||
"github.com/HFO4/cloudreve/pkg/util"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
@@ -54,9 +56,52 @@ func (service *QQCallbackService) Callback(c *gin.Context, user *model.User) ser
|
||||
res.Code = 203
|
||||
return res
|
||||
|
||||
} else {
|
||||
// 无匹配用户,创建新用户
|
||||
}
|
||||
|
||||
return serializer.Response{}
|
||||
// 无匹配用户,创建新用户
|
||||
if !model.IsTrueVal(model.GetSettingByName("qq_direct_login")) {
|
||||
return serializer.Err(serializer.CodeNoPermissionErr, "此QQ号未绑定任何账号", nil)
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
userInfo, err := qq.GetUserInfo(credential)
|
||||
if err != nil {
|
||||
return serializer.Err(serializer.CodeNotSet, "无法获取用户信息", err)
|
||||
}
|
||||
|
||||
// 生成邮箱地址
|
||||
fakeEmail := util.RandStringRunes(16) + "@login.qq.com"
|
||||
|
||||
// 创建用户
|
||||
defaultGroup := model.GetIntSetting("default_group", 2)
|
||||
|
||||
newUser := model.NewUser()
|
||||
newUser.Email = fakeEmail
|
||||
newUser.Nick = userInfo.Nick
|
||||
newUser.SetPassword("")
|
||||
newUser.Status = model.Active
|
||||
newUser.GroupID = uint(defaultGroup)
|
||||
newUser.OpenID = credential.OpenID
|
||||
newUser.Avatar = "file"
|
||||
|
||||
// 创建用户
|
||||
if err := model.DB.Create(&newUser).Error; err != nil {
|
||||
return serializer.DBErr("此邮箱已被使用", err)
|
||||
}
|
||||
|
||||
// 下载头像
|
||||
r := request.HTTPClient{}
|
||||
rawAvatar := r.Request("GET", userInfo.Avatar, nil)
|
||||
if avatar, err := thumb.NewThumbFromFile(rawAvatar.Response.Body, "avatar.jpg"); err == nil {
|
||||
avatar.CreateAvatar(newUser.ID)
|
||||
}
|
||||
|
||||
// 登录
|
||||
util.SetSession(c, map[string]interface{}{"user_id": newUser.ID})
|
||||
|
||||
newUser, _ = model.GetActiveUserByID(newUser.ID)
|
||||
|
||||
res := serializer.BuildUserResponse(newUser)
|
||||
res.Code = 203
|
||||
return res
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user