2021-12-19 03:02:36 +00:00
|
|
|
package server
|
2021-10-24 01:29:45 +00:00
|
|
|
|
2021-10-24 02:49:50 +00:00
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Defines default config settings
|
2021-10-24 01:29:45 +00:00
|
|
|
const (
|
2021-12-14 03:30:28 +00:00
|
|
|
DefaultListenHTTP = ":80"
|
|
|
|
DefaultCacheDuration = 12 * time.Hour
|
2022-01-01 21:48:17 +00:00
|
|
|
DefaultKeepaliveInterval = 55 * time.Second // Not too frequently to save battery (Android read timeout is 77s!)
|
2021-12-14 03:30:28 +00:00
|
|
|
DefaultManagerInterval = time.Minute
|
|
|
|
DefaultAtSenderInterval = 10 * time.Second
|
|
|
|
DefaultMinDelay = 10 * time.Second
|
|
|
|
DefaultMaxDelay = 3 * 24 * time.Hour
|
2021-12-31 15:12:53 +00:00
|
|
|
DefaultMessageLimit = 4096
|
2022-01-02 22:56:12 +00:00
|
|
|
DefaultAttachmentSizeLimit = 5 * 1024 * 1024
|
2022-01-01 21:08:55 +00:00
|
|
|
DefaultFirebaseKeepaliveInterval = 3 * time.Hour // Not too frequently to save battery
|
2021-10-24 02:49:50 +00:00
|
|
|
)
|
|
|
|
|
2021-11-01 20:39:40 +00:00
|
|
|
// Defines all the limits
|
|
|
|
// - global topic limit: max number of topics overall
|
2021-12-18 19:43:27 +00:00
|
|
|
// - per visitor request limit: max number of PUT/GET/.. requests (here: 60 requests bucket, replenished at a rate of one per 10 seconds)
|
2021-12-23 23:03:04 +00:00
|
|
|
// - per visitor email limit: max number of emails (here: 16 email bucket, replenished at a rate of one per hour)
|
2021-12-18 19:43:27 +00:00
|
|
|
// - per visitor subscription limit: max number of subscriptions (active HTTP connections) per per-visitor/IP
|
2021-11-05 17:46:27 +00:00
|
|
|
const (
|
|
|
|
DefaultGlobalTopicLimit = 5000
|
|
|
|
DefaultVisitorRequestLimitBurst = 60
|
|
|
|
DefaultVisitorRequestLimitReplenish = 10 * time.Second
|
2021-12-23 23:03:04 +00:00
|
|
|
DefaultVisitorEmailLimitBurst = 16
|
|
|
|
DefaultVisitorEmailLimitReplenish = time.Hour
|
2021-11-05 17:46:27 +00:00
|
|
|
DefaultVisitorSubscriptionLimit = 30
|
2021-10-24 01:29:45 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// Config is the main config struct for the application. Use New to instantiate a default config struct.
|
|
|
|
type Config struct {
|
2021-12-24 23:13:09 +00:00
|
|
|
BaseURL string
|
2021-11-05 17:46:27 +00:00
|
|
|
ListenHTTP string
|
2021-12-07 15:38:58 +00:00
|
|
|
ListenHTTPS string
|
|
|
|
KeyFile string
|
|
|
|
CertFile string
|
2021-11-05 17:46:27 +00:00
|
|
|
FirebaseKeyFile string
|
|
|
|
CacheFile string
|
|
|
|
CacheDuration time.Duration
|
2022-01-02 22:56:12 +00:00
|
|
|
AttachmentCacheDir string
|
|
|
|
AttachmentSizeLimit int64
|
2021-11-05 17:46:27 +00:00
|
|
|
KeepaliveInterval time.Duration
|
|
|
|
ManagerInterval time.Duration
|
2021-12-10 16:31:42 +00:00
|
|
|
AtSenderInterval time.Duration
|
2021-12-14 03:30:28 +00:00
|
|
|
FirebaseKeepaliveInterval time.Duration
|
2021-12-27 15:39:28 +00:00
|
|
|
SMTPSenderAddr string
|
|
|
|
SMTPSenderUser string
|
|
|
|
SMTPSenderPass string
|
|
|
|
SMTPSenderFrom string
|
|
|
|
SMTPServerListen string
|
|
|
|
SMTPServerDomain string
|
|
|
|
SMTPServerAddrPrefix string
|
2021-12-11 03:57:01 +00:00
|
|
|
MessageLimit int
|
|
|
|
MinDelay time.Duration
|
|
|
|
MaxDelay time.Duration
|
2022-01-02 22:56:12 +00:00
|
|
|
TotalTopicLimit int
|
|
|
|
TotalAttachmentSizeLimit int64
|
2021-11-05 17:46:27 +00:00
|
|
|
VisitorRequestLimitBurst int
|
|
|
|
VisitorRequestLimitReplenish time.Duration
|
2021-12-23 23:03:04 +00:00
|
|
|
VisitorEmailLimitBurst int
|
|
|
|
VisitorEmailLimitReplenish time.Duration
|
2021-11-05 17:46:27 +00:00
|
|
|
VisitorSubscriptionLimit int
|
|
|
|
BehindProxy bool
|
2021-10-24 01:29:45 +00:00
|
|
|
}
|
|
|
|
|
2021-12-19 19:27:26 +00:00
|
|
|
// NewConfig instantiates a default new server config
|
2021-12-22 13:17:50 +00:00
|
|
|
func NewConfig() *Config {
|
2021-10-24 01:29:45 +00:00
|
|
|
return &Config{
|
2021-12-24 23:13:09 +00:00
|
|
|
BaseURL: "",
|
2021-12-22 13:17:50 +00:00
|
|
|
ListenHTTP: DefaultListenHTTP,
|
2021-12-07 15:38:58 +00:00
|
|
|
ListenHTTPS: "",
|
|
|
|
KeyFile: "",
|
|
|
|
CertFile: "",
|
2021-11-05 17:46:27 +00:00
|
|
|
FirebaseKeyFile: "",
|
|
|
|
CacheFile: "",
|
|
|
|
CacheDuration: DefaultCacheDuration,
|
2022-01-02 22:56:12 +00:00
|
|
|
AttachmentCacheDir: "",
|
|
|
|
AttachmentSizeLimit: DefaultAttachmentSizeLimit,
|
2021-11-05 17:46:27 +00:00
|
|
|
KeepaliveInterval: DefaultKeepaliveInterval,
|
|
|
|
ManagerInterval: DefaultManagerInterval,
|
2021-12-11 03:57:01 +00:00
|
|
|
MessageLimit: DefaultMessageLimit,
|
|
|
|
MinDelay: DefaultMinDelay,
|
|
|
|
MaxDelay: DefaultMaxDelay,
|
2021-12-10 16:31:42 +00:00
|
|
|
AtSenderInterval: DefaultAtSenderInterval,
|
2021-12-14 03:30:28 +00:00
|
|
|
FirebaseKeepaliveInterval: DefaultFirebaseKeepaliveInterval,
|
2022-01-02 22:56:12 +00:00
|
|
|
TotalTopicLimit: DefaultGlobalTopicLimit,
|
2021-11-05 17:46:27 +00:00
|
|
|
VisitorRequestLimitBurst: DefaultVisitorRequestLimitBurst,
|
|
|
|
VisitorRequestLimitReplenish: DefaultVisitorRequestLimitReplenish,
|
2021-12-23 23:03:04 +00:00
|
|
|
VisitorEmailLimitBurst: DefaultVisitorEmailLimitBurst,
|
|
|
|
VisitorEmailLimitReplenish: DefaultVisitorEmailLimitReplenish,
|
2021-11-05 17:46:27 +00:00
|
|
|
VisitorSubscriptionLimit: DefaultVisitorSubscriptionLimit,
|
|
|
|
BehindProxy: false,
|
2021-10-24 01:29:45 +00:00
|
|
|
}
|
|
|
|
}
|