mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-01 09:32:35 +02:00

Some checks are pending
Docker Image CI (socket-proxy) / build (push) Waiting to run
* refactor: simplify io code and make utils module independent * fix(docker): agent and socket-proxy docker event flushing with modified reverse proxy handler * refactor: remove unused code * refactor: remove the use of logging module in most code * refactor: streamline domain mismatch check in certState function * tweak: use ecdsa p-256 for autocert * fix(tests): update health check tests for invalid host and add case for port in host * feat(acme): custom acme directory * refactor: code refactor and improved context and error handling * tweak: optimize memory usage under load * fix(oidc): restore old user matching behavior * docs: add ChatGPT assistant to README --------- Co-authored-by: yusing <yusing@6uo.me>
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package notif
|
|
|
|
import (
|
|
"github.com/yusing/go-proxy/internal/gperr"
|
|
"github.com/yusing/go-proxy/internal/serialization"
|
|
)
|
|
|
|
type NotificationConfig struct {
|
|
ProviderName string `json:"provider"`
|
|
Provider Provider `json:"-"`
|
|
}
|
|
|
|
var (
|
|
ErrMissingNotifProvider = gperr.New("missing notification provider")
|
|
ErrInvalidNotifProviderType = gperr.New("invalid notification provider type")
|
|
ErrUnknownNotifProvider = gperr.New("unknown notification provider")
|
|
)
|
|
|
|
// UnmarshalMap implements MapUnmarshaler.
|
|
func (cfg *NotificationConfig) UnmarshalMap(m map[string]any) (err gperr.Error) {
|
|
// extract provider name
|
|
providerName := m["provider"]
|
|
switch providerName := providerName.(type) {
|
|
case string:
|
|
cfg.ProviderName = providerName
|
|
default:
|
|
return ErrInvalidNotifProviderType
|
|
}
|
|
delete(m, "provider")
|
|
|
|
if cfg.ProviderName == "" {
|
|
return ErrMissingNotifProvider
|
|
}
|
|
|
|
// validate provider name and initialize provider
|
|
switch cfg.ProviderName {
|
|
case ProviderWebhook:
|
|
cfg.Provider = &Webhook{}
|
|
case ProviderGotify:
|
|
cfg.Provider = &GotifyClient{}
|
|
case ProviderNtfy:
|
|
cfg.Provider = &Ntfy{}
|
|
default:
|
|
return ErrUnknownNotifProvider.
|
|
Subject(cfg.ProviderName).
|
|
Withf("expect %s or %s", ProviderWebhook, ProviderGotify)
|
|
}
|
|
|
|
return serialization.MapUnmarshalValidate(m, cfg.Provider)
|
|
}
|