mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-05 11:26:33 +00:00
Feat: Folder support for Machine Identities
This commit is contained in:
@@ -19,7 +19,7 @@ func GetAllFolders(params models.GetAllFoldersParameters) ([]models.SingleFolder
|
|||||||
|
|
||||||
var foldersToReturn []models.SingleFolder
|
var foldersToReturn []models.SingleFolder
|
||||||
var folderErr error
|
var folderErr error
|
||||||
if params.InfisicalToken == "" {
|
if params.InfisicalToken == "" && params.UniversalAuthAccessToken == "" {
|
||||||
|
|
||||||
log.Debug().Msg("GetAllFolders: Trying to fetch folders using logged in details")
|
log.Debug().Msg("GetAllFolders: Trying to fetch folders using logged in details")
|
||||||
|
|
||||||
@@ -44,11 +44,21 @@ func GetAllFolders(params models.GetAllFoldersParameters) ([]models.SingleFolder
|
|||||||
folders, err := GetFoldersViaJTW(loggedInUserDetails.UserCredentials.JTWToken, workspaceFile.WorkspaceId, params.Environment, params.FoldersPath)
|
folders, err := GetFoldersViaJTW(loggedInUserDetails.UserCredentials.JTWToken, workspaceFile.WorkspaceId, params.Environment, params.FoldersPath)
|
||||||
folderErr = err
|
folderErr = err
|
||||||
foldersToReturn = folders
|
foldersToReturn = folders
|
||||||
} else {
|
} else if params.InfisicalToken != "" {
|
||||||
// get folders via service token
|
// get folders via service token
|
||||||
folders, err := GetFoldersViaServiceToken(params.InfisicalToken, params.WorkspaceId, params.Environment, params.FoldersPath)
|
folders, err := GetFoldersViaServiceToken(params.InfisicalToken, params.WorkspaceId, params.Environment, params.FoldersPath)
|
||||||
folderErr = err
|
folderErr = err
|
||||||
foldersToReturn = folders
|
foldersToReturn = folders
|
||||||
|
} else if params.UniversalAuthAccessToken != "" {
|
||||||
|
|
||||||
|
if params.WorkspaceId == "" {
|
||||||
|
PrintErrorMessageAndExit("Workspace ID is required when using machine identity")
|
||||||
|
}
|
||||||
|
|
||||||
|
// get folders via machine identity
|
||||||
|
folders, err := GetFoldersViaMachineIdentity(params.UniversalAuthAccessToken, params.WorkspaceId, params.Environment, params.FoldersPath)
|
||||||
|
folderErr = err
|
||||||
|
foldersToReturn = folders
|
||||||
}
|
}
|
||||||
return foldersToReturn, folderErr
|
return foldersToReturn, folderErr
|
||||||
}
|
}
|
||||||
@@ -132,6 +142,34 @@ func GetFoldersViaServiceToken(fullServiceToken string, workspaceId string, envi
|
|||||||
return folders, nil
|
return folders, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetFoldersViaMachineIdentity(accessToken string, workspaceId string, envSlug string, foldersPath string) ([]models.SingleFolder, error) {
|
||||||
|
httpClient := resty.New()
|
||||||
|
httpClient.SetAuthToken(accessToken).
|
||||||
|
SetHeader("Accept", "application/json")
|
||||||
|
|
||||||
|
getFoldersRequest := api.GetFoldersV1Request{
|
||||||
|
WorkspaceId: workspaceId,
|
||||||
|
Environment: envSlug,
|
||||||
|
FoldersPath: foldersPath,
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResponse, err := api.CallGetFoldersV1(httpClient, getFoldersRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var folders []models.SingleFolder
|
||||||
|
|
||||||
|
for _, folder := range apiResponse.Folders {
|
||||||
|
folders = append(folders, models.SingleFolder{
|
||||||
|
Name: folder.Name,
|
||||||
|
ID: folder.ID,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return folders, nil
|
||||||
|
}
|
||||||
|
|
||||||
// CreateFolder creates a folder in Infisical
|
// CreateFolder creates a folder in Infisical
|
||||||
func CreateFolder(params models.CreateFolderParameters) (models.SingleFolder, error) {
|
func CreateFolder(params models.CreateFolderParameters) (models.SingleFolder, error) {
|
||||||
loggedInUserDetails, err := GetCurrentLoggedInUserDetails()
|
loggedInUserDetails, err := GetCurrentLoggedInUserDetails()
|
||||||
|
|||||||
@@ -9,8 +9,11 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/Infisical/infisical-merge/packages/api"
|
||||||
"github.com/Infisical/infisical-merge/packages/models"
|
"github.com/Infisical/infisical-merge/packages/models"
|
||||||
|
"github.com/go-resty/resty/v2"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -78,6 +81,53 @@ func GetInfisicalServiceToken(cmd *cobra.Command) (serviceToken string, err erro
|
|||||||
return infisicalToken, nil
|
return infisicalToken, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetInfisicalUniversalAuthAccessToken(cmd *cobra.Command) (accessToken string, err error) {
|
||||||
|
|
||||||
|
var token string
|
||||||
|
|
||||||
|
universalAuthClientId, err := cmd.Flags().GetString("universal-auth-client-id")
|
||||||
|
if err != nil {
|
||||||
|
return token, err
|
||||||
|
}
|
||||||
|
universalAuthClientSecret, err := cmd.Flags().GetString("universal-auth-client-secret")
|
||||||
|
if err != nil {
|
||||||
|
return token, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if universalAuthClientId == "" {
|
||||||
|
universalAuthClientId = os.Getenv(INFISICAL_UNIVERSAL_AUTH_CLIENT_ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
if universalAuthClientSecret == "" {
|
||||||
|
universalAuthClientSecret = os.Getenv(INFISICAL_UNIVERSAL_AUTH_CLIENT_SECRET)
|
||||||
|
}
|
||||||
|
|
||||||
|
if universalAuthClientId != "" || universalAuthClientSecret != "" {
|
||||||
|
res, err := UniversalAuthLogin(universalAuthClientId, universalAuthClientSecret)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return token, err
|
||||||
|
}
|
||||||
|
token = res.AccessToken
|
||||||
|
}
|
||||||
|
|
||||||
|
return token, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func UniversalAuthLogin(clientId string, clientSecret string) (api.UniversalAuthLoginResponse, error) {
|
||||||
|
httpClient := resty.New()
|
||||||
|
httpClient.SetRetryCount(10000).
|
||||||
|
SetRetryMaxWaitTime(20 * time.Second).
|
||||||
|
SetRetryWaitTime(5 * time.Second)
|
||||||
|
|
||||||
|
tokenResponse, err := api.CallUniversalAuthLogin(httpClient, api.UniversalAuthLoginRequest{ClientId: clientId, ClientSecret: clientSecret})
|
||||||
|
if err != nil {
|
||||||
|
return api.UniversalAuthLoginResponse{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return tokenResponse, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Checks if the passed in email already exists in the users slice
|
// Checks if the passed in email already exists in the users slice
|
||||||
func ConfigContainsEmail(users []models.LoggedInUser, email string) bool {
|
func ConfigContainsEmail(users []models.LoggedInUser, email string) bool {
|
||||||
for _, value := range users {
|
for _, value := range users {
|
||||||
|
|||||||
Reference in New Issue
Block a user