mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
chore: Show cloud credentials store in setup info (#236)
* chore: Show cloud credentials store in setup info * fix: pnpm sandbox policy for atomic write
This commit is contained in:
@@ -6,6 +6,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/safedep/dry/cloud"
|
||||||
|
"github.com/safedep/dry/log"
|
||||||
"github.com/safedep/pmg/config"
|
"github.com/safedep/pmg/config"
|
||||||
"github.com/safedep/pmg/internal/alias"
|
"github.com/safedep/pmg/internal/alias"
|
||||||
"github.com/safedep/pmg/internal/analytics"
|
"github.com/safedep/pmg/internal/analytics"
|
||||||
@@ -136,8 +138,54 @@ func executeSetupInfo() error {
|
|||||||
if cfg.Config.Cloud.EndpointID != "" {
|
if cfg.Config.Cloud.EndpointID != "" {
|
||||||
cloudEntries["Endpoint ID"] = cfg.Config.Cloud.EndpointID
|
cloudEntries["Endpoint ID"] = cfg.Config.Cloud.EndpointID
|
||||||
}
|
}
|
||||||
|
cloudEntries["Credentials"] = describeCloudCredentials()
|
||||||
ui.PrintInfoSection("Cloud Sync", cloudEntries)
|
ui.PrintInfoSection("Cloud Sync", cloudEntries)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// describeCloudCredentials reports whether SafeDep Cloud credentials can be
|
||||||
|
// resolved, and from where. The resolution order matches NewSyncClientBundle:
|
||||||
|
// keychain first, then environment variables. No network calls are made.
|
||||||
|
func describeCloudCredentials() string {
|
||||||
|
if source, ok := tryResolveKeychainCredentials(); ok {
|
||||||
|
return source
|
||||||
|
}
|
||||||
|
if source, ok := tryResolveEnvCredentials(); ok {
|
||||||
|
return source
|
||||||
|
}
|
||||||
|
return "not configured (run 'pmg cloud login' or set SAFEDEP_API_KEY and SAFEDEP_TENANT_ID)"
|
||||||
|
}
|
||||||
|
|
||||||
|
func tryResolveKeychainCredentials() (string, bool) {
|
||||||
|
resolver, err := cloud.NewKeychainCredentialResolver(cloud.CredentialTypeAPIKey)
|
||||||
|
if err != nil {
|
||||||
|
log.Debugf("keychain credential resolver unavailable: %v", err)
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err := resolver.Close(); err != nil {
|
||||||
|
log.Warnf("failed to close keychain resolver: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if _, err := resolver.Resolve(); err != nil {
|
||||||
|
log.Debugf("no keychain credentials: %v", err)
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
return "keychain", true
|
||||||
|
}
|
||||||
|
|
||||||
|
func tryResolveEnvCredentials() (string, bool) {
|
||||||
|
resolver, err := cloud.NewEnvCredentialResolver()
|
||||||
|
if err != nil {
|
||||||
|
log.Debugf("env credential resolver unavailable: %v", err)
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
if _, err := resolver.Resolve(); err != nil {
|
||||||
|
log.Debugf("no env credentials: %v", err)
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
return "environment (SAFEDEP_API_KEY, SAFEDEP_TENANT_ID)", true
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ filesystem:
|
|||||||
# which guarantees atomicity
|
# which guarantees atomicity
|
||||||
- ${CWD}/package.json.*
|
- ${CWD}/package.json.*
|
||||||
|
|
||||||
|
# pnpm install/update writes pnpm-lock.yaml atomically via a sibling
|
||||||
|
# temp file (e.g. pnpm-lock.yaml.139703784) followed by rename.
|
||||||
|
- ${CWD}/pnpm-lock.yaml.*
|
||||||
|
|
||||||
# Need access for dependency resolution
|
# Need access for dependency resolution
|
||||||
- ${CWD}/.pnpm-store
|
- ${CWD}/.pnpm-store
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user