1
0
Fork 0

Adding upstream version 0.8.9.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-05-22 10:16:14 +02:00
parent 3b2c48b5e4
commit c0c4addb85
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
285 changed files with 25880 additions and 0 deletions

View file

@ -0,0 +1,91 @@
package slack
import (
"fmt"
"net/url"
"github.com/nicholas-fedor/shoutrrr/pkg/format"
"github.com/nicholas-fedor/shoutrrr/pkg/services/standard"
"github.com/nicholas-fedor/shoutrrr/pkg/types"
)
const (
// Scheme is the identifying part of this service's configuration URL.
Scheme = "slack"
)
// Config for the slack service.
type Config struct {
standard.EnumlessConfig
BotName string `desc:"Bot name" key:"botname,username" optional:"uses bot default"`
Icon string `desc:"Use emoji or URL as icon (based on presence of http(s):// prefix)" key:"icon,icon_emoji,icon_url" optional:"" default:""`
Token Token `desc:"API Bot token" url:"user,pass"`
Color string `desc:"Message left-hand border color" key:"color" optional:"default border color"`
Title string `desc:"Prepended text above the message" key:"title" optional:"omitted"`
Channel string `desc:"Channel to send messages to in Cxxxxxxxxxx format" url:"host"`
ThreadTS string `desc:"ts value of the parent message (to send message as reply in thread)" key:"thread_ts" optional:""`
}
// GetURL returns a URL representation of it's current field values.
func (config *Config) GetURL() *url.URL {
resolver := format.NewPropKeyResolver(config)
return config.getURL(&resolver)
}
// SetURL updates a ServiceConfig from a URL representation of it's field values.
func (config *Config) SetURL(url *url.URL) error {
resolver := format.NewPropKeyResolver(config)
return config.setURL(&resolver, url)
}
func (config *Config) getURL(resolver types.ConfigQueryResolver) *url.URL {
return &url.URL{
User: config.Token.UserInfo(),
Host: config.Channel,
Scheme: Scheme,
ForceQuery: false,
RawQuery: format.BuildQuery(resolver),
}
}
func (config *Config) setURL(resolver types.ConfigQueryResolver, serviceURL *url.URL) error {
var token string
var err error
if len(serviceURL.Path) > 1 {
// Reading legacy config URL format
token = serviceURL.Hostname() + serviceURL.Path
config.Channel = "webhook"
config.BotName = serviceURL.User.Username()
} else {
token = serviceURL.User.String()
config.Channel = serviceURL.Hostname()
}
if serviceURL.String() != "slack://dummy@dummy.com" {
if err = config.Token.SetFromProp(token); err != nil {
return err
}
} else {
config.Token.raw = token // Set raw token without validation
}
for key, vals := range serviceURL.Query() {
if err := resolver.Set(key, vals[0]); err != nil {
return fmt.Errorf("setting query parameter %q to %q: %w", key, vals[0], err)
}
}
return nil
}
// CreateConfigFromURL to use within the slack service.
func CreateConfigFromURL(serviceURL *url.URL) (*Config, error) {
config := Config{}
err := config.SetURL(serviceURL)
return &config, err
}