ntfy/server/config.go

147 lines
7.2 KiB
Go
Raw Normal View History

2021-12-19 04:02:36 +01:00
package server
2021-10-24 04:49:50 +02:00
import (
"io/fs"
"net/netip"
2021-10-24 04:49:50 +02:00
"time"
)
2022-01-13 00:52:07 +01:00
// Defines default config settings (excluding limits, see below)
const (
2022-06-01 05:27:24 +02:00
DefaultListenHTTP = ":80"
DefaultCacheDuration = 12 * time.Hour
DefaultKeepaliveInterval = 45 * time.Second // Not too frequently to save battery (Android read timeout used to be 77s!)
DefaultManagerInterval = time.Minute
DefaultDelayedSenderInterval = 10 * time.Second
DefaultMinDelay = 10 * time.Second
DefaultMaxDelay = 3 * 24 * time.Hour
DefaultFirebaseKeepaliveInterval = 3 * time.Hour // ~control topic (Android), not too frequently to save battery
DefaultFirebasePollInterval = 20 * time.Minute // ~poll topic (iOS), max. 2-3 times per hour (see docs)
DefaultFirebaseQuotaExceededPenaltyDuration = 10 * time.Minute // Time that over-users are locked out of Firebase if it returns "quota exceeded"
2021-10-24 04:49:50 +02:00
)
2022-01-13 00:52:07 +01:00
// Defines all global and per-visitor limits
// - message size limit: the max number of bytes for a message
2022-01-04 00:55:08 +01:00
// - total topic limit: max number of topics overall
2022-01-13 00:52:07 +01:00
// - various attachment limits
const (
DefaultMessageLengthLimit = 4096 // Bytes
DefaultTotalTopicLimit = 15000
2022-01-13 03:24:48 +01:00
DefaultAttachmentTotalSizeLimit = int64(5 * 1024 * 1024 * 1024) // 5 GB
DefaultAttachmentFileSizeLimit = int64(15 * 1024 * 1024) // 15 MB
2022-01-13 00:52:07 +01:00
DefaultAttachmentExpiryDuration = 3 * time.Hour
)
// Defines all per-visitor limits
2022-01-04 00:55:08 +01:00
// - per visitor subscription limit: max number of subscriptions (active HTTP connections) per per-visitor/IP
2022-02-14 23:07:17 +01: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 00:03:04 +01:00
// - per visitor email limit: max number of emails (here: 16 email bucket, replenished at a rate of one per hour)
2022-01-13 00:52:07 +01:00
// - per visitor attachment size limit: total per-visitor attachment size in bytes to be stored on the server
2022-01-13 03:24:48 +01:00
// - per visitor attachment daily bandwidth limit: number of bytes that can be transferred to/from the server
const (
2022-01-13 03:24:48 +01:00
DefaultVisitorSubscriptionLimit = 30
DefaultVisitorRequestLimitBurst = 60
2022-02-14 23:07:17 +01:00
DefaultVisitorRequestLimitReplenish = 5 * time.Second
2022-01-13 03:24:48 +01: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 03:24:48 +01:00
BaseURL string
ListenHTTP string
ListenHTTPS string
2022-01-15 02:16:12 +01:00
ListenUnix string
ListenUnixMode fs.FileMode
2022-01-13 03:24:48 +01:00
KeyFile string
CertFile string
FirebaseKeyFile string
CacheFile string
CacheDuration time.Duration
2022-06-23 17:02:45 +02:00
CacheStartupQueries string
2022-01-23 05:01:20 +01:00
AuthFile string
AuthDefaultRead bool
AuthDefaultWrite bool
2022-01-13 03:24:48 +01:00
AttachmentCacheDir string
AttachmentTotalSizeLimit int64
AttachmentFileSizeLimit int64
AttachmentExpiryDuration time.Duration
KeepaliveInterval time.Duration
ManagerInterval time.Duration
2022-03-06 03:28:25 +01:00
WebRootIsApp bool
DelayedSenderInterval time.Duration
2022-01-13 03:24:48 +01:00
FirebaseKeepaliveInterval time.Duration
FirebasePollInterval time.Duration
2022-06-01 05:27:24 +02:00
FirebaseQuotaExceededPenaltyDuration time.Duration
2022-05-28 02:30:20 +02:00
UpstreamBaseURL string
2022-01-13 03:24:48 +01:00
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
VisitorRequestExemptIPAddrs []netip.Prefix
2022-01-13 03:24:48 +01:00
VisitorEmailLimitBurst int
VisitorEmailLimitReplenish time.Duration
BehindProxy bool
EnableWeb bool
Version string // injected by App
}
// NewConfig instantiates a default new server config
2021-12-22 14:17:50 +01:00
func NewConfig() *Config {
return &Config{
2022-01-13 03:24:48 +01:00
BaseURL: "",
ListenHTTP: DefaultListenHTTP,
ListenHTTPS: "",
2022-01-15 02:16:12 +01:00
ListenUnix: "",
2022-07-04 01:33:01 +02:00
ListenUnixMode: 0,
2022-01-13 03:24:48 +01:00
KeyFile: "",
CertFile: "",
FirebaseKeyFile: "",
CacheFile: "",
CacheDuration: DefaultCacheDuration,
2022-01-23 05:01:20 +01:00
AuthFile: "",
AuthDefaultRead: true,
AuthDefaultWrite: true,
2022-01-13 03:24:48 +01:00
AttachmentCacheDir: "",
AttachmentTotalSizeLimit: DefaultAttachmentTotalSizeLimit,
AttachmentFileSizeLimit: DefaultAttachmentFileSizeLimit,
AttachmentExpiryDuration: DefaultAttachmentExpiryDuration,
KeepaliveInterval: DefaultKeepaliveInterval,
ManagerInterval: DefaultManagerInterval,
MessageLimit: DefaultMessageLengthLimit,
MinDelay: DefaultMinDelay,
MaxDelay: DefaultMaxDelay,
2022-06-01 05:27:24 +02:00
DelayedSenderInterval: DefaultDelayedSenderInterval,
2022-01-13 03:24:48 +01:00
FirebaseKeepaliveInterval: DefaultFirebaseKeepaliveInterval,
FirebasePollInterval: DefaultFirebasePollInterval,
2022-06-01 05:27:24 +02:00
FirebaseQuotaExceededPenaltyDuration: DefaultFirebaseQuotaExceededPenaltyDuration,
2022-01-13 03:24:48 +01:00
TotalTopicLimit: DefaultTotalTopicLimit,
VisitorSubscriptionLimit: DefaultVisitorSubscriptionLimit,
VisitorAttachmentTotalSizeLimit: DefaultVisitorAttachmentTotalSizeLimit,
VisitorAttachmentDailyBandwidthLimit: DefaultVisitorAttachmentDailyBandwidthLimit,
VisitorRequestLimitBurst: DefaultVisitorRequestLimitBurst,
VisitorRequestLimitReplenish: DefaultVisitorRequestLimitReplenish,
VisitorRequestExemptIPAddrs: make([]netip.Prefix, 0),
2022-01-13 03:24:48 +01:00
VisitorEmailLimitBurst: DefaultVisitorEmailLimitBurst,
VisitorEmailLimitReplenish: DefaultVisitorEmailLimitReplenish,
BehindProxy: false,
EnableWeb: true,
Version: "",
}
}