Files
jzitnik 6756b9f179
Build and Publish Package (amd64) / docker (push) Successful in 4m54s
chore: I have no fucking idea
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.
2026-07-25 23:07:16 +02:00

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 ""
}