ntfy/server/config.go

130 lines
6.1 KiB
Go
Raw Normal View History

2021-12-19 06:02:36 +03:00
package server
2021-10-24 05:49:50 +03:00
import (
"time"
)
2022-01-13 02:52:07 +03:00
// Defines default config settings (excluding limits, see below)
const (
2021-12-14 06:30:28 +03:00
DefaultListenHTTP = ":80"
DefaultCacheDuration = 12 * time.Hour
2022-01-15 21:23:35 +03:00
DefaultKeepaliveInterval = 45 * time.Second // Not too frequently to save battery (Android read timeout used to be 77s!)
2021-12-14 06:30:28 +03:00
DefaultManagerInterval = time.Minute
DefaultAtSenderInterval = 10 * time.Second
DefaultMinDelay = 10 * time.Second
DefaultMaxDelay = 3 * 24 * time.Hour
DefaultFirebaseKeepaliveInterval = 3 * time.Hour // Not too frequently to save battery
2021-10-24 05:49:50 +03:00
)
2022-01-13 02:52:07 +03:00
// Defines all global and per-visitor limits
// - message size limit: the max number of bytes for a message
2022-01-04 02:55:08 +03:00
// - total topic limit: max number of topics overall
2022-01-13 02:52:07 +03:00
// - various attachment limits
const (
DefaultMessageLengthLimit = 4096 // Bytes
DefaultTotalTopicLimit = 15000
2022-01-13 05:24:48 +03:00
DefaultAttachmentTotalSizeLimit = int64(5 * 1024 * 1024 * 1024) // 5 GB
DefaultAttachmentFileSizeLimit = int64(15 * 1024 * 1024) // 15 MB
2022-01-13 02:52:07 +03:00
DefaultAttachmentExpiryDuration = 3 * time.Hour
)
// Defines all per-visitor limits
2022-01-04 02:55:08 +03:00
// - per visitor subscription limit: max number of subscriptions (active HTTP connections) per per-visitor/IP
2022-02-15 01:07:17 +03:00
// - per visitor request limit: max number of PUT/GET/.. requests (here: 60 requests bucket, replenished at a rate of one per 5 seconds)
2021-12-24 02:03:04 +03:00
// - per visitor email limit: max number of emails (here: 16 email bucket, replenished at a rate of one per hour)
2022-01-13 02:52:07 +03:00
// - per visitor attachment size limit: total per-visitor attachment size in bytes to be stored on the server
2022-01-13 05:24:48 +03:00
// - per visitor attachment daily bandwidth limit: number of bytes that can be transferred to/from the server
const (
2022-01-13 05:24:48 +03:00
DefaultVisitorSubscriptionLimit = 30
DefaultVisitorRequestLimitBurst = 60
2022-02-15 01:07:17 +03:00
DefaultVisitorRequestLimitReplenish = 5 * time.Second
2022-01-13 05:24:48 +03:00
DefaultVisitorEmailLimitBurst = 16
DefaultVisitorEmailLimitReplenish = time.Hour
DefaultVisitorAttachmentTotalSizeLimit = 100 * 1024 * 1024 // 100 MB
DefaultVisitorAttachmentDailyBandwidthLimit = 500 * 1024 * 1024 // 500 MB
)
// Config is the main config struct for the application. Use New to instantiate a default config struct.
type Config struct {
2022-01-13 05:24:48 +03:00
BaseURL string
ListenHTTP string
ListenHTTPS string
2022-01-15 04:16:12 +03:00
ListenUnix string
2022-01-13 05:24:48 +03:00
KeyFile string
CertFile string
FirebaseKeyFile string
CacheFile string
CacheDuration time.Duration
2022-01-23 07:01:20 +03:00
AuthFile string
AuthDefaultRead bool
AuthDefaultWrite bool
2022-01-13 05:24:48 +03:00
AttachmentCacheDir string
AttachmentTotalSizeLimit int64
AttachmentFileSizeLimit int64
AttachmentExpiryDuration time.Duration
KeepaliveInterval time.Duration
ManagerInterval time.Duration
AtSenderInterval time.Duration
FirebaseKeepaliveInterval time.Duration
SMTPSenderAddr string
SMTPSenderUser string
SMTPSenderPass string
SMTPSenderFrom string
SMTPServerListen string
SMTPServerDomain string
SMTPServerAddrPrefix string
MessageLimit int
MinDelay time.Duration
MaxDelay time.Duration
TotalTopicLimit int
TotalAttachmentSizeLimit int64
VisitorSubscriptionLimit int
VisitorAttachmentTotalSizeLimit int64
VisitorAttachmentDailyBandwidthLimit int
VisitorRequestLimitBurst int
VisitorRequestLimitReplenish time.Duration
2022-02-15 00:09:59 +03:00
VisitorRequestExemptIPAddrs []string
2022-01-13 05:24:48 +03:00
VisitorEmailLimitBurst int
VisitorEmailLimitReplenish time.Duration
BehindProxy bool
}
// NewConfig instantiates a default new server config
2021-12-22 16:17:50 +03:00
func NewConfig() *Config {
return &Config{
2022-01-13 05:24:48 +03:00
BaseURL: "",
ListenHTTP: DefaultListenHTTP,
ListenHTTPS: "",
2022-01-15 04:16:12 +03:00
ListenUnix: "",
2022-01-13 05:24:48 +03:00
KeyFile: "",
CertFile: "",
FirebaseKeyFile: "",
CacheFile: "",
CacheDuration: DefaultCacheDuration,
2022-01-23 07:01:20 +03:00
AuthFile: "",
AuthDefaultRead: true,
AuthDefaultWrite: true,
2022-01-13 05:24:48 +03:00
AttachmentCacheDir: "",
AttachmentTotalSizeLimit: DefaultAttachmentTotalSizeLimit,
AttachmentFileSizeLimit: DefaultAttachmentFileSizeLimit,
AttachmentExpiryDuration: DefaultAttachmentExpiryDuration,
KeepaliveInterval: DefaultKeepaliveInterval,
ManagerInterval: DefaultManagerInterval,
MessageLimit: DefaultMessageLengthLimit,
MinDelay: DefaultMinDelay,
MaxDelay: DefaultMaxDelay,
AtSenderInterval: DefaultAtSenderInterval,
FirebaseKeepaliveInterval: DefaultFirebaseKeepaliveInterval,
TotalTopicLimit: DefaultTotalTopicLimit,
VisitorSubscriptionLimit: DefaultVisitorSubscriptionLimit,
VisitorAttachmentTotalSizeLimit: DefaultVisitorAttachmentTotalSizeLimit,
VisitorAttachmentDailyBandwidthLimit: DefaultVisitorAttachmentDailyBandwidthLimit,
VisitorRequestLimitBurst: DefaultVisitorRequestLimitBurst,
VisitorRequestLimitReplenish: DefaultVisitorRequestLimitReplenish,
2022-02-15 00:09:59 +03:00
VisitorRequestExemptIPAddrs: make([]string, 0),
2022-01-13 05:24:48 +03:00
VisitorEmailLimitBurst: DefaultVisitorEmailLimitBurst,
VisitorEmailLimitReplenish: DefaultVisitorEmailLimitReplenish,
BehindProxy: false,
}
}