From 477b8746e8c4630e70f5be33d6c88e0ea6f7bdb0 Mon Sep 17 00:00:00 2001 From: riddler3610 Date: Thu, 21 Nov 2024 21:01:20 +0300 Subject: [PATCH 1/2] adding a custom port for ssh connection --- .gitignore | 1 + cmd/deploy/deploy.go | 2 +- cmd/init.go | 21 +++++++++++++++++++-- cmd/launch/launch.go | 2 +- cmd/preview/preview.go | 2 +- cmd/preview/remove/remove.go | 2 +- go.mod | 2 +- utils/auth.go | 8 ++++---- utils/utils.go | 17 +++++++++++++++++ 9 files changed, 46 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 699593b..fd958c4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ dist/ .DS_Store +go_build* \ No newline at end of file diff --git a/cmd/deploy/deploy.go b/cmd/deploy/deploy.go index 457bec9..20b0384 100644 --- a/cmd/deploy/deploy.go +++ b/cmd/deploy/deploy.go @@ -84,7 +84,7 @@ It assumes that your VPS is already configured and that your application is read ) go func() { - sshClient, err := utils.Login(viper.GetString("serverAddress"), "sidekick") + sshClient, err := utils.Login(viper.GetString("serverAddress"), viper.GetString("sshPort"), "sidekick") if err != nil { p.Send(render.ErrorMsg{}) } diff --git a/cmd/init.go b/cmd/init.go index 301c866..4281ad0 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -59,6 +59,11 @@ var InitCmd = &cobra.Command{ if serverFlagErr != nil { fmt.Println(serverFlagErr) } + + port, portFlagErr := cmd.Flags().GetString("port") + if portFlagErr != nil { + fmt.Println(portFlagErr) + } certEmail, emailFlagError := cmd.Flags().GetString("email") if emailFlagError != nil { fmt.Println(emailFlagError) @@ -74,6 +79,16 @@ var InitCmd = &cobra.Command{ } } + if port == "" { + portTextInput := pterm.DefaultInteractiveTextInput + portTextInput.DefaultText = "Please enter the SSH Port of your VPS" + port, _ = portTextInput.Show() + if !utils.IsValidPort(port) { + pterm.Error.Printfln("You entered an incorrect SSH Port - %s", port) + os.Exit(0) + } + } + if certEmail == "" { certEmailTextInput := pterm.DefaultInteractiveTextInput certEmailTextInput.DefaultText = "Please enter an email for use with TLS certs" @@ -104,6 +119,7 @@ var InitCmd = &cobra.Command{ } viper.Set("serverAddress", server) + viper.Set("sshPort", port) viper.Set("certEmail", certEmail) pterm.Println() @@ -116,7 +132,7 @@ var InitCmd = &cobra.Command{ users := []string{"root", "sidekick"} canConnect := false for _, user := range users { - sshClient, initSessionErr = utils.Login(server, user) + sshClient, initSessionErr = utils.Login(server, port, user) if initSessionErr != nil { continue } @@ -197,7 +213,7 @@ var InitCmd = &cobra.Command{ stage0Spinner.Success(utils.UsersetupStage.SpinnerSuccessMessage) sidekickLoginSpinner.Sequence = []string{"▀ ", " ▀", " ▄", "▄ "} - sidekickSshClient, err := utils.Login(server, "sidekick") + sidekickSshClient, err := utils.Login(server, port, "sidekick") if err != nil { sidekickLoginSpinner.Fail("Something went wrong logging in to your VPS") log.Fatal(err) @@ -313,6 +329,7 @@ func init() { rootCmd.AddCommand(InitCmd) InitCmd.Flags().StringP("server", "s", "", "Set the IP address of your Server") + InitCmd.Flags().StringP("port", "p", "", "Set the SSH Port of your server") InitCmd.Flags().StringP("email", "e", "", "An email address to be used for SSL certs") InitCmd.Flags().BoolP("yes", "y", false, "Skip all validation prompts") } diff --git a/cmd/launch/launch.go b/cmd/launch/launch.go index 89f5935..35af54a 100644 --- a/cmd/launch/launch.go +++ b/cmd/launch/launch.go @@ -171,7 +171,7 @@ var LaunchCmd = &cobra.Command{ }) go func() { - sshClient, err := utils.Login(viper.GetString("serverAddress"), "sidekick") + sshClient, err := utils.Login(viper.GetString("serverAddress"), viper.GetString("sshPort"), "sidekick") if err != nil { p.Send(render.ErrorMsg{ErrorStr: "Something went wrong logging in to your VPS"}) } diff --git a/cmd/preview/preview.go b/cmd/preview/preview.go index 87fe856..a0013a7 100644 --- a/cmd/preview/preview.go +++ b/cmd/preview/preview.go @@ -89,7 +89,7 @@ var PreviewCmd = &cobra.Command{ }) go func() { - sshClient, err := utils.Login(viper.GetString("serverAddress"), "sidekick") + sshClient, err := utils.Login(viper.GetString("serverAddress"), viper.GetString("sshPort"), "sidekick") if err != nil { p.Send(render.ErrorMsg{}) } diff --git a/cmd/preview/remove/remove.go b/cmd/preview/remove/remove.go index d74b10c..a556f16 100644 --- a/cmd/preview/remove/remove.go +++ b/cmd/preview/remove/remove.go @@ -111,7 +111,7 @@ func deletePreviewEnv(hash string) { if appConfigErr != nil { log.Fatalf("Unable to load your config file. Might be corrupted") } - sshClient, err := utils.Login(viper.GetString("serverAddress"), "sidekick") + sshClient, err := utils.Login(viper.GetString("serverAddress"), viper.GetString("sshPort"), "sidekick") if err != nil { log.Fatal("Unable to login to your VPS") } diff --git a/go.mod b/go.mod index d3c54c5..9998356 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/charmbracelet/bubbletea v1.1.1 github.com/charmbracelet/lipgloss v0.13.0 github.com/charmbracelet/log v0.4.0 + github.com/joho/godotenv v1.5.1 github.com/skeema/knownhosts v1.3.0 github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 @@ -32,7 +33,6 @@ require ( github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/gookit/color v1.5.4 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/joho/godotenv v1.5.1 // indirect github.com/lithammer/fuzzysearch v1.1.8 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/utils/auth.go b/utils/auth.go index 6c4a717..51c4a49 100644 --- a/utils/auth.go +++ b/utils/auth.go @@ -68,8 +68,8 @@ func inspectServerPublicKey(key ssh.PublicKey, hostname string) { } -func GetSshClient(server string, sshUser string) (*ssh.Client, error) { - sshPort := "22" +func GetSshClient(server string, sshPort string, sshUser string) (*ssh.Client, error) { + //sshPort := "22" sshAgentSock := os.Getenv("SSH_AUTH_SOCK") if sshAgentSock == "" { log.Fatal("No SSH SOCK AVAILABLE") @@ -143,8 +143,8 @@ func GetSshClient(server string, sshUser string) (*ssh.Client, error) { return client, nil } -func Login(server string, user string) (*ssh.Client, error) { - sshClient, err := GetSshClient(server, user) +func Login(server string, port string, user string) (*ssh.Client, error) { + sshClient, err := GetSshClient(server, port, user) if err != nil { return nil, err } diff --git a/utils/utils.go b/utils/utils.go index ca70e7e..82b1400 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -22,6 +22,7 @@ import ( "os" "os/exec" "regexp" + "strconv" "strings" "time" @@ -114,6 +115,22 @@ func IsValidIPAddress(ip string) bool { } +func IsValidPort(port string) bool { + const portPattern = `^\d{1,5}$` + + re := regexp.MustCompile(portPattern) + if !re.MatchString(port) { + return false + } + + portNumber, err := strconv.Atoi(port) + if err != nil || portNumber < 1 || portNumber > 65535 { + return false + } + + return true +} + func FileExists(filename string) bool { _, err := os.Stat(filename) if err == nil { From 9ac07649a356023b9c008e296400c7f7077e8c18 Mon Sep 17 00:00:00 2001 From: riddler3610 Date: Thu, 21 Nov 2024 21:36:24 +0300 Subject: [PATCH 2/2] upd .gitignore --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index fd958c4..8fee282 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ dist/ -.DS_Store -go_build* \ No newline at end of file +.DS_Store \ No newline at end of file