Feat: room settings

pull/21/head
zijiren233 3 years ago
parent 7b709f55a9
commit 6f1c7960b5

@ -21,21 +21,20 @@ var (
)
type Room struct {
id string
password []byte
needPassword uint32
version uint64
current *current
rtmps *rtmps.Server
rtmpa *rtmps.App
hidden uint32
initOnce sync.Once
users rwmap.RWMap[string, *User]
rootUser *User
lastActive int64
createdAt int64
mid uint64
hub *hub
id string
settings settings
password []byte
version uint64
current *current
rtmps *rtmps.Server
rtmpa *rtmps.App
initOnce sync.Once
users rwmap.RWMap[string, *User]
rootUser *User
lastActive int64
createdAt int64
mid uint64
hub *hub
*movies
}
@ -195,15 +194,11 @@ func (r *Room) Close() error {
}
func (r *Room) SetHidden(hidden bool) {
if hidden {
atomic.StoreUint32(&r.hidden, 1)
} else {
atomic.StoreUint32(&r.hidden, 0)
}
r.settings.SetHidden(hidden)
}
func (r *Room) Hidden() bool {
return atomic.LoadUint32(&r.hidden) == 1
return r.settings.Hidden()
}
func (r *Room) Id() string {
@ -225,9 +220,9 @@ func (r *Room) SetPassword(password string) error {
return err
}
r.password = b
atomic.StoreUint32(&r.needPassword, 1)
r.settings.SetNeedPassword(true)
} else {
atomic.StoreUint32(&r.needPassword, 0)
r.settings.SetNeedPassword(false)
r.password = nil
}
r.updateVersion()
@ -254,7 +249,7 @@ func (r *Room) CheckPassword(password string) (ok bool) {
}
func (r *Room) NeedPassword() bool {
return atomic.LoadUint32(&r.needPassword) == 1
return r.settings.NeedPassword()
}
func (r *Room) Version() uint64 {

@ -0,0 +1,32 @@
package room
import "sync/atomic"
type settings struct {
hidden uint32
needPassword uint32
}
func (s *settings) Hidden() bool {
return atomic.LoadUint32(&s.hidden) == 1
}
func (s *settings) SetHidden(hidden bool) {
if hidden {
atomic.StoreUint32(&s.hidden, 1)
} else {
atomic.StoreUint32(&s.hidden, 0)
}
}
func (s *settings) NeedPassword() bool {
return atomic.LoadUint32(&s.needPassword) == 1
}
func (s *settings) SetNeedPassword(needPassword bool) {
if needPassword {
atomic.StoreUint32(&s.needPassword, 1)
} else {
atomic.StoreUint32(&s.needPassword, 0)
}
}

@ -87,6 +87,8 @@ func Init(e *gin.Engine, s *rtmps.Server, r *room.Rooms) {
needAuthRoom.PUT("/admin", AddAdmin)
needAuthRoom.DELETE("/admin", DelAdmin)
needAuthRoom.GET("/settings", RoomSettings)
}
{

@ -343,3 +343,19 @@ func DelAdmin(ctx *gin.Context) {
ctx.Status(http.StatusNoContent)
}
func RoomSettings(ctx *gin.Context) {
user := ctx.Value("user").(*room.User)
if !user.IsRoot() && !user.IsAdmin() {
ctx.AbortWithStatusJSON(http.StatusUnauthorized, model.NewApiErrorStringResp("only root or admin can get room settings"))
return
}
room := user.Room()
ctx.JSON(http.StatusOK, model.NewApiDataResp(gin.H{
"hidden": room.Hidden(),
"needPassword": room.NeedPassword(),
}))
}

Loading…
Cancel
Save