فهرست منبع

Move permission config to mautrix-go

Tulir Asokan 3 سال پیش
والد
کامیت
15129c0acc
3فایلهای تغییر یافته به همراه10 افزوده شده و 102 حذف شده
  1. 1 95
      config/bridge.go
  2. 2 1
      portal.go
  3. 7 6
      user.go

+ 1 - 95
config/bridge.go

@@ -18,7 +18,6 @@ package config
 
 import (
 	"fmt"
-	"strconv"
 	"strings"
 	"text/template"
 
@@ -121,7 +120,7 @@ type BridgeConfig struct {
 		SharedSecret string `yaml:"shared_secret"`
 	} `yaml:"provisioning"`
 
-	Permissions PermissionConfig `yaml:"permissions"`
+	Permissions bridgeconfig.PermissionConfig `yaml:"permissions"`
 
 	Relay RelaybotConfig `yaml:"relay"`
 
@@ -214,99 +213,6 @@ func (bc BridgeConfig) FormatUsername(username string) string {
 	return buf.String()
 }
 
-type PermissionConfig map[string]PermissionLevel
-
-type PermissionLevel int
-
-const (
-	PermissionLevelDefault PermissionLevel = 0
-	PermissionLevelRelay   PermissionLevel = 5
-	PermissionLevelUser    PermissionLevel = 10
-	PermissionLevelAdmin   PermissionLevel = 100
-)
-
-func (pc *PermissionConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
-	rawPC := make(map[string]string)
-	err := unmarshal(&rawPC)
-	if err != nil {
-		return err
-	}
-
-	if *pc == nil {
-		*pc = make(map[string]PermissionLevel)
-	}
-	for key, value := range rawPC {
-		switch strings.ToLower(value) {
-		case "relaybot", "relay":
-			(*pc)[key] = PermissionLevelRelay
-		case "user":
-			(*pc)[key] = PermissionLevelUser
-		case "admin":
-			(*pc)[key] = PermissionLevelAdmin
-		default:
-			val, err := strconv.Atoi(value)
-			if err != nil {
-				(*pc)[key] = PermissionLevelDefault
-			} else {
-				(*pc)[key] = PermissionLevel(val)
-			}
-		}
-	}
-	return nil
-}
-
-func (pc *PermissionConfig) MarshalYAML() (interface{}, error) {
-	if *pc == nil {
-		return nil, nil
-	}
-	rawPC := make(map[string]string)
-	for key, value := range *pc {
-		switch value {
-		case PermissionLevelRelay:
-			rawPC[key] = "relay"
-		case PermissionLevelUser:
-			rawPC[key] = "user"
-		case PermissionLevelAdmin:
-			rawPC[key] = "admin"
-		default:
-			rawPC[key] = strconv.Itoa(int(value))
-		}
-	}
-	return rawPC, nil
-}
-
-func (pc PermissionConfig) IsRelayWhitelisted(userID id.UserID) bool {
-	return pc.GetPermissionLevel(userID) >= PermissionLevelRelay
-}
-
-func (pc PermissionConfig) IsWhitelisted(userID id.UserID) bool {
-	return pc.GetPermissionLevel(userID) >= PermissionLevelUser
-}
-
-func (pc PermissionConfig) IsAdmin(userID id.UserID) bool {
-	return pc.GetPermissionLevel(userID) >= PermissionLevelAdmin
-}
-
-func (pc PermissionConfig) GetPermissionLevel(userID id.UserID) PermissionLevel {
-	permissions, ok := pc[string(userID)]
-	if ok {
-		return permissions
-	}
-
-	_, homeserver, _ := userID.Parse()
-	permissions, ok = pc[homeserver]
-	if len(homeserver) > 0 && ok {
-		return permissions
-	}
-
-	permissions, ok = pc["*"]
-	if ok {
-		return permissions
-	}
-
-	return PermissionLevelDefault
-}
-
 type RelaybotConfig struct {
 	Enabled          bool                         `yaml:"enabled"`
 	AdminOnly        bool                         `yaml:"admin_only"`

+ 2 - 1
portal.go

@@ -40,6 +40,7 @@ import (
 	"golang.org/x/image/draw"
 	"golang.org/x/image/webp"
 	"google.golang.org/protobuf/proto"
+	"maunium.net/go/mautrix/bridge/bridgeconfig"
 
 	log "maunium.net/go/maulogger/v2"
 
@@ -98,7 +99,7 @@ func (portal *Portal) MarkEncrypted() {
 }
 
 func (portal *Portal) ReceiveMatrixEvent(user bridge.User, evt *event.Event) {
-	if user.GetPermissionLevel() >= bridge.PermissionUser || portal.HasRelaybot() {
+	if user.GetPermissionLevel() >= bridgeconfig.PermissionLevelUser || portal.HasRelaybot() {
 		portal.matrixMessages <- PortalMatrixMessage{user: user.(*User), evt: evt}
 	}
 }

+ 7 - 6
user.go

@@ -32,6 +32,7 @@ import (
 	"time"
 
 	log "maunium.net/go/maulogger/v2"
+	"maunium.net/go/mautrix/bridge/bridgeconfig"
 
 	"maunium.net/go/mautrix"
 	"maunium.net/go/mautrix/appservice"
@@ -63,7 +64,7 @@ type User struct {
 	Admin            bool
 	Whitelisted      bool
 	RelayWhitelisted bool
-	PermissionLevel  bridge.PermissionLevel
+	PermissionLevel  bridgeconfig.PermissionLevel
 
 	mgmtCreateLock  sync.Mutex
 	spaceCreateLock sync.Mutex
@@ -116,7 +117,7 @@ func (br *WABridge) GetIUser(userID id.UserID, create bool) bridge.User {
 	return u
 }
 
-func (user *User) GetPermissionLevel() bridge.PermissionLevel {
+func (user *User) GetPermissionLevel() bridgeconfig.PermissionLevel {
 	return user.PermissionLevel
 }
 
@@ -219,10 +220,10 @@ func (br *WABridge) NewUser(dbUser *database.User) *User {
 		lastPresence: types.PresenceUnavailable,
 	}
 
-	user.RelayWhitelisted = user.bridge.Config.Bridge.Permissions.IsRelayWhitelisted(user.MXID)
-	user.Whitelisted = user.bridge.Config.Bridge.Permissions.IsWhitelisted(user.MXID)
-	user.Admin = user.bridge.Config.Bridge.Permissions.IsAdmin(user.MXID)
-	user.PermissionLevel = bridge.PermissionLevel(user.bridge.Config.Bridge.Permissions.GetPermissionLevel(user.MXID))
+	user.PermissionLevel = user.bridge.Config.Bridge.Permissions.Get(user.MXID)
+	user.RelayWhitelisted = user.PermissionLevel >= bridgeconfig.PermissionLevelRelay
+	user.Whitelisted = user.PermissionLevel >= bridgeconfig.PermissionLevelUser
+	user.Admin = user.PermissionLevel >= bridgeconfig.PermissionLevelAdmin
 	if len(user.bridge.Config.Homeserver.StatusEndpoint) > 0 {
 		user.bridgeStateQueue = make(chan BridgeState, 10)
 		go user.bridgeStateLoop()