2022-11-13 19:17:07 +01:00
|
|
|
package server
|
|
|
|
|
|
|
|
import (
|
2022-11-21 22:52:44 +01:00
|
|
|
"fmt"
|
2022-12-07 22:11:44 +01:00
|
|
|
"github.com/rs/zerolog"
|
2022-11-13 19:17:07 +01:00
|
|
|
"github.com/rs/zerolog/log"
|
2022-12-16 01:07:48 +01:00
|
|
|
"gogs.mikescher.com/BlackForestBytes/goext/confext"
|
2023-01-13 17:17:17 +01:00
|
|
|
"gogs.mikescher.com/BlackForestBytes/goext/timeext"
|
2022-11-13 19:17:07 +01:00
|
|
|
"os"
|
2022-11-18 21:25:40 +01:00
|
|
|
"time"
|
2022-11-13 19:17:07 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
type Config struct {
|
2023-01-13 17:17:17 +01:00
|
|
|
Namespace string
|
2023-04-21 21:45:16 +02:00
|
|
|
BaseURL string `env:"URL"`
|
|
|
|
GinDebug bool `env:"GINDEBUG"`
|
|
|
|
LogLevel zerolog.Level `env:"LOGLEVEL"`
|
|
|
|
ServerIP string `env:"IP"`
|
|
|
|
ServerPort string `env:"PORT"`
|
|
|
|
DBMain DBConfig `env:"DB_MAIN"`
|
|
|
|
DBRequests DBConfig `env:"DB_REQUESTS"`
|
|
|
|
DBLogs DBConfig `env:"DB_LOGS"`
|
|
|
|
RequestTimeout time.Duration `env:"REQUEST_TIMEOUT"`
|
|
|
|
RequestMaxRetry int `env:"REQUEST_MAXRETRY"`
|
|
|
|
RequestRetrySleep time.Duration `env:"REQUEST_RETRYSLEEP"`
|
|
|
|
Cors bool `env:"CORS"`
|
|
|
|
ReturnRawErrors bool `env:"ERROR_RETURN"`
|
|
|
|
DummyFirebase bool `env:"DUMMY_FB"`
|
|
|
|
DummyGoogleAPI bool `env:"DUMMY_GOOG"`
|
|
|
|
FirebaseTokenURI string `env:"FB_TOKENURI"`
|
|
|
|
FirebaseProjectID string `env:"FB_PROJECTID"`
|
|
|
|
FirebasePrivKeyID string `env:"FB_PRIVATEKEYID"`
|
|
|
|
FirebaseClientMail string `env:"FB_CLIENTEMAIL"`
|
|
|
|
FirebasePrivateKey string `env:"FB_PRIVATEKEY"`
|
|
|
|
GoogleAPITokenURI string `env:"GOOG_TOKENURI"`
|
|
|
|
GoogleAPIPrivKeyID string `env:"GOOG_PRIVATEKEYID"`
|
|
|
|
GoogleAPIClientMail string `env:"GOOG_CLIENTEMAIL"`
|
|
|
|
GoogleAPIPrivateKey string `env:"GOOG_PRIVATEKEY"`
|
|
|
|
GooglePackageName string `env:"GOOG_PACKAGENAME"`
|
|
|
|
GoogleProProductID string `env:"GOOG_PROPRODUCTID"`
|
|
|
|
ReqLogEnabled bool `env:"REQUESTLOG_ENABLED"`
|
|
|
|
ReqLogMaxBodySize int `env:"REQUESTLOG_MAXBODYSIZE"`
|
|
|
|
ReqLogHistoryMaxCount int `env:"REQUESTLOG_HISTORY_MAXCOUNT"`
|
|
|
|
ReqLogHistoryMaxDuration time.Duration `env:"REQUESTLOG_HISTORY_MAXDURATION"`
|
2023-01-06 00:39:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
type DBConfig struct {
|
|
|
|
File string `env:"FILE"`
|
|
|
|
Journal string `env:"JOURNAL"`
|
|
|
|
Timeout time.Duration `env:"TIMEOUT"`
|
|
|
|
MaxOpenConns int `env:"MAXOPENCONNECTIONS"`
|
|
|
|
MaxIdleConns int `env:"MAXIDLECONNECTIONS"`
|
|
|
|
ConnMaxLifetime time.Duration `env:"CONNEXTIONMAXLIFETIME"`
|
|
|
|
ConnMaxIdleTime time.Duration `env:"CONNEXTIONMAXIDLETIME"`
|
|
|
|
CheckForeignKeys bool `env:"CHECKFOREIGNKEYS"`
|
|
|
|
SingleConn bool `env:"SINGLECONNECTION"`
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout time.Duration `env:"BUSYTIMEOUT"`
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger bool `env:"ENABLELOGGER"`
|
2022-11-13 19:17:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
var Conf Config
|
|
|
|
|
2022-11-23 19:32:23 +01:00
|
|
|
var configLocHost = func() Config {
|
|
|
|
return Config{
|
2023-01-06 00:39:21 +01:00
|
|
|
Namespace: "local-host",
|
|
|
|
BaseURL: "http://localhost:8080",
|
|
|
|
GinDebug: false,
|
|
|
|
LogLevel: zerolog.DebugLevel,
|
|
|
|
ServerIP: "0.0.0.0",
|
|
|
|
ServerPort: "8080",
|
|
|
|
DBMain: DBConfig{
|
|
|
|
File: ".run-data/loc_main.sqlite3",
|
|
|
|
Journal: "WAL",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 100 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBRequests: DBConfig{
|
|
|
|
File: ".run-data/loc_requests.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBLogs: DBConfig{
|
|
|
|
File: ".run-data/loc_logs.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
2023-01-13 17:17:17 +01:00
|
|
|
RequestTimeout: 16 * time.Second,
|
|
|
|
RequestMaxRetry: 8,
|
|
|
|
RequestRetrySleep: 100 * time.Millisecond,
|
|
|
|
ReturnRawErrors: true,
|
|
|
|
DummyFirebase: true,
|
|
|
|
FirebaseTokenURI: "",
|
|
|
|
FirebaseProjectID: "",
|
|
|
|
FirebasePrivKeyID: "",
|
|
|
|
FirebaseClientMail: "",
|
|
|
|
FirebasePrivateKey: "",
|
|
|
|
DummyGoogleAPI: true,
|
|
|
|
GoogleAPITokenURI: "",
|
|
|
|
GoogleAPIPrivKeyID: "",
|
|
|
|
GoogleAPIClientMail: "",
|
|
|
|
GoogleAPIPrivateKey: "",
|
|
|
|
GooglePackageName: "",
|
|
|
|
GoogleProProductID: "",
|
|
|
|
Cors: true,
|
|
|
|
ReqLogEnabled: true,
|
|
|
|
ReqLogMaxBodySize: 2048,
|
|
|
|
ReqLogHistoryMaxCount: 1638,
|
|
|
|
ReqLogHistoryMaxDuration: timeext.FromDays(60),
|
2022-11-23 19:32:23 +01:00
|
|
|
}
|
2022-11-13 19:17:07 +01:00
|
|
|
}
|
|
|
|
|
2022-11-23 19:32:23 +01:00
|
|
|
var configLocDocker = func() Config {
|
|
|
|
return Config{
|
2023-01-06 00:39:21 +01:00
|
|
|
Namespace: "local-docker",
|
|
|
|
BaseURL: "http://localhost:8080",
|
|
|
|
GinDebug: false,
|
|
|
|
LogLevel: zerolog.DebugLevel,
|
|
|
|
ServerIP: "0.0.0.0",
|
|
|
|
ServerPort: "80",
|
|
|
|
DBMain: DBConfig{
|
|
|
|
File: "/data/docker_scn_main.sqlite3",
|
|
|
|
Journal: "WAL",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 100 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBRequests: DBConfig{
|
|
|
|
File: "/data/docker_scn_requests.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBLogs: DBConfig{
|
|
|
|
File: "/data/docker_scn_logs.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
2023-01-13 17:17:17 +01:00
|
|
|
RequestTimeout: 16 * time.Second,
|
|
|
|
RequestMaxRetry: 8,
|
|
|
|
RequestRetrySleep: 100 * time.Millisecond,
|
|
|
|
ReturnRawErrors: true,
|
|
|
|
DummyFirebase: true,
|
|
|
|
FirebaseTokenURI: "",
|
|
|
|
FirebaseProjectID: "",
|
|
|
|
FirebasePrivKeyID: "",
|
|
|
|
FirebaseClientMail: "",
|
|
|
|
FirebasePrivateKey: "",
|
|
|
|
DummyGoogleAPI: true,
|
|
|
|
GoogleAPITokenURI: "",
|
|
|
|
GoogleAPIPrivKeyID: "",
|
|
|
|
GoogleAPIClientMail: "",
|
|
|
|
GoogleAPIPrivateKey: "",
|
|
|
|
GooglePackageName: "",
|
|
|
|
GoogleProProductID: "",
|
|
|
|
Cors: true,
|
|
|
|
ReqLogMaxBodySize: 2048,
|
|
|
|
ReqLogHistoryMaxCount: 1638,
|
|
|
|
ReqLogHistoryMaxDuration: timeext.FromDays(60),
|
2022-11-23 19:32:23 +01:00
|
|
|
}
|
2022-11-20 03:41:38 +01:00
|
|
|
}
|
|
|
|
|
2022-11-23 19:32:23 +01:00
|
|
|
var configDev = func() Config {
|
|
|
|
return Config{
|
2023-01-06 00:39:21 +01:00
|
|
|
Namespace: "develop",
|
|
|
|
BaseURL: confEnv("SCN_URL"),
|
|
|
|
GinDebug: false,
|
|
|
|
LogLevel: zerolog.DebugLevel,
|
|
|
|
ServerIP: "0.0.0.0",
|
|
|
|
ServerPort: "80",
|
|
|
|
DBMain: DBConfig{
|
|
|
|
File: "/data/scn_main.sqlite3",
|
|
|
|
Journal: "WAL",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 100 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBRequests: DBConfig{
|
|
|
|
File: "/data/scn_requests.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBLogs: DBConfig{
|
|
|
|
File: "/data/scn_logs.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
2023-01-13 17:17:17 +01:00
|
|
|
RequestTimeout: 16 * time.Second,
|
|
|
|
RequestMaxRetry: 8,
|
|
|
|
RequestRetrySleep: 100 * time.Millisecond,
|
|
|
|
ReturnRawErrors: true,
|
|
|
|
DummyFirebase: false,
|
|
|
|
FirebaseTokenURI: "https://oauth2.googleapis.com/token",
|
|
|
|
FirebaseProjectID: confEnv("SCN_FB_PROJECTID"),
|
|
|
|
FirebasePrivKeyID: confEnv("SCN_FB_PRIVATEKEYID"),
|
|
|
|
FirebaseClientMail: confEnv("SCN_FB_CLIENTEMAIL"),
|
|
|
|
FirebasePrivateKey: confEnv("SCN_FB_PRIVATEKEY"),
|
|
|
|
DummyGoogleAPI: false,
|
|
|
|
GoogleAPITokenURI: "https://oauth2.googleapis.com/token",
|
|
|
|
GoogleAPIPrivKeyID: confEnv("SCN_GOOG_PRIVATEKEYID"),
|
|
|
|
GoogleAPIClientMail: confEnv("SCN_GOOG_CLIENTEMAIL"),
|
|
|
|
GoogleAPIPrivateKey: confEnv("SCN_GOOG_PRIVATEKEY"),
|
|
|
|
GooglePackageName: confEnv("SCN_GOOG_PACKAGENAME"),
|
|
|
|
GoogleProProductID: confEnv("SCN_GOOG_PROPRODUCTID"),
|
|
|
|
Cors: true,
|
2023-06-18 13:11:48 +02:00
|
|
|
ReqLogEnabled: true,
|
2023-01-13 17:17:17 +01:00
|
|
|
ReqLogMaxBodySize: 2048,
|
|
|
|
ReqLogHistoryMaxCount: 1638,
|
|
|
|
ReqLogHistoryMaxDuration: timeext.FromDays(60),
|
2022-11-23 19:32:23 +01:00
|
|
|
}
|
2022-11-13 19:17:07 +01:00
|
|
|
}
|
|
|
|
|
2022-11-23 19:32:23 +01:00
|
|
|
var configStag = func() Config {
|
|
|
|
return Config{
|
2023-01-06 00:39:21 +01:00
|
|
|
Namespace: "staging",
|
|
|
|
BaseURL: confEnv("SCN_URL"),
|
|
|
|
GinDebug: false,
|
|
|
|
LogLevel: zerolog.DebugLevel,
|
|
|
|
ServerIP: "0.0.0.0",
|
|
|
|
ServerPort: "80",
|
|
|
|
DBMain: DBConfig{
|
|
|
|
File: "/data/scn_main.sqlite3",
|
|
|
|
Journal: "WAL",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 100 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBRequests: DBConfig{
|
|
|
|
File: "/data/scn_requests.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBLogs: DBConfig{
|
|
|
|
File: "/data/scn_logs.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
2023-01-13 17:17:17 +01:00
|
|
|
RequestTimeout: 16 * time.Second,
|
|
|
|
RequestMaxRetry: 8,
|
|
|
|
RequestRetrySleep: 100 * time.Millisecond,
|
|
|
|
ReturnRawErrors: true,
|
|
|
|
DummyFirebase: false,
|
|
|
|
FirebaseTokenURI: "https://oauth2.googleapis.com/token",
|
|
|
|
FirebaseProjectID: confEnv("SCN_FB_PROJECTID"),
|
|
|
|
FirebasePrivKeyID: confEnv("SCN_FB_PRIVATEKEYID"),
|
|
|
|
FirebaseClientMail: confEnv("SCN_FB_CLIENTEMAIL"),
|
|
|
|
FirebasePrivateKey: confEnv("SCN_FB_PRIVATEKEY"),
|
|
|
|
DummyGoogleAPI: false,
|
|
|
|
GoogleAPITokenURI: "https://oauth2.googleapis.com/token",
|
|
|
|
GoogleAPIPrivKeyID: confEnv("SCN_GOOG_PRIVATEKEYID"),
|
|
|
|
GoogleAPIClientMail: confEnv("SCN_GOOG_CLIENTEMAIL"),
|
|
|
|
GoogleAPIPrivateKey: confEnv("SCN_GOOG_PRIVATEKEY"),
|
|
|
|
GooglePackageName: confEnv("SCN_GOOG_PACKAGENAME"),
|
|
|
|
GoogleProProductID: confEnv("SCN_GOOG_PROPRODUCTID"),
|
|
|
|
Cors: true,
|
2023-06-18 13:11:48 +02:00
|
|
|
ReqLogEnabled: true,
|
2023-01-13 17:17:17 +01:00
|
|
|
ReqLogMaxBodySize: 2048,
|
|
|
|
ReqLogHistoryMaxCount: 1638,
|
|
|
|
ReqLogHistoryMaxDuration: timeext.FromDays(60),
|
2022-11-23 19:32:23 +01:00
|
|
|
}
|
2022-11-13 19:17:07 +01:00
|
|
|
}
|
|
|
|
|
2022-11-23 19:32:23 +01:00
|
|
|
var configProd = func() Config {
|
|
|
|
return Config{
|
2023-01-06 00:39:21 +01:00
|
|
|
Namespace: "production",
|
|
|
|
BaseURL: confEnv("SCN_URL"),
|
|
|
|
GinDebug: false,
|
|
|
|
LogLevel: zerolog.InfoLevel,
|
|
|
|
ServerIP: "0.0.0.0",
|
|
|
|
ServerPort: "80",
|
|
|
|
DBMain: DBConfig{
|
|
|
|
File: "/data/scn_main.sqlite3",
|
|
|
|
Journal: "WAL",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 100 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBRequests: DBConfig{
|
|
|
|
File: "/data/scn_requests.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
|
|
|
DBLogs: DBConfig{
|
|
|
|
File: "/data/scn_logs.sqlite3",
|
|
|
|
Journal: "DELETE",
|
|
|
|
Timeout: 5 * time.Second,
|
|
|
|
CheckForeignKeys: false,
|
2024-10-03 14:37:48 +02:00
|
|
|
SingleConn: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
MaxOpenConns: 5,
|
|
|
|
MaxIdleConns: 5,
|
|
|
|
ConnMaxLifetime: 60 * time.Minute,
|
|
|
|
ConnMaxIdleTime: 60 * time.Minute,
|
2023-01-14 00:48:51 +01:00
|
|
|
BusyTimeout: 500 * time.Millisecond,
|
2023-01-15 06:30:30 +01:00
|
|
|
EnableLogger: true,
|
2023-01-06 00:39:21 +01:00
|
|
|
},
|
2023-01-13 17:17:17 +01:00
|
|
|
RequestTimeout: 16 * time.Second,
|
2024-05-26 19:30:13 +02:00
|
|
|
RequestMaxRetry: 32,
|
|
|
|
RequestRetrySleep: 32 * time.Millisecond,
|
2023-01-13 17:17:17 +01:00
|
|
|
ReturnRawErrors: false,
|
|
|
|
DummyFirebase: false,
|
|
|
|
FirebaseTokenURI: "https://oauth2.googleapis.com/token",
|
2023-06-17 23:40:46 +02:00
|
|
|
FirebaseProjectID: confEnv("SCN_FB_PROJECTID"),
|
|
|
|
FirebasePrivKeyID: confEnv("SCN_FB_PRIVATEKEYID"),
|
|
|
|
FirebaseClientMail: confEnv("SCN_FB_CLIENTEMAIL"),
|
|
|
|
FirebasePrivateKey: confEnv("SCN_FB_PRIVATEKEY"),
|
2023-01-13 17:17:17 +01:00
|
|
|
DummyGoogleAPI: false,
|
|
|
|
GoogleAPITokenURI: "https://oauth2.googleapis.com/token",
|
2023-06-17 23:40:46 +02:00
|
|
|
GoogleAPIPrivKeyID: confEnv("SCN_GOOG_PRIVATEKEYID"),
|
|
|
|
GoogleAPIClientMail: confEnv("SCN_GOOG_CLIENTEMAIL"),
|
|
|
|
GoogleAPIPrivateKey: confEnv("SCN_GOOG_PRIVATEKEY"),
|
|
|
|
GooglePackageName: confEnv("SCN_GOOG_PACKAGENAME"),
|
|
|
|
GoogleProProductID: confEnv("SCN_GOOG_PROPRODUCTID"),
|
2023-01-13 17:17:17 +01:00
|
|
|
Cors: true,
|
2023-06-18 13:11:48 +02:00
|
|
|
ReqLogEnabled: true,
|
2023-01-13 17:17:17 +01:00
|
|
|
ReqLogMaxBodySize: 2048,
|
|
|
|
ReqLogHistoryMaxCount: 1638,
|
|
|
|
ReqLogHistoryMaxDuration: timeext.FromDays(60),
|
2022-11-23 19:32:23 +01:00
|
|
|
}
|
2022-11-13 19:17:07 +01:00
|
|
|
}
|
|
|
|
|
2022-11-23 19:32:23 +01:00
|
|
|
var allConfig = map[string]func() Config{
|
|
|
|
"local-host": configLocHost,
|
|
|
|
"local-docker": configLocDocker,
|
|
|
|
"develop": configDev,
|
|
|
|
"staging": configStag,
|
|
|
|
"production": configProd,
|
2022-11-13 19:17:07 +01:00
|
|
|
}
|
|
|
|
|
2023-01-06 00:39:21 +01:00
|
|
|
func GetConfig(ns string) (Config, bool) {
|
2022-11-13 19:17:07 +01:00
|
|
|
if ns == "" {
|
2022-12-07 23:32:58 +01:00
|
|
|
ns = "local-host"
|
2022-11-13 19:17:07 +01:00
|
|
|
}
|
2022-12-07 23:32:58 +01:00
|
|
|
if cfn, ok := allConfig[ns]; ok {
|
|
|
|
c := cfn()
|
2023-04-21 21:45:16 +02:00
|
|
|
err := confext.ApplyEnvOverrides("SCN_", &c, "_")
|
2022-12-16 01:07:48 +01:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2022-12-07 23:32:58 +01:00
|
|
|
return c, true
|
2022-11-13 19:17:07 +01:00
|
|
|
}
|
|
|
|
return Config{}, false
|
|
|
|
}
|
|
|
|
|
2022-11-21 22:52:44 +01:00
|
|
|
func confEnv(key string) string {
|
|
|
|
if v, ok := os.LookupEnv(key); ok {
|
|
|
|
return v
|
|
|
|
} else {
|
2022-11-26 17:03:26 +01:00
|
|
|
log.Fatal().Msg(fmt.Sprintf("Missing required environment variable '%s'", key))
|
|
|
|
return ""
|
2022-11-21 22:52:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-11-13 19:17:07 +01:00
|
|
|
func init() {
|
2023-06-17 23:40:46 +02:00
|
|
|
ns := os.Getenv("CONF_NS")
|
2022-11-13 19:17:07 +01:00
|
|
|
|
2023-01-06 00:39:21 +01:00
|
|
|
cfg, ok := GetConfig(ns)
|
2022-11-13 19:17:07 +01:00
|
|
|
if !ok {
|
|
|
|
log.Fatal().Str("ns", ns).Msg("Unknown config-namespace")
|
|
|
|
}
|
|
|
|
|
|
|
|
Conf = cfg
|
|
|
|
}
|