config.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package server
  2. import (
  3. "time"
  4. )
  5. // Defines default config settings (excluding limits, see below)
  6. const (
  7. DefaultListenHTTP = ":80"
  8. DefaultCacheDuration = 12 * time.Hour
  9. DefaultKeepaliveInterval = 45 * time.Second // Not too frequently to save battery (Android read timeout used to be 77s!)
  10. DefaultManagerInterval = time.Minute
  11. DefaultAtSenderInterval = 10 * time.Second
  12. DefaultMinDelay = 10 * time.Second
  13. DefaultMaxDelay = 3 * 24 * time.Hour
  14. DefaultFirebaseKeepaliveInterval = 3 * time.Hour // ~control topic (Android), not too frequently to save battery
  15. DefaultFirebasePollInterval = 20 * time.Minute // ~poll topic (iOS), max. 2-3 times per hour (see docs)
  16. )
  17. // Defines all global and per-visitor limits
  18. // - message size limit: the max number of bytes for a message
  19. // - total topic limit: max number of topics overall
  20. // - various attachment limits
  21. const (
  22. DefaultMessageLengthLimit = 4096 // Bytes
  23. DefaultTotalTopicLimit = 15000
  24. DefaultAttachmentTotalSizeLimit = int64(5 * 1024 * 1024 * 1024) // 5 GB
  25. DefaultAttachmentFileSizeLimit = int64(15 * 1024 * 1024) // 15 MB
  26. DefaultAttachmentExpiryDuration = 3 * time.Hour
  27. )
  28. // Defines all per-visitor limits
  29. // - per visitor subscription limit: max number of subscriptions (active HTTP connections) per per-visitor/IP
  30. // - per visitor request limit: max number of PUT/GET/.. requests (here: 60 requests bucket, replenished at a rate of one per 5 seconds)
  31. // - per visitor email limit: max number of emails (here: 16 email bucket, replenished at a rate of one per hour)
  32. // - per visitor attachment size limit: total per-visitor attachment size in bytes to be stored on the server
  33. // - per visitor attachment daily bandwidth limit: number of bytes that can be transferred to/from the server
  34. const (
  35. DefaultVisitorSubscriptionLimit = 30
  36. DefaultVisitorRequestLimitBurst = 60
  37. DefaultVisitorRequestLimitReplenish = 5 * time.Second
  38. DefaultVisitorEmailLimitBurst = 16
  39. DefaultVisitorEmailLimitReplenish = time.Hour
  40. DefaultVisitorAttachmentTotalSizeLimit = 100 * 1024 * 1024 // 100 MB
  41. DefaultVisitorAttachmentDailyBandwidthLimit = 500 * 1024 * 1024 // 500 MB
  42. )
  43. // Config is the main config struct for the application. Use New to instantiate a default config struct.
  44. type Config struct {
  45. BaseURL string
  46. ListenHTTP string
  47. ListenHTTPS string
  48. ListenUnix string
  49. KeyFile string
  50. CertFile string
  51. FirebaseKeyFile string
  52. CacheFile string
  53. CacheDuration time.Duration
  54. AuthFile string
  55. AuthDefaultRead bool
  56. AuthDefaultWrite bool
  57. AttachmentCacheDir string
  58. AttachmentTotalSizeLimit int64
  59. AttachmentFileSizeLimit int64
  60. AttachmentExpiryDuration time.Duration
  61. KeepaliveInterval time.Duration
  62. ManagerInterval time.Duration
  63. WebRootIsApp bool
  64. AtSenderInterval time.Duration
  65. FirebaseKeepaliveInterval time.Duration
  66. FirebasePollInterval time.Duration
  67. UpstreamBaseURL string
  68. SMTPSenderAddr string
  69. SMTPSenderUser string
  70. SMTPSenderPass string
  71. SMTPSenderFrom string
  72. SMTPServerListen string
  73. SMTPServerDomain string
  74. SMTPServerAddrPrefix string
  75. MessageLimit int
  76. MinDelay time.Duration
  77. MaxDelay time.Duration
  78. TotalTopicLimit int
  79. TotalAttachmentSizeLimit int64
  80. VisitorSubscriptionLimit int
  81. VisitorAttachmentTotalSizeLimit int64
  82. VisitorAttachmentDailyBandwidthLimit int
  83. VisitorRequestLimitBurst int
  84. VisitorRequestLimitReplenish time.Duration
  85. VisitorRequestExemptIPAddrs []string
  86. VisitorEmailLimitBurst int
  87. VisitorEmailLimitReplenish time.Duration
  88. BehindProxy bool
  89. EnableWeb bool
  90. }
  91. // NewConfig instantiates a default new server config
  92. func NewConfig() *Config {
  93. return &Config{
  94. BaseURL: "",
  95. ListenHTTP: DefaultListenHTTP,
  96. ListenHTTPS: "",
  97. ListenUnix: "",
  98. KeyFile: "",
  99. CertFile: "",
  100. FirebaseKeyFile: "",
  101. CacheFile: "",
  102. CacheDuration: DefaultCacheDuration,
  103. AuthFile: "",
  104. AuthDefaultRead: true,
  105. AuthDefaultWrite: true,
  106. AttachmentCacheDir: "",
  107. AttachmentTotalSizeLimit: DefaultAttachmentTotalSizeLimit,
  108. AttachmentFileSizeLimit: DefaultAttachmentFileSizeLimit,
  109. AttachmentExpiryDuration: DefaultAttachmentExpiryDuration,
  110. KeepaliveInterval: DefaultKeepaliveInterval,
  111. ManagerInterval: DefaultManagerInterval,
  112. MessageLimit: DefaultMessageLengthLimit,
  113. MinDelay: DefaultMinDelay,
  114. MaxDelay: DefaultMaxDelay,
  115. AtSenderInterval: DefaultAtSenderInterval,
  116. FirebaseKeepaliveInterval: DefaultFirebaseKeepaliveInterval,
  117. FirebasePollInterval: DefaultFirebasePollInterval,
  118. TotalTopicLimit: DefaultTotalTopicLimit,
  119. VisitorSubscriptionLimit: DefaultVisitorSubscriptionLimit,
  120. VisitorAttachmentTotalSizeLimit: DefaultVisitorAttachmentTotalSizeLimit,
  121. VisitorAttachmentDailyBandwidthLimit: DefaultVisitorAttachmentDailyBandwidthLimit,
  122. VisitorRequestLimitBurst: DefaultVisitorRequestLimitBurst,
  123. VisitorRequestLimitReplenish: DefaultVisitorRequestLimitReplenish,
  124. VisitorRequestExemptIPAddrs: make([]string, 0),
  125. VisitorEmailLimitBurst: DefaultVisitorEmailLimitBurst,
  126. VisitorEmailLimitReplenish: DefaultVisitorEmailLimitReplenish,
  127. BehindProxy: false,
  128. EnableWeb: true,
  129. }
  130. }