mirror of
https://github.com/tulir/mautrix-whatsapp
synced 2025-03-05 00:40:18 +01:00
Move permission config to mautrix-go
This commit is contained in:
parent
9a10240293
commit
15129c0acc
3 changed files with 10 additions and 102 deletions
|
@ -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"`
|
||||
|
|
|
@ -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}
|
||||
}
|
||||
}
|
||||
|
|
13
user.go
13
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()
|
||||
|
|
Loading…
Add table
Reference in a new issue