config.go 7.1 KB

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