// Copyright 2016-2019, Pulumi Corporation. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cmd import ( "encoding/base64" "github.com/pulumi/pulumi/pkg/secrets" "github.com/pulumi/pulumi/pkg/secrets/cloud" "github.com/pulumi/pulumi/pkg/tokens" "github.com/pulumi/pulumi/pkg/util/contract" "github.com/pulumi/pulumi/pkg/workspace" ) func newCloudSecretsManager(stackName tokens.QName, configFile, secretsProvider string) (secrets.Manager, error) { contract.Assertf(stackName != "", "stackName %s", "!= \"\"") if configFile == "" { f, err := workspace.DetectProjectStackPath(stackName) if err != nil { return nil, err } configFile = f } info, err := workspace.LoadProjectStack(configFile) if err != nil { return nil, err } var secretsManager *cloud.Manager if info.EncryptedKey == "" { dataKey, err := cloud.GenerateNewDataKey(secretsProvider) if err != nil { return nil, err } info.EncryptedKey = base64.StdEncoding.EncodeToString(dataKey) } info.SecretsProvider = secretsProvider if err = info.Save(configFile); err != nil { return nil, err } dataKey, err := base64.StdEncoding.DecodeString(info.EncryptedKey) if err != nil { return nil, err } secretsManager, err = cloud.NewCloudSecretsManager(secretsProvider, dataKey) if err != nil { return nil, err } return secretsManager, nil }