6756b9f179
Build and Publish Package (amd64) / docker (push) Successful in 4m54s
This is vibecoded shit but i can't be bothered to do it myself. Nobody else besides me is gonna be using this, and this wont ever be extended or anything, so I just don't care.
90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type HomeserverConfig struct {
|
|
Domain string `yaml:"domain"`
|
|
URL string `yaml:"url"`
|
|
}
|
|
|
|
type AppserviceConfig struct {
|
|
ID string `yaml:"id"`
|
|
Address string `yaml:"address"`
|
|
BotLocalpart string `yaml:"bot_localpart"`
|
|
ASToken string `yaml:"as_token"`
|
|
HSToken string `yaml:"hs_token"`
|
|
}
|
|
|
|
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
|
|
}
|
|
cfg.applyDefaults()
|
|
return cfg, nil
|
|
}
|
|
|
|
func (c *Config) applyDefaults() {
|
|
if c.Bridge.Permissions == nil {
|
|
c.Bridge.Permissions = make(map[string]string)
|
|
}
|
|
if c.Bridge.NtfyURL == "" {
|
|
c.Bridge.NtfyURL = "https://ntfy.sh"
|
|
}
|
|
if c.Appservice.ID == "" {
|
|
c.Appservice.ID = "ntfy-bridge"
|
|
}
|
|
if c.Appservice.Address == "" {
|
|
c.Appservice.Address = "0.0.0.0"
|
|
}
|
|
}
|
|
|
|
func (c *Config) Save(path string) error {
|
|
data, err := yaml.Marshal(c)
|
|
if err != nil {
|
|
return fmt.Errorf("marshal config: %w", err)
|
|
}
|
|
return os.WriteFile(path, data, 0600)
|
|
}
|
|
|
|
func (c *BridgeConfig) HasPermission(userID, requiredLevel string) bool {
|
|
level := c.PermissionLevel(userID)
|
|
if level == "" {
|
|
level = c.PermissionLevel("*")
|
|
}
|
|
if level == "" {
|
|
return false
|
|
}
|
|
if requiredLevel == "admin" {
|
|
return level == "admin"
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (c *BridgeConfig) PermissionLevel(id string) string {
|
|
if level, ok := c.Permissions[id]; ok {
|
|
return level
|
|
}
|
|
return ""
|
|
}
|