feat(users): enable quota in handlers

This commit is contained in:
hexxa 2021-08-07 17:18:10 +08:00 committed by Hexxa
parent 75e10e6ad9
commit e73947de0d
4 changed files with 60 additions and 34 deletions

View file

@ -354,11 +354,19 @@ func (h *MultiUsersSvc) AddUser(c *gin.Context) {
return
}
spaceLimit := h.cfg.IntOr("Users.SpaceLimit", 1024)
uploadSpeedLimit := h.cfg.IntOr("Users.UploadSpeedLimit", 100*1024)
downloadSpeedLimit := h.cfg.IntOr("Users.DownloadSpeedLimit", 100*1024)
err = h.deps.Users().AddUser(&userstore.User{
ID: uid,
Name: req.Name,
Pwd: string(pwdHash),
Role: req.Role,
Quota: &userstore.Quota{
SpaceLimit: spaceLimit,
UploadSpeedLimit: uploadSpeedLimit,
DownloadSpeedLimit: downloadSpeedLimit,
},
})
if err != nil {
c.JSON(q.ErrResp(c, 500, err))

View file

@ -20,6 +20,9 @@ type UsersCfg struct {
CaptchaWidth int `json:"captchaWidth" yaml:"captchaWidth"`
CaptchaHeight int `json:"captchaHeight" yaml:"captchaHeight"`
CaptchaEnabled bool `json:"captchaEnabled" yaml:"captchaEnabled"`
UploadSpeedLimit int `json:"uploadSpeedLimit" yaml:"uploadSpeedLimit"`
DownloadSpeedLimit int `json:"downloadSpeedLimit" yaml:"downloadSpeedLimit"`
SpaceLimit int `json:"spaceLimit" yaml:"spaceLimit"`
}
type Secrets struct {
@ -66,6 +69,9 @@ func DefaultConfig() (string, error) {
CaptchaWidth: 256,
CaptchaHeight: 60,
CaptchaEnabled: true,
UploadSpeedLimit: 100 * 1024, // B
DownloadSpeedLimit: 100 * 1024, // B
SpaceLimit: 1024, // GB
},
Secrets: &Secrets{
TokenSecret: "",

View file

@ -17,14 +17,16 @@ const (
InitNs = "usersInit"
IDsNs = "ids"
UsersNs = "users"
PwdsNs = "pwds"
RolesNs = "roles"
RoleListNs = "roleList"
InitTimeKey = "initTime"
defaultSpaceLimit = 1024 // 1GB
defaultUploadSpeedLimit = 100 * 1024 // 100KB
defaultDownloadSpeedLimit = 100 * 1024 // 100KB
)
type Quota struct {
SpaceLimit int64 `json:"spaceLimit,string"`
SpaceLimit int `json:"spaceLimit"`
UploadSpeedLimit int `json:"uploadSpeedLimit"`
DownloadSpeedLimit int `json:"downloadSpeedLimit"`
}
@ -44,8 +46,6 @@ type IUserStore interface {
DelUser(id uint64) error
GetUser(id uint64) (*User, error)
GetUserByName(name string) (*User, error)
// SetName(id uint64, name string) error
// SetRole(id uint64, role string) error
SetInfo(id uint64, user *User) error
SetPwd(id uint64, pwd string) error
ListUsers() ([]*User, error)
@ -66,8 +66,6 @@ func NewKVUserStore(store kvstore.IKVStore) (*KVUserStore, error) {
for _, nsName := range []string{
IDsNs,
UsersNs,
PwdsNs,
RolesNs,
InitNs,
RoleListNs,
} {
@ -90,6 +88,11 @@ func (us *KVUserStore) Init(rootName, rootPwd string) error {
Name: rootName,
Pwd: rootPwd,
Role: AdminRole,
Quota: &Quota{
SpaceLimit: defaultSpaceLimit,
UploadSpeedLimit: defaultUploadSpeedLimit,
DownloadSpeedLimit: defaultDownloadSpeedLimit,
},
})
if err != nil {
return err

View file

@ -23,14 +23,23 @@ func TestUserStores(t *testing.T) {
t.Fatalf("passwords not match %s", err)
}
if root.Role != AdminRole {
t.Fatalf("incorrect root fole")
t.Fatalf("incorrect root role")
}
if root.Quota.SpaceLimit != defaultSpaceLimit {
t.Fatalf("incorrect root SpaceLimit")
}
if root.Quota.UploadSpeedLimit != defaultUploadSpeedLimit {
t.Fatalf("incorrect root UploadSpeedLimit")
}
if root.Quota.DownloadSpeedLimit != defaultDownloadSpeedLimit {
t.Fatalf("incorrect root DownloadSpeedLimit")
}
id, name1 := uint64(1), "test_user1"
pwd1, pwd2 := "666", "888"
role1, role2 := UserRole, AdminRole
spaceLimit1, upLimit1, downLimit1 := int64(3), 5, 7
spaceLimit2, upLimit2, downLimit2 := int64(11), 13, 17
spaceLimit1, upLimit1, downLimit1 := 3, 5, 7
spaceLimit2, upLimit2, downLimit2 := 11, 13, 17
err = store.AddUser(&User{
ID: id,