github.com/rahart/packer@v0.12.2-0.20161229105310-282bb6ad370f/builder/azure/common/vault.go (about) 1 // Copyright (c) Microsoft Corporation. All rights reserved. 2 // Licensed under the MIT License. See the LICENSE file in builder/azure for license information. 3 4 // NOTE: vault APIs do not yet exist in the SDK, but once they do this code 5 // should be removed. 6 7 package common 8 9 import ( 10 "fmt" 11 "net/http" 12 "net/url" 13 14 "github.com/Azure/go-autorest/autorest" 15 ) 16 17 const ( 18 AzureVaultApiVersion = "2015-06-01" 19 ) 20 21 type VaultClient struct { 22 autorest.Client 23 keyVaultEndpoint url.URL 24 } 25 26 func NewVaultClient(keyVaultEndpoint url.URL) VaultClient { 27 return VaultClient{ 28 keyVaultEndpoint: keyVaultEndpoint, 29 } 30 } 31 32 type Secret struct { 33 ID *string `json:"id,omitempty"` 34 Value string `json:"value"` 35 } 36 37 func (client *VaultClient) GetSecret(vaultName, secretName string) (*Secret, error) { 38 p := map[string]interface{}{ 39 "secret-name": autorest.Encode("path", secretName), 40 } 41 q := map[string]interface{}{ 42 "api-version": AzureVaultApiVersion, 43 } 44 45 req, err := autorest.Prepare( 46 &http.Request{}, 47 autorest.AsGet(), 48 autorest.WithBaseURL(client.getVaultUrl(vaultName)), 49 autorest.WithPathParameters("/secrets/{secret-name}", p), 50 autorest.WithQueryParameters(q)) 51 52 if err != nil { 53 return nil, err 54 } 55 56 resp, err := autorest.SendWithSender(client, req) 57 if err != nil { 58 return nil, err 59 } 60 61 if resp.StatusCode != 200 { 62 return nil, fmt.Errorf( 63 "Failed to fetch secret from %s/%s, HTTP status code=%d (%s)", 64 vaultName, 65 secretName, 66 resp.StatusCode, 67 http.StatusText(resp.StatusCode)) 68 } 69 70 var secret Secret 71 72 err = autorest.Respond( 73 resp, 74 autorest.ByUnmarshallingJSON(&secret)) 75 if err != nil { 76 return nil, err 77 } 78 79 return &secret, nil 80 } 81 82 func (client *VaultClient) getVaultUrl(vaultName string) string { 83 return fmt.Sprintf("%s://%s.%s/", client.keyVaultEndpoint.Scheme, vaultName, client.keyVaultEndpoint.Host) 84 }