This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type HomeserverConfig struct {
|
||||
Domain string `yaml:"domain"`
|
||||
URL string `yaml:"url"`
|
||||
}
|
||||
|
||||
type AppserviceConfig struct {
|
||||
ID string `yaml:"id"`
|
||||
ASToken string `yaml:"as_token"`
|
||||
HSToken string `yaml:"hs_token"`
|
||||
BotLocalpart string `yaml:"bot_localpart"`
|
||||
Address string `yaml:"address"`
|
||||
Port uint16 `yaml:"port"`
|
||||
}
|
||||
|
||||
type BridgeConfig struct {
|
||||
NtfyURL string `yaml:"ntfy_url"`
|
||||
Permissions map[string]string `yaml:"permissions"`
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
Homeserver HomeserverConfig `yaml:"homeserver"`
|
||||
Appservice AppserviceConfig `yaml:"appservice"`
|
||||
Bridge BridgeConfig `yaml:"bridge"`
|
||||
}
|
||||
|
||||
func LoadConfig(path string) (*Config, error) {
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cfg := &Config{}
|
||||
if err = yaml.Unmarshal(data, cfg); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if cfg.Bridge.Permissions == nil {
|
||||
cfg.Bridge.Permissions = make(map[string]string)
|
||||
}
|
||||
if cfg.Bridge.NtfyURL == "" {
|
||||
cfg.Bridge.NtfyURL = "https://ntfy.sh"
|
||||
}
|
||||
if cfg.Appservice.Address == "" {
|
||||
cfg.Appservice.Address = "0.0.0.0"
|
||||
}
|
||||
if cfg.Appservice.Port == 0 {
|
||||
cfg.Appservice.Port = 8080
|
||||
}
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func (b *BridgeConfig) PermissionLevel(id string) string {
|
||||
if level, ok := b.Permissions[id]; ok {
|
||||
return level
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (b *BridgeConfig) HasPermission(userID, requiredLevel string) bool {
|
||||
level := b.PermissionLevel(userID)
|
||||
if level == "" {
|
||||
level = b.PermissionLevel("*")
|
||||
}
|
||||
if level == "" {
|
||||
return false
|
||||
}
|
||||
if requiredLevel == "admin" {
|
||||
return level == "admin"
|
||||
}
|
||||
return true
|
||||
}
|
||||
Reference in New Issue
Block a user