config.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package server
  2. import (
  3. "time"
  4. )
  5. // Defines default config settings
  6. const (
  7. DefaultListenHTTP = ":80"
  8. DefaultCacheDuration = 12 * time.Hour
  9. DefaultKeepaliveInterval = 55 * time.Second // Not too frequently to save battery (Android read timeout is 77s!)
  10. DefaultManagerInterval = time.Minute
  11. DefaultAtSenderInterval = 10 * time.Second
  12. DefaultMinDelay = 10 * time.Second
  13. DefaultMaxDelay = 3 * 24 * time.Hour
  14. DefaultMessageLimit = 4096
  15. DefaultAttachmentSizeLimit = 5 * 1024 * 1024
  16. DefaultFirebaseKeepaliveInterval = 3 * time.Hour // Not too frequently to save battery
  17. )
  18. // Defines all the limits
  19. // - global topic limit: max number of topics overall
  20. // - per visitor request limit: max number of PUT/GET/.. requests (here: 60 requests bucket, replenished at a rate of one per 10 seconds)
  21. // - per visitor email limit: max number of emails (here: 16 email bucket, replenished at a rate of one per hour)
  22. // - per visitor subscription limit: max number of subscriptions (active HTTP connections) per per-visitor/IP
  23. const (
  24. DefaultGlobalTopicLimit = 5000
  25. DefaultVisitorRequestLimitBurst = 60
  26. DefaultVisitorRequestLimitReplenish = 10 * time.Second
  27. DefaultVisitorEmailLimitBurst = 16
  28. DefaultVisitorEmailLimitReplenish = time.Hour
  29. DefaultVisitorSubscriptionLimit = 30
  30. )
  31. // Config is the main config struct for the application. Use New to instantiate a default config struct.
  32. type Config struct {
  33. BaseURL string
  34. ListenHTTP string
  35. ListenHTTPS string
  36. KeyFile string
  37. CertFile string
  38. FirebaseKeyFile string
  39. CacheFile string
  40. CacheDuration time.Duration
  41. AttachmentCacheDir string
  42. AttachmentSizeLimit int64
  43. KeepaliveInterval time.Duration
  44. ManagerInterval time.Duration
  45. AtSenderInterval time.Duration
  46. FirebaseKeepaliveInterval time.Duration
  47. SMTPSenderAddr string
  48. SMTPSenderUser string
  49. SMTPSenderPass string
  50. SMTPSenderFrom string
  51. SMTPServerListen string
  52. SMTPServerDomain string
  53. SMTPServerAddrPrefix string
  54. MessageLimit int
  55. MinDelay time.Duration
  56. MaxDelay time.Duration
  57. TotalTopicLimit int
  58. TotalAttachmentSizeLimit int64
  59. VisitorRequestLimitBurst int
  60. VisitorRequestLimitReplenish time.Duration
  61. VisitorEmailLimitBurst int
  62. VisitorEmailLimitReplenish time.Duration
  63. VisitorSubscriptionLimit int
  64. BehindProxy bool
  65. }
  66. // NewConfig instantiates a default new server config
  67. func NewConfig() *Config {
  68. return &Config{
  69. BaseURL: "",
  70. ListenHTTP: DefaultListenHTTP,
  71. ListenHTTPS: "",
  72. KeyFile: "",
  73. CertFile: "",
  74. FirebaseKeyFile: "",
  75. CacheFile: "",
  76. CacheDuration: DefaultCacheDuration,
  77. AttachmentCacheDir: "",
  78. AttachmentSizeLimit: DefaultAttachmentSizeLimit,
  79. KeepaliveInterval: DefaultKeepaliveInterval,
  80. ManagerInterval: DefaultManagerInterval,
  81. MessageLimit: DefaultMessageLimit,
  82. MinDelay: DefaultMinDelay,
  83. MaxDelay: DefaultMaxDelay,
  84. AtSenderInterval: DefaultAtSenderInterval,
  85. FirebaseKeepaliveInterval: DefaultFirebaseKeepaliveInterval,
  86. TotalTopicLimit: DefaultGlobalTopicLimit,
  87. VisitorRequestLimitBurst: DefaultVisitorRequestLimitBurst,
  88. VisitorRequestLimitReplenish: DefaultVisitorRequestLimitReplenish,
  89. VisitorEmailLimitBurst: DefaultVisitorEmailLimitBurst,
  90. VisitorEmailLimitReplenish: DefaultVisitorEmailLimitReplenish,
  91. VisitorSubscriptionLimit: DefaultVisitorSubscriptionLimit,
  92. BehindProxy: false,
  93. }
  94. }