mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-08 01:27:31 +00:00
Merge pull request #3704 from Infisical/feat/add-auto-login-for-bad-sessions-1
feat: add auto-login support for CLI for bad user session
This commit is contained in:
@@ -80,8 +80,9 @@ func getDynamicSecretList(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,7 +198,7 @@ func createDynamicSecretLeaseByName(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
}
|
}
|
||||||
@@ -328,8 +329,9 @@ func renewDynamicSecretLeaseByName(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,8 +437,9 @@ func revokeDynamicSecretLeaseByName(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -541,7 +544,7 @@ func listDynamicSecretLeaseByName(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ var initCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if userCreds.LoginExpired {
|
if userCreds.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
userCreds = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
httpClient, err := util.GetRestyClientWithCustomHeaders()
|
httpClient, err := util.GetRestyClientWithCustomHeaders()
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ var secretsSetCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
secretOperations, err = util.SetRawSecrets(processedArgs, secretType, environmentName, secretsPath, projectId, &models.TokenDetails{
|
secretOperations, err = util.SetRawSecrets(processedArgs, secretType, environmentName, secretsPath, projectId, &models.TokenDetails{
|
||||||
@@ -325,7 +325,7 @@ var secretsDeleteCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
httpClient.SetAuthToken(loggedInUserDetails.UserCredentials.JTWToken)
|
httpClient.SetAuthToken(loggedInUserDetails.UserCredentials.JTWToken)
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ func issueCredentials(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
}
|
}
|
||||||
@@ -417,7 +417,7 @@ func signKey(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
}
|
}
|
||||||
@@ -612,7 +612,7 @@ func sshConnect(cmd *cobra.Command, args []string) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "Unable to parse flag")
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
|
|
||||||
var infisicalToken string
|
var infisicalToken string
|
||||||
|
|
||||||
if token != nil && (token.Type == util.SERVICE_TOKEN_IDENTIFIER || token.Type == util.UNIVERSAL_AUTH_TOKEN_IDENTIFIER) {
|
if token != nil && (token.Type == util.SERVICE_TOKEN_IDENTIFIER || token.Type == util.UNIVERSAL_AUTH_TOKEN_IDENTIFIER) {
|
||||||
@@ -626,7 +626,7 @@ func sshConnect(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
}
|
}
|
||||||
@@ -640,7 +640,7 @@ func sshConnect(cmd *cobra.Command, args []string) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "Unable to parse flag")
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
|
|
||||||
hostname, _ := cmd.Flags().GetString("hostname")
|
hostname, _ := cmd.Flags().GetString("hostname")
|
||||||
loginUser, _ := cmd.Flags().GetString("login-user")
|
loginUser, _ := cmd.Flags().GetString("login-user")
|
||||||
|
|
||||||
@@ -858,7 +858,7 @@ func sshConnect(cmd *cobra.Command, args []string) {
|
|||||||
err = sshCmd.Run()
|
err = sshCmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "SSH connection failed")
|
util.HandleError(err, "SSH connection failed")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func sshAddHost(cmd *cobra.Command, args []string) {
|
func sshAddHost(cmd *cobra.Command, args []string) {
|
||||||
@@ -879,7 +879,7 @@ func sshAddHost(cmd *cobra.Command, args []string) {
|
|||||||
util.HandleError(err, "Unable to authenticate")
|
util.HandleError(err, "Unable to authenticate")
|
||||||
}
|
}
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login]")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
infisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
}
|
}
|
||||||
@@ -904,7 +904,7 @@ func sshAddHost(cmd *cobra.Command, args []string) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "Unable to parse --alias flag")
|
util.HandleError(err, "Unable to parse --alias flag")
|
||||||
}
|
}
|
||||||
|
|
||||||
// if alias == "" {
|
// if alias == "" {
|
||||||
// util.PrintErrorMessageAndExit("You must provide --alias")
|
// util.PrintErrorMessageAndExit("You must provide --alias")
|
||||||
// }
|
// }
|
||||||
@@ -937,7 +937,7 @@ func sshAddHost(cmd *cobra.Command, args []string) {
|
|||||||
if configureSshd && (!writeUserCaToFile || !writeHostCertToFile) {
|
if configureSshd && (!writeUserCaToFile || !writeHostCertToFile) {
|
||||||
util.PrintErrorMessageAndExit("--configure-sshd requires both --write-user-ca-to-file and --write-host-cert-to-file to also be set")
|
util.PrintErrorMessageAndExit("--configure-sshd requires both --write-user-ca-to-file and --write-host-cert-to-file to also be set")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pre-check for file overwrites before proceeding
|
// Pre-check for file overwrites before proceeding
|
||||||
if writeUserCaToFile {
|
if writeUserCaToFile {
|
||||||
if strings.HasPrefix(userCaOutFilePath, "~") {
|
if strings.HasPrefix(userCaOutFilePath, "~") {
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ var tokensCreateCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
tokenOnly, err := cmd.Flags().GetBool("token-only")
|
tokenOnly, err := cmd.Flags().GetBool("token-only")
|
||||||
|
|||||||
@@ -111,8 +111,9 @@ var userGetTokenCmd = &cobra.Command{
|
|||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
loggedInUserDetails, err := util.GetCurrentLoggedInUserDetails(true)
|
loggedInUserDetails, err := util.GetCurrentLoggedInUserDetails(true)
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
util.PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = util.EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "[infisical user get token]: Unable to get logged in user token")
|
util.HandleError(err, "[infisical user get token]: Unable to get logged in user token")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
package util
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
)
|
||||||
|
|
||||||
type AuthStrategyType string
|
type AuthStrategyType string
|
||||||
|
|
||||||
var AuthStrategy = struct {
|
var AuthStrategy = struct {
|
||||||
@@ -43,3 +51,36 @@ func IsAuthMethodValid(authMethod string, allowUserAuth bool) (isValid bool, str
|
|||||||
}
|
}
|
||||||
return false, ""
|
return false, ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EstablishUserLoginSession handles the login flow to either create a new session or restore an expired one.
|
||||||
|
// It returns fresh user details if login is successful.
|
||||||
|
func EstablishUserLoginSession() LoggedInUserDetails {
|
||||||
|
log.Info().Msg("No valid login session found, triggering login flow")
|
||||||
|
|
||||||
|
exePath, err := os.Executable()
|
||||||
|
if err != nil {
|
||||||
|
PrintErrorMessageAndExit(fmt.Sprintf("Failed to determine executable path: %v", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spawn infisical login command
|
||||||
|
loginCmd := exec.Command(exePath, "login", "--silent")
|
||||||
|
loginCmd.Stdin = os.Stdin
|
||||||
|
loginCmd.Stdout = os.Stdout
|
||||||
|
loginCmd.Stderr = os.Stderr
|
||||||
|
|
||||||
|
err = loginCmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
PrintErrorMessageAndExit(fmt.Sprintf("Failed to automatically trigger login flow. Please run [infisical login] manually to login."))
|
||||||
|
}
|
||||||
|
|
||||||
|
loggedInUserDetails, err := GetCurrentLoggedInUserDetails(true)
|
||||||
|
if err != nil {
|
||||||
|
PrintErrorMessageAndExit("You must be logged in to run this command. To login, run [infisical login]")
|
||||||
|
}
|
||||||
|
|
||||||
|
if loggedInUserDetails.LoginExpired {
|
||||||
|
PrintErrorMessageAndExit("Your login session has expired. Please run [infisical login]")
|
||||||
|
}
|
||||||
|
|
||||||
|
return loggedInUserDetails
|
||||||
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func GetAllFolders(params models.GetAllFoldersParameters) ([]models.SingleFolder
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
workspaceFile, err := GetWorkSpaceFromFile()
|
workspaceFile, err := GetWorkSpaceFromFile()
|
||||||
@@ -194,7 +194,7 @@ func CreateFolder(params models.CreateFolderParameters) (models.SingleFolder, er
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
params.InfisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
params.InfisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
@@ -244,7 +244,7 @@ func DeleteFolder(params models.DeleteFolderParameters) ([]models.SingleFolder,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if loggedInUserDetails.LoginExpired {
|
if loggedInUserDetails.LoginExpired {
|
||||||
PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
params.InfisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
params.InfisicalToken = loggedInUserDetails.UserCredentials.JTWToken
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ func RequireLogin() {
|
|||||||
configFile, _ := GetConfigFile()
|
configFile, _ := GetConfigFile()
|
||||||
|
|
||||||
if configFile.LoggedInUserEmail == "" {
|
if configFile.LoggedInUserEmail == "" {
|
||||||
PrintErrorMessageAndExit("You must be logged in to run this command. To login, run [infisical login]")
|
EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ func GetAllEnvironmentVariables(params models.GetAllSecretsParameters, projectCo
|
|||||||
}
|
}
|
||||||
|
|
||||||
if isConnected && loggedInUserDetails.LoginExpired {
|
if isConnected && loggedInUserDetails.LoginExpired {
|
||||||
PrintErrorMessageAndExit("Your login session has expired, please run [infisical login] and try again")
|
loggedInUserDetails = EstablishUserLoginSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
var infisicalDotJson models.WorkspaceConfigFile
|
var infisicalDotJson models.WorkspaceConfigFile
|
||||||
|
|||||||
Reference in New Issue
Block a user