Fix: room pending and approve

pull/31/head
zijiren233 3 years ago
parent a4403066a7
commit cf2ef63454

@ -19,24 +19,7 @@ func CreateRoom(name, password string, maxCount int64, conf ...db.CreateRoomConf
if err != nil { if err != nil {
return nil, err return nil, err
} }
return InitRoom(r) return LoadOrInitRoom(r)
}
func InitRoom(room *model.Room) (*Room, error) {
r := &Room{
Room: *room,
version: crc32.ChecksumIEEE(room.HashedPassword),
current: newCurrent(),
movies: movies{
roomID: room.ID,
},
}
i, loaded := roomCache.LoadOrStore(room.ID, r, time.Duration(settings.RoomTTL.Get()))
if loaded {
return r, errors.New("room already init")
}
return i.Value(), nil
} }
var ( var (
@ -51,18 +34,14 @@ func LoadOrInitRoom(room *model.Room) (*Room, error) {
case model.RoomStatusPending: case model.RoomStatusPending:
return nil, ErrRoomPending return nil, ErrRoomPending
} }
t := time.Duration(settings.RoomTTL.Get()) i, _ := roomCache.LoadOrStore(room.ID, &Room{
i, loaded := roomCache.LoadOrStore(room.ID, &Room{
Room: *room, Room: *room,
version: crc32.ChecksumIEEE(room.HashedPassword), version: crc32.ChecksumIEEE(room.HashedPassword),
current: newCurrent(), current: newCurrent(),
movies: movies{ movies: movies{
roomID: room.ID, roomID: room.ID,
}, },
}, t) }, time.Duration(settings.RoomTTL.Get()))
if loaded {
i.SetExpiration(time.Now().Add(t))
}
return i.Value(), nil return i.Value(), nil
} }

@ -58,7 +58,7 @@ func Init(e *gin.Engine) {
// 查找房间 // 查找房间
room.GET("/list", Rooms) room.GET("/list", Rooms)
room.POST("/room", ApprovePendingRoom) room.POST("/approve", ApprovePendingRoom)
room.POST("/ban", BanRoom) room.POST("/ban", BanRoom)

@ -134,6 +134,12 @@ func NewAuthRoomToken(user *op.User, room *op.Room) (string, error) {
if user.IsPending() { if user.IsPending() {
return "", errors.New("user is pending, need admin to approve") return "", errors.New("user is pending, need admin to approve")
} }
if room.IsBanned() {
return "", errors.New("room banned")
}
if room.IsPending() {
return "", errors.New("room is pending, need admin to approve")
}
if room.Settings.DisableJoinNewUser { if room.Settings.DisableJoinNewUser {
if _, err := room.GetRoomUserRelation(user.ID); err != nil { if _, err := room.GetRoomUserRelation(user.ID); err != nil {
return "", errors.New("room is not allow new user to join") return "", errors.New("room is not allow new user to join")

Loading…
Cancel
Save