mirror of
https://github.com/lus/pasty.git
synced 2023-08-10 21:13:09 +03:00
make config compatibility layer more abstract
This commit is contained in:
parent
18839a2021
commit
05a27a00c0
@ -29,6 +29,7 @@ func main() {
|
||||
}
|
||||
|
||||
// Load the configuration
|
||||
config.Compatibility()
|
||||
cfg, err := config.Load()
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).Msg("Could not load the configuration.")
|
||||
@ -46,10 +47,6 @@ func main() {
|
||||
zerolog.SetGlobalLevel(level)
|
||||
}
|
||||
|
||||
// Run the configuration compatibility layer
|
||||
// TODO: Remove this at a later state
|
||||
configCompatibilityLayer(cfg)
|
||||
|
||||
// Determine the correct storage driver to use
|
||||
var driver storage.Driver
|
||||
switch strings.TrimSpace(strings.ToLower(cfg.StorageDriver)) {
|
||||
@ -78,17 +75,16 @@ func main() {
|
||||
}()
|
||||
|
||||
// Start the web server
|
||||
log.Info().Str("address", cfg.WebAddress).Msg("Starting the web server...")
|
||||
log.Info().Str("address", cfg.Address).Msg("Starting the web server...")
|
||||
webServer := &web.Server{
|
||||
Address: cfg.WebAddress,
|
||||
Address: cfg.Address,
|
||||
Storage: driver,
|
||||
HastebinSupport: cfg.HastebinSupport,
|
||||
PasteIDLength: cfg.IDLength,
|
||||
PasteIDCharset: cfg.IDCharacters,
|
||||
PasteLengthCap: cfg.LengthCap,
|
||||
PasteIDLength: cfg.PasteIDLength,
|
||||
PasteIDCharset: cfg.PasteIDCharset,
|
||||
PasteLengthCap: cfg.PasteLengthCap,
|
||||
ModificationTokensEnabled: cfg.ModificationTokens,
|
||||
ModificationTokenLength: cfg.ModificationTokenLength,
|
||||
ModificationTokenCharset: cfg.ModificationTokenCharacters,
|
||||
ModificationTokenCharset: cfg.ModificationTokenCharset,
|
||||
}
|
||||
if cfg.Reports.Enabled {
|
||||
webServer.ReportClient = &reports.Client{
|
||||
@ -117,10 +113,3 @@ func main() {
|
||||
signal.Notify(shutdownChan, os.Interrupt)
|
||||
<-shutdownChan
|
||||
}
|
||||
|
||||
func configCompatibilityLayer(cfg *config.Config) {
|
||||
// Print a notice if the (now removed) Hastebin support has been enabled
|
||||
if cfg.HastebinSupport {
|
||||
log.Warn().Msg("You have enabled the legacy 'Hastebin support' feature. This feature has been removed.")
|
||||
}
|
||||
}
|
||||
|
69
internal/config/compatibility.go
Normal file
69
internal/config/compatibility.go
Normal file
@ -0,0 +1,69 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/rs/zerolog/log"
|
||||
"os"
|
||||
)
|
||||
|
||||
var removedKeys = []string{
|
||||
"PASTY_HASTEBIN_SUPPORT",
|
||||
"PASTY_STORAGE_FILE_PATH",
|
||||
"PASTY_STORAGE_MONGODB_CONNECTION_STRING",
|
||||
"PASTY_STORAGE_MONGODB_DATABASE",
|
||||
"PASTY_STORAGE_MONGODB_COLLECTION",
|
||||
"PASTY_STORAGE_S3_ENDPOINT",
|
||||
"PASTY_STORAGE_S3_ACCESS_KEY_ID",
|
||||
"PASTY_STORAGE_S3_SECRET_ACCESS_KEY",
|
||||
"PASTY_STORAGE_S3_SECRET_TOKEN",
|
||||
"PASTY_STORAGE_S3_SECURE",
|
||||
"PASTY_STORAGE_S3_REGION",
|
||||
"PASTY_STORAGE_S3_BUCKET",
|
||||
}
|
||||
|
||||
var keyRedirects = map[string][]string{
|
||||
"PASTY_ADDRESS": {"PASTY_WEB_ADDRESS"},
|
||||
"PASTY_STORAGE_DRIVER": {"PASTY_STORAGE_TYPE"},
|
||||
"PASTY_POSTGRES_DSN": {"PASTY_STORAGE_POSTGRES_DSN"},
|
||||
"PASTY_PASTE_ID_LENGTH": {"PASTY_ID_LENGTH"},
|
||||
"PASTY_PASTE_ID_CHARSET": {"PASTY_ID_CHARACTERS"},
|
||||
"PASTY_PASTE_LENGTH_CAP": {"PASTY_LENGTH_CAP"},
|
||||
"PASTY_REPORTS_ENABLED": {"PASTY_REPORTS_ENABLED"},
|
||||
"PASTY_REPORTS_WEBHOOK_URL": {"PASTY_REPORT_WEBHOOK"},
|
||||
"PASTY_REPORTS_WEBHOOK_TOKEN": {"PASTY_REPORT_WEBHOOK_TOKEN"},
|
||||
"PASTY_MODIFICATION_TOKEN_CHARSET": {"PASTY_MODIFICATION_TOKEN_CHARACTERS"},
|
||||
"PASTY_MODIFICATION_TOKENS": {"PASTY_DELETION_TOKENS"},
|
||||
"PASTY_MODIFICATION_TOKEN_MASTER": {"PASTY_DELETION_TOKEN_MASTER"},
|
||||
"PASTY_MODIFICATION_TOKEN_LENGTH": {"PASTY_DELETION_TOKEN_LENGTH"},
|
||||
}
|
||||
|
||||
// Compatibility runs several compatibility measurements.
|
||||
// This is used to redirect legacy config keys to their new equivalent or print warnings about deprecated ones.
|
||||
func Compatibility() {
|
||||
_ = godotenv.Overload()
|
||||
|
||||
for _, key := range removedKeys {
|
||||
if isSet(key) {
|
||||
log.Warn().Msgf("You have set the '%s' environment variable. This variable has been discontinued and has no further effect.", key)
|
||||
}
|
||||
}
|
||||
|
||||
for newKey, oldKeys := range keyRedirects {
|
||||
if !isSet(newKey) {
|
||||
for _, oldKey := range oldKeys {
|
||||
if isSet(oldKey) {
|
||||
if err := os.Setenv(newKey, os.Getenv(oldKey)); err != nil {
|
||||
continue
|
||||
}
|
||||
log.Warn().Msgf("You have set the '%s' environment variable. This variable has been renamed to '%s'. The value has been propagated, but please consider changing your configuration to avoid further complications.", oldKey, newKey)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func isSet(key string) bool {
|
||||
_, ok := os.LookupEnv(key)
|
||||
return ok
|
||||
}
|
@ -7,22 +7,21 @@ import (
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
LogLevel string `default:"info" split_words:"true"`
|
||||
WebAddress string `default:":8080" split_words:"true"`
|
||||
StorageDriver string `default:"sqlite" split_words:"true"`
|
||||
HastebinSupport bool `default:"false" split_words:"true"` // TODO: Legacy
|
||||
IDLength int `default:"6" split_words:"true"`
|
||||
IDCharacters string `default:"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" split_words:"true"`
|
||||
ModificationTokens bool `default:"true" split_words:"true"`
|
||||
ModificationTokenMaster string `split_words:"true"`
|
||||
ModificationTokenLength int `default:"12" split_words:"true"`
|
||||
ModificationTokenCharacters string `default:"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" split_words:"true"`
|
||||
RateLimit string `default:"30-M" split_words:"true"`
|
||||
LengthCap int `default:"50000" split_words:"true"`
|
||||
AutoDelete *AutoDeleteConfig `split_words:"true"`
|
||||
Reports *ReportConfig
|
||||
Postgres *PostgresConfig
|
||||
SQLite *SQLiteConfig
|
||||
LogLevel string `default:"info" split_words:"true"`
|
||||
Address string `default:":8080" split_words:"true"`
|
||||
StorageDriver string `default:"sqlite" split_words:"true"`
|
||||
PasteIDLength int `default:"6" split_words:"true"`
|
||||
PasteIDCharset string `default:"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" split_words:"true"`
|
||||
ModificationTokens bool `default:"true" split_words:"true"`
|
||||
ModificationTokenMaster string `split_words:"true"`
|
||||
ModificationTokenLength int `default:"12" split_words:"true"`
|
||||
ModificationTokenCharset string `default:"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" split_words:"true"`
|
||||
RateLimit string `default:"30-M" split_words:"true"`
|
||||
PasteLengthCap int `default:"50000" split_words:"true"`
|
||||
AutoDelete *AutoDeleteConfig `split_words:"true"`
|
||||
Reports *ReportConfig
|
||||
Postgres *PostgresConfig
|
||||
SQLite *SQLiteConfig
|
||||
}
|
||||
|
||||
type AutoDeleteConfig struct {
|
||||
|
@ -23,10 +23,6 @@ type Server struct {
|
||||
// If this is set to nil, the report system will be considered deactivated.
|
||||
ReportClient *reports.Client
|
||||
|
||||
// Whether the Hastebin support should be enabled.
|
||||
// If this is set to 'false', the Hastebin specific endpoints will not be registered.
|
||||
HastebinSupport bool
|
||||
|
||||
// The length of newly generated paste IDs.
|
||||
PasteIDLength int
|
||||
// The charset to use when generating new paste IDs.
|
||||
|
@ -16,7 +16,7 @@ func Middleware(next http.Handler) http.Handler {
|
||||
}
|
||||
}()
|
||||
|
||||
next.ServeHTTP(writer, request)
|
||||
next.ServeHTTP(proxy, request)
|
||||
}
|
||||
return http.HandlerFunc(fn)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user