This commit is contained in:
puuuuh 2025-08-10 19:58:05 +08:00 committed by GitHub
commit 6cf7872106
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 20 additions and 5 deletions

View File

@ -222,6 +222,14 @@ func (manager *localManager) WriteUserInfo(u UserInfo) (err error) {
if err != nil { if err != nil {
return err return err
} }
k, v := bucket.Cursor().First()
// Registration required full UserInfo
if k == nil && v == nil {
if u.SessionsCap == nil || u.UpRate == nil || u.DownRate == nil ||
u.UpCredit == nil || u.DownCredit == nil || u.ExpiryTime == nil {
return ErrInvalidUserInfo
}
}
if u.SessionsCap != nil { if u.SessionsCap != nil {
if err = bucket.Put([]byte("SessionsCap"), i32ToB(*u.SessionsCap)); err != nil { if err = bucket.Put([]byte("SessionsCap"), i32ToB(*u.SessionsCap)); err != nil {
return err return err

View File

@ -41,10 +41,16 @@ func TestLocalManager_WriteUserInfo(t *testing.T) {
mgr, cleaner := makeManager(t) mgr, cleaner := makeManager(t)
defer cleaner() defer cleaner()
err := mgr.WriteUserInfo(mockUserInfo) /* New user with partial UserInfo */
if err != nil { err := mgr.WriteUserInfo(UserInfo{
t.Error(err) UID: mockUID,
} SessionsCap: JustInt32(*mockUserInfo.SessionsCap + 1),
})
assert.Error(t, err, ErrInvalidUserInfo)
/* New user with full UserInfo */
err = mgr.WriteUserInfo(mockUserInfo)
assert.NoError(t, err)
got, err := mgr.GetUserInfo(mockUID) got, err := mgr.GetUserInfo(mockUID)
assert.NoError(t, err) assert.NoError(t, err)

View File

@ -52,6 +52,7 @@ var ErrMangerIsVoid = errors.New("cannot perform operation with user manager as
var ErrNoUpCredit = errors.New("No upload credit left") var ErrNoUpCredit = errors.New("No upload credit left")
var ErrNoDownCredit = errors.New("No download credit left") var ErrNoDownCredit = errors.New("No download credit left")
var ErrUserExpired = errors.New("User has expired") var ErrUserExpired = errors.New("User has expired")
var ErrInvalidUserInfo = errors.New("Invalid user info")
type UserManager interface { type UserManager interface {
AuthenticateUser([]byte) (int64, int64, error) AuthenticateUser([]byte) (int64, int64, error)