mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type AuthStrategyType string
|
|
|
|
var AuthStrategy = struct {
|
|
UNIVERSAL_AUTH AuthStrategyType
|
|
KUBERNETES_AUTH AuthStrategyType
|
|
AZURE_AUTH AuthStrategyType
|
|
GCP_ID_TOKEN_AUTH AuthStrategyType
|
|
GCP_IAM_AUTH AuthStrategyType
|
|
AWS_IAM_AUTH AuthStrategyType
|
|
OIDC_AUTH AuthStrategyType
|
|
}{
|
|
UNIVERSAL_AUTH: "universal-auth",
|
|
KUBERNETES_AUTH: "kubernetes",
|
|
AZURE_AUTH: "azure",
|
|
GCP_ID_TOKEN_AUTH: "gcp-id-token",
|
|
GCP_IAM_AUTH: "gcp-iam",
|
|
AWS_IAM_AUTH: "aws-iam",
|
|
OIDC_AUTH: "oidc-auth",
|
|
}
|
|
|
|
var AVAILABLE_AUTH_STRATEGIES = []AuthStrategyType{
|
|
AuthStrategy.UNIVERSAL_AUTH,
|
|
AuthStrategy.KUBERNETES_AUTH,
|
|
AuthStrategy.AZURE_AUTH,
|
|
AuthStrategy.GCP_ID_TOKEN_AUTH,
|
|
AuthStrategy.GCP_IAM_AUTH,
|
|
AuthStrategy.AWS_IAM_AUTH,
|
|
AuthStrategy.OIDC_AUTH,
|
|
}
|
|
|
|
func IsAuthMethodValid(authMethod string, allowUserAuth bool) (isValid bool, strategy AuthStrategyType) {
|
|
|
|
if authMethod == "user" && allowUserAuth {
|
|
return true, ""
|
|
}
|
|
|
|
for _, strategy := range AVAILABLE_AUTH_STRATEGIES {
|
|
if string(strategy) == authMethod {
|
|
return true, strategy
|
|
}
|
|
}
|
|
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
|
|
}
|