config.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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 // Bytes
  15. DefaultAttachmentTotalSizeLimit = int64(1024 * 1024 * 1024) // 1 GB
  16. DefaultAttachmentFileSizeLimit = int64(15 * 1024 * 1024) // 15 MB
  17. DefaultAttachmentExpiryDuration = 3 * time.Hour
  18. DefaultFirebaseKeepaliveInterval = 3 * time.Hour // Not too frequently to save battery
  19. )
  20. // Defines all the limits
  21. // - total topic limit: max number of topics overall
  22. // - per visitor subscription limit: max number of subscriptions (active HTTP connections) per per-visitor/IP
  23. // - per visitor request limit: max number of PUT/GET/.. requests (here: 60 requests bucket, replenished at a rate of one per 10 seconds)
  24. // - per visitor email limit: max number of emails (here: 16 email bucket, replenished at a rate of one per hour)
  25. // - per visitor attachment size limit:
  26. const (
  27. DefaultTotalTopicLimit = 5000
  28. DefaultVisitorSubscriptionLimit = 30
  29. DefaultVisitorRequestLimitBurst = 60
  30. DefaultVisitorRequestLimitReplenish = 10 * time.Second
  31. DefaultVisitorEmailLimitBurst = 16
  32. DefaultVisitorEmailLimitReplenish = time.Hour
  33. DefaultVisitorAttachmentTotalSizeLimit = 50 * 1024 * 1024
  34. DefaultVisitorAttachmentBytesLimitReplenish = time.Hour
  35. )
  36. // Config is the main config struct for the application. Use New to instantiate a default config struct.
  37. type Config struct {
  38. BaseURL string
  39. ListenHTTP string
  40. ListenHTTPS string
  41. KeyFile string
  42. CertFile string
  43. FirebaseKeyFile string
  44. CacheFile string
  45. CacheDuration time.Duration
  46. AttachmentCacheDir string
  47. AttachmentTotalSizeLimit int64
  48. AttachmentFileSizeLimit int64
  49. AttachmentExpiryDuration time.Duration
  50. KeepaliveInterval time.Duration
  51. ManagerInterval time.Duration
  52. AtSenderInterval time.Duration
  53. FirebaseKeepaliveInterval time.Duration
  54. SMTPSenderAddr string
  55. SMTPSenderUser string
  56. SMTPSenderPass string
  57. SMTPSenderFrom string
  58. SMTPServerListen string
  59. SMTPServerDomain string
  60. SMTPServerAddrPrefix string
  61. MessageLimit int
  62. MinDelay time.Duration
  63. MaxDelay time.Duration
  64. TotalTopicLimit int
  65. TotalAttachmentSizeLimit int64
  66. VisitorSubscriptionLimit int
  67. VisitorAttachmentTotalSizeLimit int64
  68. VisitorRequestLimitBurst int
  69. VisitorRequestLimitReplenish time.Duration
  70. VisitorEmailLimitBurst int
  71. VisitorEmailLimitReplenish time.Duration
  72. BehindProxy bool
  73. }
  74. // NewConfig instantiates a default new server config
  75. func NewConfig() *Config {
  76. return &Config{
  77. BaseURL: "",
  78. ListenHTTP: DefaultListenHTTP,
  79. ListenHTTPS: "",
  80. KeyFile: "",
  81. CertFile: "",
  82. FirebaseKeyFile: "",
  83. CacheFile: "",
  84. CacheDuration: DefaultCacheDuration,
  85. AttachmentCacheDir: "",
  86. AttachmentTotalSizeLimit: DefaultAttachmentTotalSizeLimit,
  87. AttachmentFileSizeLimit: DefaultAttachmentFileSizeLimit,
  88. AttachmentExpiryDuration: DefaultAttachmentExpiryDuration,
  89. KeepaliveInterval: DefaultKeepaliveInterval,
  90. ManagerInterval: DefaultManagerInterval,
  91. MessageLimit: DefaultMessageLimit,
  92. MinDelay: DefaultMinDelay,
  93. MaxDelay: DefaultMaxDelay,
  94. AtSenderInterval: DefaultAtSenderInterval,
  95. FirebaseKeepaliveInterval: DefaultFirebaseKeepaliveInterval,
  96. TotalTopicLimit: DefaultTotalTopicLimit,
  97. VisitorSubscriptionLimit: DefaultVisitorSubscriptionLimit,
  98. VisitorAttachmentTotalSizeLimit: DefaultVisitorAttachmentTotalSizeLimit,
  99. VisitorRequestLimitBurst: DefaultVisitorRequestLimitBurst,
  100. VisitorRequestLimitReplenish: DefaultVisitorRequestLimitReplenish,
  101. VisitorEmailLimitBurst: DefaultVisitorEmailLimitBurst,
  102. VisitorEmailLimitReplenish: DefaultVisitorEmailLimitReplenish,
  103. BehindProxy: false,
  104. }
  105. }