From 9effde160c80aabc8f82d6f92d0e21cc91246814 Mon Sep 17 00:00:00 2001 From: Chris Wiegman Date: Sun, 21 Jan 2024 17:18:42 -0600 Subject: [PATCH] Working on starting a site --- internal/settings/api.go | 87 +++++++ internal/settings/config.go | 4 +- internal/settings/defaults.go | 10 - internal/settings/files.go | 6 +- internal/settings/internal.go | 344 +++++++++++++++++++++++++ internal/settings/settings.go | 462 +--------------------------------- internal/settings/ssl.go | 14 +- internal/settings/types.go | 6 +- internal/site/site.go | 2 +- internal/site/wordpress.go | 12 +- 10 files changed, 464 insertions(+), 483 deletions(-) create mode 100644 internal/settings/api.go create mode 100644 internal/settings/internal.go diff --git a/internal/settings/api.go b/internal/settings/api.go new file mode 100644 index 00000000..af5f5c1f --- /dev/null +++ b/internal/settings/api.go @@ -0,0 +1,87 @@ +package settings + +import ( + "fmt" + "os" + "path" + "strconv" + "strings" +) + +// GetArrayValue returns a slice of strings with the set value. +func (s *Settings) GetArrayValue(name string) []string { + setting, _ := s.getSetting(name) + + return strings.Split(setting.DefaultValue, ",") +} + +// GetBoolValue returns a bool with the set value. +func (s *Settings) GetBoolValue(name string) bool { + setting, _ := s.getSetting(name) + + settingVal, _ := strconv.ParseBool(setting.DefaultValue) + + return settingVal +} + +// GetDefaultPermissions returns the default directory permissions and the default file permissions. +func GetDefaultPermissions() (dirPerms, filePerms int) { + return defaultDirPermissions, defaultFilePermissions +} + +// GetIntValue returns an int with the set value. +func (s *Settings) GetIntValue(name string) int { + setting, _ := s.getSetting(name) + + settingVal, _ := strconv.Atoi(setting.DefaultValue) + + return settingVal +} + +// GetProtocol returns the appropriate protocol for the URL based on the https setting. +func (s *Settings) GetProtocol() string { + ssl := s.GetBoolValue("ssl") + + if ssl { + return "https" + } + + return "http" +} + +// GetStringValue returns a string with the set value. +func (s *Settings) GetStringValue(name string) string { + setting, _ := s.getSetting(name) + + return setting.Value +} + +// HasLocalOptions Returns true if local options have been saved to a file or false. +func (s *Settings) HasLocalOptions() bool { + if _, err := os.Stat(path.Join(s.GetStringValue("workingDirectory"), ".kana.json")); os.IsNotExist(err) { + return false + } + + return true +} + +func (s *Settings) SetSetting(name, value string) (err error) { + for i := range s.settings { + if s.settings[i].Name == name { + validString := true + for _, validValue := range s.settings[i].ValidValues { + if validValue == value { + validString = true + } + } + + if validString { + return s.setSetting(name, value, s.settings[i].HasGlobal) + } + + return fmt.Errorf("the value, %s, for setting %s in invalid. please use a value value", value, name) + } + } + + return fmt.Errorf("setting, %s, not found", name) +} diff --git a/internal/settings/config.go b/internal/settings/config.go index 85817e3d..9965b7d4 100644 --- a/internal/settings/config.go +++ b/internal/settings/config.go @@ -40,11 +40,11 @@ func (s *Settings) ListSettings(consoleOutput *console.Console) { local := "" if s.settings[i].HasGlobal { - global = s.settings[i].GlobalValue + global = s.settings[i].Value } if s.settings[i].HasLocal { - local = s.settings[i].LocalValue + local = s.settings[i].Value } if s.settings[i].Name != "plugins" && (s.settings[i].HasLocal || s.settings[i].HasGlobal) { diff --git a/internal/settings/defaults.go b/internal/settings/defaults.go index c6de8b2b..9b5e8126 100644 --- a/internal/settings/defaults.go +++ b/internal/settings/defaults.go @@ -6,7 +6,6 @@ var defaultSettings = []Setting{ DefaultValue: "true", HasGlobal: true, HasLocal: true, - HasFlag: true, }, { Name: "adminEmail", @@ -61,7 +60,6 @@ var defaultSettings = []Setting{ DefaultValue: "local", HasGlobal: true, HasLocal: true, - HasFlag: true, ValidValues: []string{ "local", "development", @@ -88,7 +86,6 @@ var defaultSettings = []Setting{ DefaultValue: "false", HasGlobal: true, HasLocal: true, - HasFlag: true, }, { Name: "mariadb", @@ -103,7 +100,6 @@ var defaultSettings = []Setting{ DefaultValue: "none", HasGlobal: true, HasLocal: true, - HasFlag: true, ValidValues: []string{ "none", "subdomain", @@ -133,7 +129,6 @@ var defaultSettings = []Setting{ DefaultValue: "false", HasGlobal: true, HasLocal: true, - HasFlag: true, }, { Name: "rootCert", @@ -150,7 +145,6 @@ var defaultSettings = []Setting{ DefaultValue: "false", HasGlobal: true, HasLocal: true, - HasFlag: true, }, { Name: "siteCert", @@ -171,7 +165,6 @@ var defaultSettings = []Setting{ DefaultValue: "false", HasGlobal: true, HasLocal: true, - HasFlag: true, }, { Name: "type", @@ -179,7 +172,6 @@ var defaultSettings = []Setting{ DefaultValue: "site", HasGlobal: true, HasLocal: true, - HasFlag: true, ValidValues: []string{ "site", "plugin", @@ -203,14 +195,12 @@ var defaultSettings = []Setting{ DefaultValue: "false", HasGlobal: true, HasLocal: true, - HasFlag: true, }, { Name: "xdebug", DefaultValue: "false", HasGlobal: true, HasLocal: true, - HasFlag: true, }, } diff --git a/internal/settings/files.go b/internal/settings/files.go index 0a2c0143..b618503a 100644 --- a/internal/settings/files.go +++ b/internal/settings/files.go @@ -67,8 +67,8 @@ func (s *Settings) EnsureKanaPlugin(appDir string) error { // EnsureStaticConfigFiles Ensures the application's static config files have been generated and are where they need to be. func (s *Settings) EnsureStaticConfigFiles() error { for _, file := range configFiles { - filePath := path.Join(s.GetStringValue("AppDirectory"), file.LocalPath) - destFile := path.Join(s.GetStringValue("AppDirectory"), file.LocalPath, file.Name) + filePath := path.Join(s.GetStringValue("appDirectory"), file.LocalPath) + destFile := path.Join(s.GetStringValue("appDirectory"), file.LocalPath, file.Name) if err := os.MkdirAll(filePath, os.FileMode(defaultDirPermissions)); err != nil { return err @@ -86,7 +86,7 @@ func (s *Settings) EnsureStaticConfigFiles() error { } func (s *Settings) GetHtaccess() string { - if s.GetStringValue("Multisite") == "subdomain" { + if s.GetStringValue("multisite") == "subdomain" { return SubDomainMultisiteHtaccess } diff --git a/internal/settings/internal.go b/internal/settings/internal.go new file mode 100644 index 00000000..65fad360 --- /dev/null +++ b/internal/settings/internal.go @@ -0,0 +1,344 @@ +package settings + +import ( + "errors" + "fmt" + "os" + "path" + "path/filepath" + "strconv" + + "github.com/ChrisWiegman/kana-cli/internal/helpers" + + "github.com/mitchellh/go-homedir" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +// getSetting returns the string value for the provided type and settings name. +func (s *Settings) getSetting(name string) (Setting, error) { + for i := range s.settings { + if s.settings[i].Name == name { + return s.settings[i], nil + } + } + + return Setting{}, fmt.Errorf("setting, %s, not found", name) +} + +// loadDirectories loads the app directories we know for the site. +func (s *Settings) loadDirectories() error { + cwd, err := os.Getwd() + if err != nil { + return err + } + + err = s.setSetting("workingDirectory", cwd, false) + if err != nil { + return err + } + + home, err := homedir.Dir() + if err != nil { + return err + } + + configFolderName := s.GetStringValue("configFolderName") + + err = s.setSetting("appDirectory", filepath.Join(home, configFolderName), false) + if err != nil { + return err + } + + return nil +} + +func (s *Settings) loadSettings(settingType string) error { + viperSettings, err := s.loadViperSettings(settingType) + if err != nil { + return err + } + + for i := range defaultSettings { + if settingType == "global" && s.settings[i].HasGlobal { //nolint: goconst + s.global = viperSettings + err = s.setSetting(s.settings[i].Name, viperSettings.GetString(s.settings[i].Name), false) + if err != nil { + return err + } + + if s.settings[i].HasLocal { + err = s.setSetting(s.settings[i].Name, viperSettings.GetString(s.settings[i].Name), false) + if err != nil { + return err + } + } + } else if settingType == "local" && s.settings[i].HasLocal { //nolint: goconst + s.local = viperSettings + err = s.setSetting(s.settings[i].Name, viperSettings.GetString(s.settings[i].Name), false) + if err != nil { + return err + } + } + } + + return nil +} + +// loadViperSettings loads the specified type of settings from Viper. +func (s *Settings) loadViperSettings(settingType string) (*viper.Viper, error) { + userSettings := viper.New() + + for i := range defaultSettings { + if settingType == "global" && s.settings[i].HasGlobal { + userSettings.SetDefault(s.settings[i].Name, s.settings[i].DefaultValue) + } else if settingType == "local" && s.settings[i].HasLocal { + userSettings.SetDefault(s.settings[i].Name, s.settings[i].Value) + } + } + + userSettings.SetConfigType("json") + + configPath := s.GetStringValue("workingDirectory") + + if settingType == "global" { + appDirectory := s.GetStringValue("appDirectory") + + userSettings.SetConfigName("kana") + + configPath = path.Join(appDirectory, "config") + } else if settingType == "local" { + userSettings.SetConfigName(".kana") + } + + userSettings.AddConfigPath(configPath) + + err := userSettings.ReadInConfig() + if err != nil { + var configFileNotFoundError viper.ConfigFileNotFoundError + + if errors.As(err, &configFileNotFoundError) { + if settingType == "global" { + err = userSettings.SafeWriteConfig() + if err != nil { + return userSettings, err + } + } else { + return userSettings, nil + } + } else { + return userSettings, err + } + } + + return userSettings, nil +} + +func (s *Settings) populateDefaults() { + for i := range s.settings { + s.settings[i].Value = s.settings[i].DefaultValue + } +} + +func (s *Settings) processNameFlag(cmd *cobra.Command) error { + isStartCommand := cmd.Use == "start" + + // Don't run this on commands that wouldn't possibly use it. + if cmd.Use == "config" || cmd.Use == "version" || cmd.Use == "help" { + return nil + } + + protocol := s.GetProtocol() // We share the protocol whether it is a named site or not. + appDirectory := s.GetStringValue("appDirectory") + appDomain := s.GetStringValue("appDomain") + + // Process the name flag if set + if cmd.Flags().Lookup("name").Changed { + err := s.setSetting("isNamedSite", "true", false) + if err != nil { + return err + } + + // Check that we're not using invalid start flags for the start command + if isStartCommand { + if cmd.Flags().Lookup("plugin").Changed || cmd.Flags().Lookup("theme").Changed { + return fmt.Errorf("invalid flags detected. 'plugin' and 'theme' flags are not valid with named sites") + } + } + + siteName := helpers.SanitizeSiteName(cmd.Flags().Lookup("name").Value.String()) + url := fmt.Sprintf("%s://%s.%s", protocol, siteName, appDomain) + siteDirectory := path.Join(appDirectory, "sites", siteName) + + err = s.SetSetting("name", siteName) + if err != nil { + return err + } + + err = s.SetSetting("SiteDirectory", siteDirectory) + if err != nil { + return err + } + + return s.SetSetting("url", url) + } else { + return s.processUnnamedDefaults(appDirectory, appDomain, protocol) + } +} + +func (s *Settings) processStartFlags(cmd *cobra.Command, flags StartFlags) (err error) { //nolint + if cmd.Use != "start" { + return nil + } + + if cmd.Flags().Lookup("xdebug").Changed { + err = s.SetSetting("xdebug", strconv.FormatBool(flags.Xdebug)) + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("wpdebug").Changed { + err = s.SetSetting("wpdebug", strconv.FormatBool(flags.WPDebug)) + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("scriptdebug").Changed { + err = s.SetSetting("scriptdebug", strconv.FormatBool(flags.ScriptDebug)) + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("ssl").Changed { + err = s.SetSetting("ssl", strconv.FormatBool(flags.SSL)) + if err != nil { + return err + } + + protocol := s.GetProtocol() + name := s.GetStringValue("name") + domain := s.GetStringValue("domain") + + err = s.SetSetting("url", fmt.Sprintf("%s://%s.%s", protocol, name, domain)) + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("mailpit").Changed { + err = s.SetSetting("mailpit", strconv.FormatBool(flags.Mailpit)) + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("plugin").Changed && flags.IsPlugin { + err = s.SetSetting("type", "plugin") + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("theme").Changed && flags.IsTheme { + err = s.SetSetting("type", "Theme") + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("multisite").Changed { + err = s.SetSetting("multisite", flags.Multisite) + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("activate").Changed { + err = s.SetSetting("activate", strconv.FormatBool(flags.Activate)) + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("environment").Changed { + err = s.SetSetting("environment", flags.Environment) + if err != nil { + return err + } + } + + if cmd.Flags().Lookup("remove-default-plugins").Changed { + err = s.SetSetting("removeDefaultPlugins", strconv.FormatBool(flags.RemoveDefaultPlugins)) + if err != nil { + return err + } + } + + return nil +} + +// processUnnamedDefaults handles the appropriate settings for sites that aren't named. +func (s *Settings) processUnnamedDefaults(appDirectory, appDomain, protocol string) error { + workingDirectory := s.GetStringValue("workingDirectory") + + siteName := helpers.SanitizeSiteName(filepath.Base(workingDirectory)) + + url := fmt.Sprintf("%s://%s.%s", protocol, siteName, appDomain) + + siteDirectory := path.Join(appDirectory, "sites", siteName) + + err := s.SetSetting("name", siteName) + if err != nil { + return err + } + + err = s.SetSetting("siteDirectory", siteDirectory) + if err != nil { + return err + } + + return s.SetSetting("url", url) +} + +// setSetting validates, when appropriate, and sets the given settings. +func (s *Settings) setSetting(name, value string, write bool) error { + settings := defaultSettings + + for i := range settings { + if s.settings[i].Name == name { + validString := true + for _, validValue := range s.settings[i].ValidValues { + if validValue == value { + validString = true + } + } + + if validString { + settings[i].Value = value + + if write && settings[i].HasGlobal { + return s.writeGlobalSettings() + } + + return nil + } + + return fmt.Errorf("the value, %s, for setting %s in invalid. please use a value value", value, name) + } + } + + return fmt.Errorf("setting, %s, not found", name) +} + +// writeGlobalSettings writes the global settings to disk. +func (s *Settings) writeGlobalSettings() error { + for i := range s.settings { + if s.settings[i].HasGlobal { + s.global.Set(s.settings[i].Name, s.settings[i].Value) + } + } + return s.global.WriteConfig() +} diff --git a/internal/settings/settings.go b/internal/settings/settings.go index a0d29467..b47f6143 100644 --- a/internal/settings/settings.go +++ b/internal/settings/settings.go @@ -1,19 +1,7 @@ package settings import ( - "errors" - "fmt" - "os" - "path" - "path/filepath" - "strconv" - "strings" - - "github.com/ChrisWiegman/kana-cli/internal/helpers" - - "github.com/mitchellh/go-homedir" "github.com/spf13/cobra" - "github.com/spf13/viper" ) var startFlags StartFlags @@ -32,10 +20,16 @@ func NewSettings(cmd *cobra.Command) (*Settings, error) { return settings, err } + // Ensure our site files are in place. + err = settings.EnsureStaticConfigFiles() + if err != nil { + return settings, err + } + // Start with defaults and override with global settings err = settings.loadSettings("global") if err != nil { - fmt.Println("here") + return settings, err } // Override with local settings @@ -58,445 +52,3 @@ func NewSettings(cmd *cobra.Command) (*Settings, error) { return settings, nil } - -// GetArrayValue returns a slice of strings with the set value. -func (s *Settings) GetArrayValue(name string) []string { - setting, _ := s.getSetting(name) - - return strings.Split(setting.DefaultValue, ",") -} - -// GetBoolValue returns a bool with the set value. -func (s *Settings) GetBoolValue(name string) bool { - setting, _ := s.getSetting(name) - - settingVal, _ := strconv.ParseBool(setting.DefaultValue) - - return settingVal -} - -func (s *Settings) populateDefaults() { - for i := range s.settings { - if s.settings[i].HasFlag { - s.settings[i].FlagValue = s.settings[i].DefaultValue - } - - if s.settings[i].HasLocal { - s.settings[i].LocalValue = s.settings[i].DefaultValue - } - - if s.settings[i].HasGlobal { - s.settings[i].GlobalValue = s.settings[i].DefaultValue - } - - if !s.settings[i].HasGlobal && !s.settings[i].HasLocal && !s.settings[i].HasFlag { - s.settings[i].AppValue = s.settings[i].DefaultValue - } - } -} - -// GetDefaultPermissions returns the default directory permissions and the default file permissions. -func GetDefaultPermissions() (dirPerms, filePerms int) { - return defaultDirPermissions, defaultFilePermissions -} - -// GetIntValue returns an int with the set value. -func (s *Settings) GetIntValue(name string) int { - setting, _ := s.getSetting(name) - - settingVal, _ := strconv.Atoi(setting.DefaultValue) - - return settingVal -} - -// GetProtocol returns the appropriate protocol for the URL based on the https setting. -func (s *Settings) GetProtocol() string { - ssl := s.GetBoolValue("ssl") - - if ssl { - return "https" - } - - return "http" -} - -// getSetting returns the string value for the provided type and settings name. -func (s *Settings) getSetting(name string) (Setting, error) { - for i := range s.settings { - if s.settings[i].Name == name { - return s.settings[i], nil - } - } - - return Setting{}, fmt.Errorf("setting, %s, not found", name) -} - -// GetStringValue returns a string with the set value. -func (s *Settings) GetStringValue(name string) string { - setting, _ := s.getSetting(name) - - if setting.HasFlag { - return setting.FlagValue - } else if setting.HasLocal { - return setting.LocalValue - } else if setting.HasGlobal { - return setting.GlobalValue - } - return setting.AppValue -} - -// HasLocalOptions Returns true if local options have been saved to a file or false. -func (s *Settings) HasLocalOptions() bool { - if _, err := os.Stat(path.Join(s.GetStringValue("workingDirectory"), ".kana.json")); os.IsNotExist(err) { - return false - } - - return true -} - -func (s *Settings) SetSetting(name, value string) error { - for i := range s.settings { - if s.settings[i].Name == name { - validString := true - for _, validValue := range s.settings[i].ValidValues { - if validValue == value { - validString = true - } - } - - if validString { - settingType := "app" - - if s.settings[i].HasFlag { - settingType = "flag" - } else if s.settings[i].HasLocal { - settingType = "local" //nolint: goconst - } else if s.settings[i].HasGlobal { - settingType = "global" //nolint: goconst - } - - return s.setSetting(settingType, name, value) - } - return fmt.Errorf("the value, %s, for setting %s in invalid. please use a value value", value, name) - } - } - - return fmt.Errorf("setting, %s, not found", name) -} - -// setSetting validates, when appropriate, and sets the given settings. -func (s *Settings) setSetting(settingType, name, value string) error { - settings := defaultSettings - - for i := range settings { - if s.settings[i].Name == name { - validString := true - for _, validValue := range s.settings[i].ValidValues { - if validValue == value { - validString = true - } - } - - if validString { - switch settingType { - case "global": - if s.settings[i].HasGlobal { - settings[i].GlobalValue = value - } else { - return fmt.Errorf("the setting you tried to set, %s, is not a valid global setting", name) - } - case "local": - if s.settings[i].HasLocal { - settings[i].LocalValue = value - } else { - return fmt.Errorf("the setting you tried to set, %s, is not a valid local setting", name) - } - case "flag": - if s.settings[i].HasFlag { - settings[i].FlagValue = value - } else { - return fmt.Errorf("the setting you tried to set, %s, is not a valid local setting", name) - } - case "app": - if !s.settings[i].HasFlag && !s.settings[i].HasLocal && !s.settings[i].HasGlobal { - settings[i].AppValue = value - } else { - return fmt.Errorf("the setting you tried to set, %s, is not a valid app setting", name) - } - default: - return fmt.Errorf("%s is not a valid setting type", settingType) - } - return nil - } - - return fmt.Errorf("the value, %s, for setting %s in invalid. please use a value value", value, name) - } - } - - return fmt.Errorf("setting, %s, not found", name) -} - -func (s *Settings) loadDirectories() error { - cwd, err := os.Getwd() - if err != nil { - return err - } - - err = s.setSetting("app", "workingDirectory", cwd) - if err != nil { - return err - } - - home, err := homedir.Dir() - if err != nil { - return err - } - - configFolderName := s.GetStringValue("configFolderName") - - err = s.setSetting("app", "appDirectory", filepath.Join(home, configFolderName)) - if err != nil { - return err - } - - fmt.Println(s.GetStringValue("appDirectory")) - - return nil -} - -func (s *Settings) loadSettings(settingType string) error { - viperSettings, err := s.loadViperSettings(settingType) - if err != nil { - return err - } - - for i := range defaultSettings { - if settingType == "global" && s.settings[i].HasGlobal { - s.global = viperSettings - err = s.setSetting("global", s.settings[i].Name, viperSettings.GetString(s.settings[i].Name)) - if err != nil { - return err - } - } else if settingType == "local" && s.settings[i].HasLocal { - s.local = viperSettings - err = s.setSetting("global", s.settings[i].Name, viperSettings.GetString(s.settings[i].Name)) - if err != nil { - return err - } - } - } - - return nil -} - -// loadViperSettings loads the specified type of settings from Viper. -func (s *Settings) loadViperSettings(settingType string) (*viper.Viper, error) { - userSettings := viper.New() - - for i := range defaultSettings { - if settingType == "global" && s.settings[i].HasGlobal { - userSettings.SetDefault(s.settings[i].Name, s.settings[i].DefaultValue) - } else if settingType == "local" && s.settings[i].HasLocal { - userSettings.SetDefault(s.settings[i].Name, s.settings[i].DefaultValue) - } - } - - userSettings.SetConfigType("json") - - configPath := s.GetStringValue("workingDirectory") - - if settingType == "global" { - appDirectory := s.GetStringValue("appDirectory") - - userSettings.SetConfigName("kana") - - configPath = path.Join(appDirectory, "config") - } else if settingType == "local" { - userSettings.SetConfigName(".kana") - } - - userSettings.AddConfigPath(configPath) - - err := userSettings.ReadInConfig() - if err != nil { - var configFileNotFoundError viper.ConfigFileNotFoundError - - if errors.As(err, &configFileNotFoundError) { - if settingType == "global" { - err = userSettings.SafeWriteConfig() - if err != nil { - return userSettings, err - } - } else { - return userSettings, nil - } - } else { - return userSettings, err - } - } - - return userSettings, nil -} - -func (s *Settings) processNameFlag(cmd *cobra.Command) error { - isStartCommand := cmd.Use == "start" - - // Don't run this on commands that wouldn't possibly use it. - if cmd.Use == "config" || cmd.Use == "version" || cmd.Use == "help" { - return nil - } - - protocol := s.GetProtocol() // We share the protocol whether it is a named site or not. - appDirectory := s.GetStringValue("appDirectory") - appDomain := s.GetStringValue("appDomain") - - // Process the name flag if set - if cmd.Flags().Lookup("name").Changed { - err := s.setSetting("app", "isNamedSite", "true") - if err != nil { - return err - } - - // Check that we're not using invalid start flags for the start command - if isStartCommand { - if cmd.Flags().Lookup("plugin").Changed || cmd.Flags().Lookup("theme").Changed { - return fmt.Errorf("invalid flags detected. 'plugin' and 'theme' flags are not valid with named sites") - } - } - - siteName := helpers.SanitizeSiteName(cmd.Flags().Lookup("name").Value.String()) - url := fmt.Sprintf("%s://%s.%s", protocol, siteName, appDomain) - siteDirectory := path.Join(appDirectory, "sites", siteName) - - err = s.SetSetting("name", siteName) - if err != nil { - return err - } - - err = s.SetSetting("SiteDirectory", siteDirectory) - if err != nil { - return err - } - - return s.SetSetting("url", url) - } else { - return s.processUnnamedDefaults(appDirectory, appDomain, protocol) - } -} - -func (s *Settings) processStartFlags(cmd *cobra.Command, flags StartFlags) (err error) { //nolint - if cmd.Use != "start" { - return nil - } - - if cmd.Flags().Lookup("xdebug").Changed { - err = s.SetSetting("xdebug", strconv.FormatBool(flags.Xdebug)) - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("wpdebug").Changed { - err = s.SetSetting("wpdebug", strconv.FormatBool(flags.WPDebug)) - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("scriptdebug").Changed { - err = s.SetSetting("scriptdebug", strconv.FormatBool(flags.ScriptDebug)) - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("ssl").Changed { - err = s.SetSetting("ssl", strconv.FormatBool(flags.SSL)) - if err != nil { - return err - } - - protocol := s.GetProtocol() - name := s.GetStringValue("name") - domain := s.GetStringValue("domain") - - err = s.SetSetting("url", fmt.Sprintf("%s://%s.%s", protocol, name, domain)) - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("mailpit").Changed { - err = s.SetSetting("mailpit", strconv.FormatBool(flags.Mailpit)) - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("plugin").Changed && flags.IsPlugin { - err = s.SetSetting("type", "plugin") - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("theme").Changed && flags.IsTheme { - err = s.SetSetting("type", "Theme") - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("multisite").Changed { - err = s.SetSetting("multisite", flags.Multisite) - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("activate").Changed { - err = s.SetSetting("activate", strconv.FormatBool(flags.Activate)) - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("environment").Changed { - err = s.SetSetting("environment", flags.Environment) - if err != nil { - return err - } - } - - if cmd.Flags().Lookup("remove-default-plugins").Changed { - err = s.SetSetting("removeDefaultPlugins", strconv.FormatBool(flags.RemoveDefaultPlugins)) - if err != nil { - return err - } - } - - return nil -} - -// processUnnamedDefaults handles the appropriate settings for sites that aren't named. -func (s *Settings) processUnnamedDefaults(appDirectory, appDomain, protocol string) error { - workingDirectory := s.GetStringValue("workingDirectory") - - siteName := helpers.SanitizeSiteName(filepath.Base(workingDirectory)) - - url := fmt.Sprintf("%s://%s.%s", protocol, siteName, appDomain) - - siteDirectory := path.Join(appDirectory, "sites", siteName) - - err := s.SetSetting("name", siteName) - if err != nil { - return err - } - - err = s.SetSetting("siteDirectory", siteDirectory) - if err != nil { - return err - } - - return s.SetSetting("url", url) -} diff --git a/internal/settings/ssl.go b/internal/settings/ssl.go index b2e17ba4..ea809cf8 100644 --- a/internal/settings/ssl.go +++ b/internal/settings/ssl.go @@ -19,8 +19,8 @@ const certOS = "darwin" func (s *Settings) EnsureSSLCerts(consoleOutput *console.Console) error { createCert := false - certPath := path.Join(s.GetStringValue("AppDirectory"), "certs") - rootCert := path.Join(certPath, s.GetStringValue("RootCert")) + certPath := path.Join(s.GetStringValue("appDirectory"), "certs") + rootCert := path.Join(certPath, s.GetStringValue("rootCert")) _, err := os.Stat(rootCert) if err != nil && os.IsNotExist(err) { @@ -35,11 +35,11 @@ func (s *Settings) EnsureSSLCerts(consoleOutput *console.Console) error { certInfo := minica.CertInfo{ CertDir: certPath, - CertDomain: s.GetStringValue("AppDirectory"), - RootKey: s.GetStringValue("RootKey"), - RootCert: s.GetStringValue("RootCert"), - SiteCert: s.GetStringValue("SiteCert"), - SiteKey: s.GetStringValue("SiteKey"), + CertDomain: s.GetStringValue("appDirectory"), + RootKey: s.GetStringValue("rootKey"), + RootCert: s.GetStringValue("rootCert"), + SiteCert: s.GetStringValue("siteCert"), + SiteKey: s.GetStringValue("siteKey"), } err = minica.GenCerts(&certInfo) diff --git a/internal/settings/types.go b/internal/settings/types.go index e392456c..bcac8cd9 100644 --- a/internal/settings/types.go +++ b/internal/settings/types.go @@ -15,9 +15,9 @@ type KanaPluginVars struct { SiteName, Version string } type Setting struct { - Name, Type, DefaultValue, AppValue, GlobalValue, LocalValue, FlagValue string - HasGlobal, HasLocal, HasFlag bool - ValidValues []string + Name, Type, DefaultValue, Value string + HasGlobal, HasLocal bool + ValidValues []string } type Settings struct { diff --git a/internal/site/site.go b/internal/site/site.go index bdbd424d..79145389 100644 --- a/internal/site/site.go +++ b/internal/site/site.go @@ -163,7 +163,7 @@ func (s *Site) LoadSite( return err } - s.Settings.SetSetting("type", siteType) + err = s.Settings.SetSetting("type", siteType) if err != nil { return err } diff --git a/internal/site/wordpress.go b/internal/site/wordpress.go index 1a32bafb..5e5c4d55 100644 --- a/internal/site/wordpress.go +++ b/internal/site/wordpress.go @@ -288,7 +288,11 @@ func (s *Site) getWordPressContainers() []string { func (s *Site) activateProject(consoleOutput *console.Console) error { if s.Settings.GetBoolValue("activate") && s.Settings.GetStringValue("type") != "site" { - consoleOutput.Println(fmt.Sprintf("Activating %s: %s", s.Settings.GetStringValue("type"), consoleOutput.Bold(consoleOutput.Blue(s.Settings.GetStringValue("name"))))) + consoleOutput.Println( + fmt.Sprintf( + "Activating %s: %s", + s.Settings.GetStringValue("type"), + consoleOutput.Bold(consoleOutput.Blue(s.Settings.GetStringValue("name"))))) setupCommand := []string{ s.Settings.GetStringValue("type"), @@ -302,7 +306,11 @@ func (s *Site) activateProject(consoleOutput *console.Console) error { } if code != 0 { - consoleOutput.Warn(fmt.Sprintf("Unable to activate %s: %s.", s.Settings.GetStringValue("type"), consoleOutput.Bold(consoleOutput.Blue(s.Settings.GetStringValue("name"))))) + consoleOutput.Warn( + fmt.Sprintf( + "Unable to activate %s: %s.", + s.Settings.GetStringValue("type"), + consoleOutput.Bold(consoleOutput.Blue(s.Settings.GetStringValue("name"))))) } }