78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
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
|
|
}
|