diff --git a/cli/cmd/tap.go b/cli/cmd/tap.go index f4ed44605..e0a8a5578 100644 --- a/cli/cmd/tap.go +++ b/cli/cmd/tap.go @@ -3,6 +3,7 @@ package cmd import ( "errors" "fmt" + "github.com/up9inc/mizu/cli/up9" "os" "github.com/creasty/defaults" @@ -62,6 +63,12 @@ Supported protocols are HTTP and gRPC.`, logger.Log.Errorf("failed to log in, err: %v", err) return nil } + } else if isValidToken := up9.IsTokenValid(config.Config.Auth.Token, config.Config.Auth.EnvName); !isValidToken { + logger.Log.Errorf("Token is not valid, please log in again to continue") + if err := auth.Login(); err != nil { + logger.Log.Errorf("failed to log in, err: %v", err) + return nil + } } } } diff --git a/cli/up9/provider.go b/cli/up9/provider.go new file mode 100644 index 000000000..63544db04 --- /dev/null +++ b/cli/up9/provider.go @@ -0,0 +1,31 @@ +package up9 + +import ( + "fmt" + "net/http" + "net/url" +) + +func IsTokenValid(tokenString string, envName string) bool { + whoAmIUrl, _ := url.Parse(fmt.Sprintf("https://trcc.%s/admin/whoami", envName)) + + req := &http.Request{ + Method: http.MethodGet, + URL: whoAmIUrl, + Header: map[string][]string{ + "Authorization": {fmt.Sprintf("bearer %s", tokenString)}, + }, + } + + response, err := http.DefaultClient.Do(req) + if err != nil { + return false + } + defer response.Body.Close() + + if response.StatusCode != http.StatusOK { + return false + } + + return true +}