75bd409ba0
Backend support for subscribing/unsubscribing to blocks, typically cards and boards. Notifies subscribers when changes are made to cards they are subscribed to.
127 lines
5.4 KiB
Go
127 lines
5.4 KiB
Go
package config
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
const (
|
|
DefaultServerRoot = "http://localhost:8000"
|
|
DefaultPort = 8000
|
|
)
|
|
|
|
type AmazonS3Config struct {
|
|
AccessKeyID string
|
|
SecretAccessKey string
|
|
Bucket string
|
|
PathPrefix string
|
|
Region string
|
|
Endpoint string
|
|
SSL bool
|
|
SignV2 bool
|
|
SSE bool
|
|
Trace bool
|
|
}
|
|
|
|
// Configuration is the app configuration stored in a json file.
|
|
type Configuration struct {
|
|
ServerRoot string `json:"serverRoot" mapstructure:"serverRoot"`
|
|
Port int `json:"port" mapstructure:"port"`
|
|
DBType string `json:"dbtype" mapstructure:"dbtype"`
|
|
DBConfigString string `json:"dbconfig" mapstructure:"dbconfig"`
|
|
DBTablePrefix string `json:"dbtableprefix" mapstructure:"dbtableprefix"`
|
|
UseSSL bool `json:"useSSL" mapstructure:"useSSL"`
|
|
SecureCookie bool `json:"secureCookie" mapstructure:"secureCookie"`
|
|
WebPath string `json:"webpath" mapstructure:"webpath"`
|
|
FilesDriver string `json:"filesdriver" mapstructure:"filesdriver"`
|
|
FilesS3Config AmazonS3Config `json:"filess3config" mapstructure:"filess3config"`
|
|
FilesPath string `json:"filespath" mapstructure:"filespath"`
|
|
Telemetry bool `json:"telemetry" mapstructure:"telemetry"`
|
|
TelemetryID string `json:"telemetryid" mapstructure:"telemetryid"`
|
|
PrometheusAddress string `json:"prometheus_address" mapstructure:"prometheus_address"`
|
|
WebhookUpdate []string `json:"webhook_update" mapstructure:"webhook_update"`
|
|
Secret string `json:"secret" mapstructure:"secret"`
|
|
SessionExpireTime int64 `json:"session_expire_time" mapstructure:"session_expire_time"`
|
|
SessionRefreshTime int64 `json:"session_refresh_time" mapstructure:"session_refresh_time"`
|
|
LocalOnly bool `json:"localonly" mapstructure:"localonly"`
|
|
EnableLocalMode bool `json:"enableLocalMode" mapstructure:"enableLocalMode"`
|
|
LocalModeSocketLocation string `json:"localModeSocketLocation" mapstructure:"localModeSocketLocation"`
|
|
EnablePublicSharedBoards bool `json:"enablePublicSharedBoards" mapstructure:"enablePublicSharedBoards"`
|
|
FeatureFlags map[string]string `json:"featureFlags" mapstructure:"featureFlags"`
|
|
|
|
AuthMode string `json:"authMode" mapstructure:"authMode"`
|
|
|
|
LoggingCfgFile string `json:"logging_cfg_file" mapstructure:"logging_cfg_file"`
|
|
LoggingCfgJSON string `json:"logging_cfg_json" mapstructure:"logging_cfg_json"`
|
|
|
|
AuditCfgFile string `json:"audit_cfg_file" mapstructure:"audit_cfg_file"`
|
|
AuditCfgJSON string `json:"audit_cfg_json" mapstructure:"audit_cfg_json"`
|
|
|
|
NotifyFreqCardSeconds int `json:"notify_freq_card_seconds" mapstructure:"notify_freq_card_seconds"`
|
|
NotifyFreqBoardSeconds int `json:"notify_freq_board_seconds" mapstructure:"notify_freq_board_seconds"`
|
|
}
|
|
|
|
// IsSubscriptionsEnabled returns true if the block change notification subscription service should be enabled.
|
|
func (c *Configuration) IsSubscriptionsEnabled() bool {
|
|
if enabled, ok := c.FeatureFlags["subscriptions"]; ok && enabled == "true" {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// ReadConfigFile read the configuration from the filesystem.
|
|
func ReadConfigFile(configFilePath string) (*Configuration, error) {
|
|
if configFilePath == "" {
|
|
viper.SetConfigFile("./config.json")
|
|
} else {
|
|
viper.SetConfigFile(configFilePath)
|
|
}
|
|
|
|
viper.SetEnvPrefix("focalboard")
|
|
viper.AutomaticEnv() // read config values from env like FOCALBOARD_SERVERROOT=...
|
|
viper.SetDefault("ServerRoot", DefaultServerRoot)
|
|
viper.SetDefault("Port", DefaultPort)
|
|
viper.SetDefault("DBType", "sqlite3")
|
|
viper.SetDefault("DBConfigString", "./focalboard.db")
|
|
viper.SetDefault("DBTablePrefix", "")
|
|
viper.SetDefault("SecureCookie", false)
|
|
viper.SetDefault("WebPath", "./pack")
|
|
viper.SetDefault("FilesPath", "./files")
|
|
viper.SetDefault("FilesDriver", "local")
|
|
viper.SetDefault("Telemetry", true)
|
|
viper.SetDefault("TelemetryID", "")
|
|
viper.SetDefault("WebhookUpdate", nil)
|
|
viper.SetDefault("SessionExpireTime", 60*60*24*30) // 30 days session lifetime
|
|
viper.SetDefault("SessionRefreshTime", 60*60*5) // 5 minutes session refresh
|
|
viper.SetDefault("LocalOnly", false)
|
|
viper.SetDefault("EnableLocalMode", false)
|
|
viper.SetDefault("LocalModeSocketLocation", "/var/tmp/focalboard_local.socket")
|
|
viper.SetDefault("EnablePublicSharedBoards", false)
|
|
viper.SetDefault("FeatureFlags", map[string]string{})
|
|
viper.SetDefault("AuthMode", "native")
|
|
viper.SetDefault("NotifyFreqCardSeconds", 120) // 2 minutes after last card edit
|
|
viper.SetDefault("NotifyFreqBoardSeconds", 86400) // 1 day after last card edit
|
|
|
|
err := viper.ReadInConfig() // Find and read the config file
|
|
if err != nil { // Handle errors reading the config file
|
|
return nil, err
|
|
}
|
|
|
|
configuration := Configuration{}
|
|
|
|
err = viper.Unmarshal(&configuration)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
log.Println("readConfigFile")
|
|
log.Printf("%+v", removeSecurityData(configuration))
|
|
|
|
return &configuration, nil
|
|
}
|
|
|
|
func removeSecurityData(config Configuration) Configuration {
|
|
clean := config
|
|
return clean
|
|
}
|