From 0884f89431cd26bcc9674b3b7ab628b090f5881e Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Tue, 7 Dec 2021 13:31:39 +0100 Subject: Implement Cobra CLI tooling, Viper config tooling (#336) * start pulling out + replacing urfave and config * replace many many instances of config * move more stuff => viper * properly remove urfave * move some flags to root command * add testrig commands to root * alias config file keys * start adding cli parsing tests * reorder viper init * remove config path alias * fmt * change config file keys to non-nested * we're more or less in business now * tidy up the common func * go fmt * get tests passing again * add note about the cliparsing tests * reorganize * update docs with changes * structure cmd dir better * rename + move some files around * fix dangling comma --- internal/config/keys.go | 175 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 internal/config/keys.go (limited to 'internal/config/keys.go') diff --git a/internal/config/keys.go b/internal/config/keys.go new file mode 100644 index 000000000..80ca36381 --- /dev/null +++ b/internal/config/keys.go @@ -0,0 +1,175 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package config + +// KeyNames is a struct that just contains the names of configuration keys. +type KeyNames struct { + // root + LogLevel string + ConfigPath string + + // general + ApplicationName string + Host string + AccountDomain string + Protocol string + BindAddress string + Port string + TrustedProxies string + SoftwareVersion string + + // database + DbType string + DbAddress string + DbPort string + DbUser string + DbPassword string + DbDatabase string + DbTLSMode string + DbTLSCACert string + + // template + WebTemplateBaseDir string + WebAssetBaseDir string + + // accounts + AccountsRegistrationOpen string + AccountsApprovalRequired string + AccountsReasonRequired string + + // media + MediaImageMaxSize string + MediaVideoMaxSize string + MediaDescriptionMinChars string + MediaDescriptionMaxChars string + + // storage + StorageBackend string + StorageBasePath string + StorageServeProtocol string + StorageServeHost string + StorageServeBasePath string + + // statuses + StatusesMaxChars string + StatusesCWMaxChars string + StatusesPollMaxOptions string + StatusesPollOptionMaxChars string + StatusesMediaMaxFiles string + + // letsencrypt + LetsEncryptEnabled string + LetsEncryptCertDir string + LetsEncryptEmailAddress string + LetsEncryptPort string + + // oidc + OIDCEnabled string + OIDCIdpName string + OIDCSkipVerification string + OIDCIssuer string + OIDCClientID string + OIDCClientSecret string + OIDCScopes string + + // smtp + SMTPHost string + SMTPPort string + SMTPUsername string + SMTPPassword string + SMTPFrom string + + // admin + AdminAccountUsername string + AdminAccountEmail string + AdminAccountPassword string + AdminTransPath string +} + +// Keys contains the names of the various keys used for initializing and storing flag variables, +// and retrieving values from the viper config store. +var Keys = KeyNames{ + LogLevel: "log-level", + ApplicationName: "application-name", + ConfigPath: "config-path", + Host: "host", + AccountDomain: "account-domain", + Protocol: "protocol", + BindAddress: "bind-address", + Port: "port", + TrustedProxies: "trusted-proxies", + SoftwareVersion: "software-version", + + DbType: "db-type", + DbAddress: "db-address", + DbPort: "db-port", + DbUser: "db-user", + DbPassword: "db-password", + DbDatabase: "db-database", + DbTLSMode: "db-tls-mode", + DbTLSCACert: "db-tls-ca-cert", + + WebTemplateBaseDir: "web-template-base-dir", + WebAssetBaseDir: "web-asset-base-dir", + + AccountsRegistrationOpen: "accounts-registration-open", + AccountsApprovalRequired: "accounts-approval-required", + AccountsReasonRequired: "accounts-reason-required", + + MediaImageMaxSize: "media-image-max-size", + MediaVideoMaxSize: "media-video-max-size", + MediaDescriptionMinChars: "media-description-min-chars", + MediaDescriptionMaxChars: "media-description-max-chars", + + StorageBackend: "storage-backend", + StorageBasePath: "storage-base-path", + StorageServeProtocol: "storage-serve-protocol", + StorageServeHost: "storage-serve-host", + StorageServeBasePath: "storage-serve-base-path", + + StatusesMaxChars: "statuses-max-chars", + StatusesCWMaxChars: "statuses-cw-max-chars", + StatusesPollMaxOptions: "statuses-poll-max-options", + StatusesPollOptionMaxChars: "statuses-poll-option-max-chars", + StatusesMediaMaxFiles: "statuses-media-max-files", + + LetsEncryptEnabled: "letsencrypt-enabled", + LetsEncryptPort: "letsencrypt-port", + LetsEncryptCertDir: "letsencrypt-cert-dir", + LetsEncryptEmailAddress: "letsencrypt-email-address", + + OIDCEnabled: "oidc-enabled", + OIDCIdpName: "oidc-idp-name", + OIDCSkipVerification: "oidc-skip-verification", + OIDCIssuer: "oidc-issuer", + OIDCClientID: "oidc-client-id", + OIDCClientSecret: "oidc-client-secret", + OIDCScopes: "oidc-scopes", + + SMTPHost: "smtp-host", + SMTPPort: "smtp-port", + SMTPUsername: "smtp-username", + SMTPPassword: "smtp-password", + SMTPFrom: "smtp-from", + + AdminAccountUsername: "username", + AdminAccountEmail: "email", + AdminAccountPassword: "password", + AdminTransPath: "path", +} -- cgit v1.2.3