fix: format and room client hub cmp when delete

api-v2
zijiren233 1 year ago
parent 6bbe2035b4
commit 6acfd7fef1

@ -39,7 +39,7 @@ func InitLog(ctx context.Context) (err error) {
if err != nil {
logrus.Fatalf("log: log file path error: %v", err)
}
var l = &lumberjack.Logger{
l := &lumberjack.Logger{
Filename: conf.Conf.Log.FilePath,
MaxSize: conf.Conf.Log.MaxSize,
MaxBackups: conf.Conf.Log.MaxBackups,

@ -23,9 +23,7 @@ import (
"github.com/zijiren233/gencontainer/refreshcache"
)
var (
ProviderGroupSettings = make(map[model.SettingGroup]*ProviderGroupSetting)
)
var ProviderGroupSettings = make(map[model.SettingGroup]*ProviderGroupSetting)
type ProviderGroupSetting struct {
Enabled settings.BoolSetting
@ -36,26 +34,24 @@ type ProviderGroupSetting struct {
SignupNeedReview settings.BoolSetting
}
var (
Oauth2EnabledCache = refreshcache.NewRefreshCache[[]provider.OAuth2Provider](func(context.Context, ...any) ([]provider.OAuth2Provider, error) {
ps := providers.EnabledProvider()
r := make([]provider.OAuth2Provider, 0, ps.Len())
providers.EnabledProvider().Range(func(p provider.OAuth2Provider, value struct{}) bool {
r = append(r, p)
return true
})
slices.SortStableFunc(r, func(a, b provider.OAuth2Provider) int {
if a == b {
return 0
} else if natural.Less(a, b) {
return -1
} else {
return 1
}
})
return r, nil
}, 0)
)
var Oauth2EnabledCache = refreshcache.NewRefreshCache[[]provider.OAuth2Provider](func(context.Context, ...any) ([]provider.OAuth2Provider, error) {
ps := providers.EnabledProvider()
r := make([]provider.OAuth2Provider, 0, ps.Len())
providers.EnabledProvider().Range(func(p provider.OAuth2Provider, value struct{}) bool {
r = append(r, p)
return true
})
slices.SortStableFunc(r, func(a, b provider.OAuth2Provider) int {
if a == b {
return 0
} else if natural.Less(a, b) {
return -1
} else {
return 1
}
})
return r, nil
}, 0)
func InitProvider(ctx context.Context) (err error) {
logOur := log.StandardLogger().Writer()
@ -70,7 +66,7 @@ func InitProvider(ctx context.Context) (err error) {
return err
}
log.Infof("load oauth2 plugin: %s", op.PluginFile)
err := os.MkdirAll(filepath.Dir(op.PluginFile), 0755)
err := os.MkdirAll(filepath.Dir(op.PluginFile), 0o755)
if err != nil {
log.Fatalf("create plugin dir: %s failed: %s", filepath.Dir(op.PluginFile), err)
return err

@ -60,9 +60,7 @@ func initAndFixSettings(ss []settings.Setting) error {
if err != nil {
return err
}
var (
setting *model.Setting
)
var setting *model.Setting
list := new(maxHeap)
for _, s := range ss {
heap.Push(list, maxHeapItem{

@ -62,7 +62,6 @@ func InitCheckUpdate(ctx context.Context) error {
log.Errorf("check update error: %v", err)
}
}()
}
}()

@ -324,8 +324,7 @@ func translateBilibiliSubtitleToSrt(ctx context.Context, url string) ([]byte, er
return convertToSRT(&srt), nil
}
type BilibiliLiveCache struct {
}
type BilibiliLiveCache struct{}
func NewBilibiliLiveCacheInitFunc(movie *model.Movie) func(ctx context.Context, args ...struct{}) ([]byte, error) {
return func(ctx context.Context, args ...struct{}) ([]byte, error) {

@ -4,9 +4,7 @@ import (
"github.com/mojocn/base64Captcha"
)
var (
Captcha *base64Captcha.Captcha
)
var Captcha *base64Captcha.Captcha
func init() {
Captcha = base64Captcha.NewCaptcha(base64Captcha.DefaultDriverDigit, base64Captcha.DefaultMemStore)

@ -1,5 +1,3 @@
package conf
var (
Conf *Config
)
var Conf *Config

@ -75,10 +75,8 @@ func (h *Hub) serve() error {
clients.lock.RLock()
defer clients.lock.RUnlock()
for c := range clients.m {
if utils.In(message.ignoreId, c.u.ID) {
continue
}
if utils.In(message.ignoreClient, c) {
if utils.In(message.ignoreId, c.u.ID) ||
utils.In(message.ignoreClient, c) {
continue
}
if err := c.Send(message.data); err != nil {
@ -136,9 +134,7 @@ func (h *Hub) Closed() bool {
return atomic.LoadUint32(&h.closed) == 1
}
var (
ErrAlreadyClosed = fmt.Errorf("already closed")
)
var ErrAlreadyClosed = fmt.Errorf("already closed")
func (h *Hub) Close() error {
if !atomic.CompareAndSwapUint32(&h.closed, 0, 1) {
@ -146,7 +142,9 @@ func (h *Hub) Close() error {
}
close(h.exit)
h.clients.Range(func(id string, clients *clients) bool {
h.clients.Delete(id)
h.clients.CompareAndDelete(id, clients)
clients.lock.Lock()
defer clients.lock.Unlock()
for c := range clients.m {
delete(clients.m, c)
c.Close()
@ -188,6 +186,10 @@ func (h *Hub) RegClient(cli *Client) error {
c, _ := h.clients.LoadOrStore(cli.u.ID, &clients{})
c.lock.Lock()
defer c.lock.Unlock()
newC, loaded := h.clients.Load(cli.u.ID)
if !loaded || c != newC {
return h.RegClient(cli)
}
if c.m == nil {
c.m = make(map[*Client]struct{})
} else if _, ok := c.m[cli]; ok {

@ -148,7 +148,7 @@ func (u *User) AddRoomMovie(room *Room, movie *model.MovieBase) (*model.Movie, e
}
func (u *User) NewMovies(movies []*model.MovieBase) ([]*model.Movie, error) {
var ms = make([]*model.Movie, len(movies))
ms := make([]*model.Movie, len(movies))
for i, m := range movies {
movie, err := u.NewMovie(m)
if err != nil {

@ -4,9 +4,7 @@ import (
"github.com/synctv-org/synctv/internal/provider"
)
var (
allAggregation []provider.AggregationProviderInterface
)
var allAggregation []provider.AggregationProviderInterface
func addAggregation(ps ...provider.AggregationProviderInterface) {
allAggregation = append(allAggregation, ps...)

@ -50,7 +50,7 @@ func (p *AuthingProvider) Init(c provider.Oauth2Option) {
}
func (p *AuthingProvider) Provider() provider.OAuth2Provider {
return "authing" //插件名
return "authing" // 插件名
}
func (p *AuthingProvider) NewAuthURL(ctx context.Context, state string) (string, error) {
@ -90,7 +90,7 @@ type AuthingUserInfo struct {
func main() {
args := os.Args
var pluginMap = map[string]plugin.Plugin{
pluginMap := map[string]plugin.Plugin{
"Provider": &plugins.ProviderPlugin{Impl: newAuthingProvider(args[1])},
}
plugin.Serve(&plugin.ServeConfig{

@ -4,9 +4,8 @@ import (
"context"
"encoding/json"
"fmt"
"os"
"net/http"
"os"
plugin "github.com/hashicorp/go-plugin"
"github.com/synctv-org/synctv/internal/provider"
@ -53,7 +52,7 @@ func (p *FeishuSSOProvider) Init(c provider.Oauth2Option) {
}
func (p *FeishuSSOProvider) Provider() provider.OAuth2Provider {
return "feishu-sso" //插件名
return "feishu-sso" // 插件名
}
func (p *FeishuSSOProvider) NewAuthURL(ctx context.Context, state string) (string, error) {
@ -101,7 +100,7 @@ type FeishuSSOUserInfo struct {
func main() {
args := os.Args
var pluginMap = map[string]plugin.Plugin{
pluginMap := map[string]plugin.Plugin{
"Provider": &plugins.ProviderPlugin{Impl: newFeishuSSOProvider(args[1])},
}
plugin.Serve(&plugin.ServeConfig{

@ -90,7 +90,7 @@ type giteeUserInfo struct {
}
func main() {
var pluginMap = map[string]plugin.Plugin{
pluginMap := map[string]plugin.Plugin{
"Provider": &plugins.ProviderPlugin{Impl: newGiteeProvider()},
}
plugin.Serve(&plugin.ServeConfig{

@ -66,7 +66,8 @@ func NewProviderPlugin(name string, arg []string, Logger hclog.Logger) *plugin.C
Plugins: pluginMap,
Cmd: exec.Command(name, arg...),
AllowedProtocols: []plugin.Protocol{
plugin.ProtocolGRPC},
plugin.ProtocolGRPC,
},
Logger: Logger,
})
}

@ -63,8 +63,6 @@ var (
TsDisguisedAsPng = NewBoolSetting("ts_disguised_as_png", true, model.SettingGroupRtmp)
)
var (
DatabaseVersion = NewStringSetting("database_version", db.CurrentVersion, model.SettingGroupDatabase, WithBeforeSetString(func(ss StringSetting, s string) (string, error) {
return "", errors.New("not support change database version")
}))
)
var DatabaseVersion = NewStringSetting("database_version", db.CurrentVersion, model.SettingGroupDatabase, WithBeforeSetString(func(ss StringSetting, s string) (string, error) {
return "", errors.New("not support change database version")
}))

@ -11,9 +11,7 @@ import (
"github.com/zijiren233/gencontainer/rwmap"
)
var (
sysNotify SysNotify
)
var sysNotify SysNotify
func Init() {
sysNotify.Init()

@ -21,7 +21,7 @@ func SelfUpdate(ctx context.Context, url string) error {
log.Debugf("self update: current executable file: %s", currentExecFile)
tmp := filepath.Join(os.TempDir(), "synctv-server", fmt.Sprintf("self-update-%d", now))
if err := os.MkdirAll(tmp, 0755); err != nil {
if err := os.MkdirAll(tmp, 0o755); err != nil {
log.Errorf("self update: mkdir %s error: %v", tmp, err)
return err
}
@ -39,7 +39,7 @@ func SelfUpdate(ctx context.Context, url string) error {
}
log.Infof("self update: download success: %s", file)
if err := os.Chmod(file, 0755); err != nil {
if err := os.Chmod(file, 0o755); err != nil {
log.Errorf("self update: chmod %s error: %v", file, err)
return err
}

@ -100,7 +100,6 @@ func AdminSettings(ctx *gin.Context) {
ctx.JSON(http.StatusOK, model.NewApiDataResp(resp))
}
}
func AdminGetUsers(ctx *gin.Context) {
@ -160,7 +159,7 @@ func AdminGetUsers(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "createdAt":
if desc {
@ -275,7 +274,7 @@ func AdminGetRoomMembers(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "join":
if desc {
@ -498,7 +497,7 @@ func AdminGetRooms(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "createdAt":
if desc {
@ -579,7 +578,7 @@ func AdminGetUserRooms(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "createdAt":
if desc {
@ -665,7 +664,7 @@ func AdminGetUserJoinedRooms(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "createdAt":
if desc {

@ -16,22 +16,20 @@ import (
"github.com/synctv-org/synctv/utils"
)
var (
HOST = settings.NewStringSetting(
"host",
"",
model.SettingGroupServer,
settings.WithValidatorString(func(s string) error {
if s == "" {
return nil
}
if !strings.HasPrefix(s, "http://") && !strings.HasPrefix(s, "https://") {
return errors.New("host must start with http:// or https://")
}
_, err := url.Parse(s)
return err
}),
)
var HOST = settings.NewStringSetting(
"host",
"",
model.SettingGroupServer,
settings.WithValidatorString(func(s string) error {
if s == "" {
return nil
}
if !strings.HasPrefix(s, "http://") && !strings.HasPrefix(s, "https://") {
return errors.New("host must start with http:// or https://")
}
_, err := url.Parse(s)
return err
}),
)
func Init(e *gin.Engine) {

@ -73,7 +73,7 @@ func RoomMembers(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "join":
if desc {
@ -175,7 +175,7 @@ func RoomAdminMembers(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "join":
if desc {

@ -53,7 +53,7 @@ func genMovieInfo(
return nil, errors.New("movie is static folder, can't get movie info")
}
}
var movie = opMovie.Movie.Clone()
movie := opMovie.Movie.Clone()
if movie.MovieBase.VendorInfo.Vendor != "" {
vendor, err := vendors.NewVendorService(room, opMovie)
if err != nil {

@ -197,7 +197,7 @@ func RoomList(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "createdAt":
if desc {

@ -138,7 +138,7 @@ func UserRooms(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "createdAt":
if desc {
@ -209,7 +209,7 @@ func UserJoinedRooms(ctx *gin.Context) {
return
}
var desc = ctx.DefaultQuery("order", "desc") == "desc"
desc := ctx.DefaultQuery("order", "desc") == "desc"
switch ctx.DefaultQuery("sort", "name") {
case "createdAt":
if desc {

@ -134,7 +134,7 @@ AlistFSListResp:
return
}
var cli = vendor.LoadAlistClient(ctx.Query("backend"))
cli := vendor.LoadAlistClient(ctx.Query("backend"))
data, err := cli.FsList(ctx, &alist.FsListReq{
Token: aucd.Token,
Password: req.Password,

@ -40,7 +40,7 @@ func Parse(ctx *gin.Context) {
return
}
var cli = vendor.LoadBilibiliClient(ctx.Query("backend"))
cli := vendor.LoadBilibiliClient(ctx.Query("backend"))
resp, err := cli.Match(ctx, &bilibili.MatchReq{
Url: req.URL,

@ -152,7 +152,7 @@ EmbyFSListResp:
},
}
for _, p := range data.Paths {
var n = p.Name
n := p.Name
if p.Path == "1" {
n = aucd.Host
}

@ -81,7 +81,6 @@ func Login(ctx *gin.Context) {
Backend: backend,
EmbyUserID: data.UserId,
})
if err != nil {
ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorResp(err))
return

@ -29,8 +29,8 @@ type AuthClaims struct {
jwt.RegisteredClaims
}
func authUser(Authorization string) (*AuthClaims, error) {
t, err := jwt.ParseWithClaims(strings.TrimPrefix(Authorization, `Bearer `), &AuthClaims{}, func(token *jwt.Token) (any, error) {
func authUser(authorization string) (*AuthClaims, error) {
t, err := jwt.ParseWithClaims(strings.TrimPrefix(authorization, `Bearer `), &AuthClaims{}, func(token *jwt.Token) (any, error) {
return stream.StringToBytes(conf.Conf.Jwt.Secret), nil
})
if err != nil || !t.Valid {
@ -48,14 +48,7 @@ func AuthRoom(authorization, roomId string) (*op.UserEntry, *op.RoomEntry, error
return nil, nil, ErrAuthFailed
}
var userE *op.UserEntry
var err error
if authorization != "" {
userE, err = authenticateUser(authorization)
} else {
userE, err = authenticateGuest()
}
userE, err := authenticateUserOrGuest(authorization)
if err != nil {
return nil, nil, err
}
@ -69,6 +62,13 @@ func AuthRoom(authorization, roomId string) (*op.UserEntry, *op.RoomEntry, error
return userE, roomE, nil
}
func authenticateUserOrGuest(authorization string) (*op.UserEntry, error) {
if authorization != "" {
return authenticateUser(authorization)
}
return authenticateGuest()
}
func authenticateUser(Authorization string) (*op.UserEntry, error) {
claims, err := authUser(Authorization)
if err != nil {
@ -85,18 +85,8 @@ func authenticateUser(Authorization string) (*op.UserEntry, error) {
}
user := userE.Value()
if user.IsGuest() {
return nil, fmt.Errorf("guests are not allowed to join rooms by token")
}
if !user.CheckVersion(claims.UserVersion) {
return nil, ErrAuthExpired
}
if user.IsBanned() {
return nil, fmt.Errorf("user is banned")
}
if user.IsPending() {
return nil, fmt.Errorf("user is pending, need admin to approve")
if err := validateUser(user, claims.UserVersion); err != nil {
return nil, err
}
return userE, nil
@ -104,11 +94,27 @@ func authenticateUser(Authorization string) (*op.UserEntry, error) {
func authenticateGuest() (*op.UserEntry, error) {
if !settings.EnableGuest.Get() {
return nil, fmt.Errorf("guests is disabled")
return nil, fmt.Errorf("guests are disabled")
}
return op.LoadOrInitGuestUser()
}
func validateUser(user *op.User, userVersion uint32) error {
if user.IsGuest() {
return fmt.Errorf("guests are not allowed to join rooms by token")
}
if !user.CheckVersion(userVersion) {
return ErrAuthExpired
}
if user.IsBanned() {
return fmt.Errorf("user is banned")
}
if user.IsPending() {
return fmt.Errorf("user is pending, need admin to approve")
}
return nil
}
func authenticateRoomAccess(roomId string, user *op.User) (*op.RoomEntry, error) {
roomE, err := op.LoadOrInitRoomByID(roomId)
if err != nil {
@ -116,38 +122,46 @@ func authenticateRoomAccess(roomId string, user *op.User) (*op.RoomEntry, error)
}
room := roomE.Value()
if err := validateRoomAccess(room, user); err != nil {
return nil, err
}
return roomE, nil
}
func validateRoomAccess(room *op.Room, user *op.User) error {
if room.IsGuest(user.ID) {
if room.Settings.DisableGuest {
return nil, fmt.Errorf("guests are not allowed to join rooms")
return fmt.Errorf("guests are not allowed to join rooms")
}
if room.NeedPassword() {
return nil, fmt.Errorf("guests are not allowed to join rooms that require a password")
return fmt.Errorf("guests are not allowed to join rooms that require a password")
}
}
if room.IsBanned() {
return nil, fmt.Errorf("room is banned")
return fmt.Errorf("room is banned")
}
if room.IsPending() {
return nil, fmt.Errorf("room is pending, need admin to approve")
return fmt.Errorf("room is pending, need admin to approve")
}
rus, err := room.LoadMemberStatus(user.ID)
if err != nil {
return nil, err
return err
}
if !rus.IsActive() {
if rus.IsPending() {
return nil, fmt.Errorf("user is pending, need admin to approve")
return fmt.Errorf("user is pending, need admin to approve")
}
return nil, fmt.Errorf("user is banned")
return fmt.Errorf("user is banned")
}
return roomE, nil
return nil
}
func AuthUser(Authorization string) (*op.UserEntry, error) {
claims, err := authUser(Authorization)
func AuthUser(authorization string) (*op.UserEntry, error) {
claims, err := authUser(authorization)
if err != nil {
return nil, err
}
@ -162,38 +176,39 @@ func AuthUser(Authorization string) (*op.UserEntry, error) {
}
user := userE.Value()
if user.IsGuest() {
return nil, errors.New("user is guest, can not login")
if err := validateAuthUser(user, claims.UserVersion); err != nil {
return nil, err
}
if !user.CheckVersion(claims.UserVersion) {
return nil, ErrAuthExpired
}
return userE, nil
}
func validateAuthUser(user *op.User, userVersion uint32) error {
if user.IsGuest() {
return errors.New("user is guest, cannot login")
}
if !user.CheckVersion(userVersion) {
return ErrAuthExpired
}
if user.IsBanned() {
return nil, errors.New("user is banned")
return errors.New("user is banned")
}
if user.IsPending() {
return nil, errors.New("user is pending, need admin to approve")
return errors.New("user is pending, need admin to approve")
}
return userE, nil
return nil
}
func NewAuthUserToken(user *op.User) (string, error) {
if user.IsBanned() {
return "", errors.New("user banned")
}
if user.IsPending() {
return "", errors.New("user is pending, need admin to approve")
}
if user.IsGuest() {
return "", errors.New("user is guest, can not login")
if err := validateNewAuthUserToken(user); err != nil {
return "", err
}
t, err := time.ParseDuration(conf.Conf.Jwt.Expire)
if err != nil {
return "", err
}
claims := &AuthClaims{
UserId: user.ID,
UserVersion: user.Version(),
@ -205,6 +220,19 @@ func NewAuthUserToken(user *op.User) (string, error) {
return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(stream.StringToBytes(conf.Conf.Jwt.Secret))
}
func validateNewAuthUserToken(user *op.User) error {
if user.IsBanned() {
return errors.New("user banned")
}
if user.IsPending() {
return errors.New("user is pending, need admin to approve")
}
if user.IsGuest() {
return errors.New("user is guest, cannot login")
}
return nil
}
func AuthUserMiddleware(ctx *gin.Context) {
token := GetAuthorizationTokenFromContext(ctx)
if token == "" {
@ -219,13 +247,7 @@ func AuthUserMiddleware(ctx *gin.Context) {
user := userE.Value()
ctx.Set("user", userE)
log := ctx.MustGet("log").(*logrus.Entry)
if log.Data == nil {
log.Data = make(logrus.Fields, 3)
}
log.Data["uid"] = user.ID
log.Data["unm"] = user.Username
log.Data["uro"] = user.Role.String()
setLogFields(ctx, user, nil)
}
func AuthRoomMiddleware(ctx *gin.Context) {
@ -244,15 +266,7 @@ func AuthRoomMiddleware(ctx *gin.Context) {
ctx.Set("user", userE)
ctx.Set("room", roomE)
log := ctx.MustGet("log").(*logrus.Entry)
if log.Data == nil {
log.Data = make(logrus.Fields, 5)
}
log.Data["rid"] = room.ID
log.Data["rnm"] = room.Name
log.Data["uid"] = user.ID
log.Data["unm"] = user.Username
log.Data["uro"] = user.Role.String()
setLogFields(ctx, user, room)
}
func AuthRoomWithoutGuestMiddleware(ctx *gin.Context) {
@ -263,7 +277,7 @@ func AuthRoomWithoutGuestMiddleware(ctx *gin.Context) {
user := ctx.MustGet("user").(*synccache.Entry[*op.User]).Value()
if user.IsGuest() {
ctx.AbortWithStatusJSON(http.StatusForbidden, model.NewApiErrorStringResp("guest is no permission"))
ctx.AbortWithStatusJSON(http.StatusForbidden, model.NewApiErrorStringResp("guest has no permission"))
return
}
}
@ -325,23 +339,24 @@ func AuthRootMiddleware(ctx *gin.Context) {
}
func GetAuthorizationTokenFromContext(ctx *gin.Context) string {
if token := ctx.GetHeader("Authorization"); token != "" {
ctx.Set("token", token)
return token
sources := []func() string{
func() string { return ctx.GetHeader("Authorization") },
func() string {
if ctx.IsWebsocket() {
return ctx.GetHeader("Sec-WebSocket-Protocol")
}
return ""
},
func() string { return ctx.Query("token") },
}
if ctx.IsWebsocket() {
if token := ctx.GetHeader("Sec-WebSocket-Protocol"); token != "" {
for _, source := range sources {
if token := source(); token != "" {
ctx.Set("token", token)
return token
}
}
if token := ctx.Query("token"); token != "" {
ctx.Set("token", token)
return token
}
ctx.Set("token", "")
return ""
}
@ -369,3 +384,26 @@ func GetRoomIdFromContext(ctx *gin.Context) (string, error) {
ctx.Set("roomId", "")
return "", errors.New("room id is empty")
}
func setLogFields(ctx *gin.Context, user *op.User, room *op.Room) {
log := ctx.MustGet("log").(*logrus.Entry)
if log.Data == nil {
l := 5
if user != nil {
l += 3
}
if room != nil {
l += 2
}
log.Data = make(logrus.Fields, l)
}
if user != nil {
log.Data["uid"] = user.ID
log.Data["unm"] = user.Username
log.Data["uro"] = user.Role.String()
}
if room != nil {
log.Data["rid"] = room.ID
log.Data["rnm"] = room.Name
}
}

@ -10,9 +10,7 @@ import (
"google.golang.org/grpc/connectivity"
)
var (
ErrInvalidID = errors.New("invalid id")
)
var ErrInvalidID = errors.New("invalid id")
type AdminSettingsReq map[string]any

@ -18,9 +18,11 @@ type RoomMembersResp struct {
AdminPermissions dbModel.RoomAdminPermission `json:"adminPermissions"`
}
type RoomApproveMemberReq = UserIDReq
type RoomBanMemberReq = UserIDReq
type RoomUnbanMemberReq = UserIDReq
type (
RoomApproveMemberReq = UserIDReq
RoomBanMemberReq = UserIDReq
RoomUnbanMemberReq = UserIDReq
)
type RoomSetMemberPermissionsReq struct {
UserIDReq

@ -52,7 +52,6 @@ func Init(e *gin.Engine) {
// }
// })
}
}
func newFSHandler(fileSys fs.FS) func(ctx *gin.Context) {

@ -286,7 +286,6 @@ func getLocalIPs() []net.IP {
addrs, err := net.InterfaceAddrs()
if err != nil {
return localIPs
}
for _, addr := range addrs {

Loading…
Cancel
Save