diff --git a/internal/op/room.go b/internal/op/room.go index 300df56..b14552d 100644 --- a/internal/op/room.go +++ b/internal/op/room.go @@ -2,6 +2,7 @@ package op import ( "errors" + "fmt" "hash/crc32" "sync/atomic" @@ -155,6 +156,9 @@ func (r *Room) HasPermission(userID string, permission model.RoomMemberPermissio } func (r *Room) LoadOrCreateRoomMember(userID string) (*model.RoomMember, error) { + if r.Settings.DisableJoinNewUser { + return r.LoadRoomMember(userID) + } member, ok := r.members.Load(userID) if ok { return member, nil @@ -200,7 +204,7 @@ func (r *Room) LoadRoomMember(userID string) (*model.RoomMember, error) { } member, err := db.GetRoomMemberRelation(r.ID, userID) if err != nil { - return nil, err + return nil, fmt.Errorf("get room member failed: %w", err) } if r.IsCreator(userID) { member.Role = model.RoomMemberRoleCreator diff --git a/server/middlewares/auth.go b/server/middlewares/auth.go index 1a84c9e..e6c960d 100644 --- a/server/middlewares/auth.go +++ b/server/middlewares/auth.go @@ -11,6 +11,7 @@ import ( "github.com/golang-jwt/jwt/v5" "github.com/sirupsen/logrus" "github.com/synctv-org/synctv/internal/conf" + "github.com/synctv-org/synctv/internal/db" "github.com/synctv-org/synctv/internal/op" "github.com/synctv-org/synctv/server/model" "github.com/zijiren233/gencontainer/synccache" @@ -166,17 +167,17 @@ func NewAuthRoomToken(user *op.User, room *op.Room) (string, error) { if room.IsPending() { return "", errors.New("room is pending, need admin to approve") } - if room.Settings.DisableJoinNewUser { - if _, err := room.GetRoomMemberPermission(user.ID); err != nil { - return "", errors.New("room is not allow new user to join") + + if _, err := room.LoadOrCreateRoomMember(user.ID); err != nil { + if errors.Is(err, db.ErrNotFound("")) { + return "", fmt.Errorf("this room was disabled join new user") } - } else if _, err := room.LoadOrCreateRoomMember(user.ID); err != nil { - return "", err + return "", fmt.Errorf("load room member failed: %w", err) } t, err := time.ParseDuration(conf.Conf.Jwt.Expire) if err != nil { - return "", err + return "", fmt.Errorf("parse jwt expire failed: %w", err) } claims := &AuthRoomClaims{ AuthClaims: AuthClaims{