From 61f1b146824a5c637db220d394c58a428c61f990 Mon Sep 17 00:00:00 2001 From: Brian Gustafson Date: Mon, 30 Oct 2017 10:06:38 -0700 Subject: [PATCH] Add host header and version to signing This is purely a sync of SDK changes. --- .../oracle/bmcs-go-sdk/constants.go | 2 + .../oracle/bmcs-go-sdk/identity_region.go | 39 +++++++++++++++++++ .../oracle/bmcs-go-sdk/identity_tenancy.go | 31 +++++++++++++++ .../oracle/bmcs-go-sdk/request_helpers.go | 6 ++- vendor/vendor.json | 6 +-- 5 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 vendor/github.com/oracle/bmcs-go-sdk/identity_region.go create mode 100644 vendor/github.com/oracle/bmcs-go-sdk/identity_tenancy.go diff --git a/vendor/github.com/oracle/bmcs-go-sdk/constants.go b/vendor/github.com/oracle/bmcs-go-sdk/constants.go index 784b2f4ccdf..2735934544f 100644 --- a/vendor/github.com/oracle/bmcs-go-sdk/constants.go +++ b/vendor/github.com/oracle/bmcs-go-sdk/constants.go @@ -149,6 +149,8 @@ const ( resourceUsers resourceName = "users" resourceUserGroupMemberships resourceName = "userGroupMemberships" resourceSwiftPasswords resourceName = "swiftPasswords" + resourceTenancies resourceName = "tenancies" + resourceRegions resourceName = "regions" // Core Resources resourceCustomerPremiseEquipment resourceName = "cpes" diff --git a/vendor/github.com/oracle/bmcs-go-sdk/identity_region.go b/vendor/github.com/oracle/bmcs-go-sdk/identity_region.go new file mode 100644 index 00000000000..407a19a2ec7 --- /dev/null +++ b/vendor/github.com/oracle/bmcs-go-sdk/identity_region.go @@ -0,0 +1,39 @@ +// Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + +package baremetal + +type IdentityRegion struct { + OPCRequestIDUnmarshaller + ETagUnmarshaller + Key string `json:"key"` + Name string `json:"name"` +} + +type ListRegions struct { + OPCRequestIDUnmarshaller + NextPageUnmarshaller + Regions []IdentityRegion +} + +func (l *ListRegions) GetList() interface{} { + return &l.Regions +} + +// ListRegions returns a list of regions +// +// See https://docs.us-phoenix-1.oraclecloud.com/api/#/en/identity/20160918/Region/ListRegions +func (c *Client) ListRegions() (resources *ListRegions, e error) { + details := &requestDetails{ + name: resourceRegions, + required: listOCIDRequirement{c.authInfo.tenancyOCID}, + } + + var getResp *response + if getResp, e = c.identityApi.getRequest(details); e != nil { + return + } + + resources = &ListRegions{} + e = getResp.unmarshal(resources) + return +} diff --git a/vendor/github.com/oracle/bmcs-go-sdk/identity_tenancy.go b/vendor/github.com/oracle/bmcs-go-sdk/identity_tenancy.go new file mode 100644 index 00000000000..9e1eb54344f --- /dev/null +++ b/vendor/github.com/oracle/bmcs-go-sdk/identity_tenancy.go @@ -0,0 +1,31 @@ +// Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + +package baremetal + +type Tenancy struct { + OPCRequestIDUnmarshaller + ETagUnmarshaller + Description string `json:"description"` + ID string `json:"id"` + Name string `json:"name"` + HomeRegionKey string `json:"homeRegion"` +} + +// GetTenancy returns the tenancy identified by id. +// +// See https://docs.us-phoenix-1.oraclecloud.com/api/#/en/identity/20160918/Tenancy/GetTenancy +func (c *Client) GetTenancy(id string) (res *Tenancy, e error) { + details := &requestDetails{ + ids: urlParts{id}, + name: resourceTenancies, + } + + var resp *response + if resp, e = c.identityApi.getRequest(details); e != nil { + return + } + + res = &Tenancy{} + e = resp.unmarshal(res) + return +} diff --git a/vendor/github.com/oracle/bmcs-go-sdk/request_helpers.go b/vendor/github.com/oracle/bmcs-go-sdk/request_helpers.go index 4b1c38d22bc..c7ffdd8dbc8 100644 --- a/vendor/github.com/oracle/bmcs-go-sdk/request_helpers.go +++ b/vendor/github.com/oracle/bmcs-go-sdk/request_helpers.go @@ -25,6 +25,8 @@ type authenticationInfo struct { keyFingerPrint string } +var signerVersion = "1" + func (a *authenticationInfo) getKeyID() string { return fmt.Sprintf("%s/%s/%s", a.tenancyOCID, a.userOCID, a.keyFingerPrint) } @@ -64,7 +66,7 @@ func createAuthorizationHeader(request *http.Request, auth *authenticationInfo, signedHeaders := getSigningHeaders(request.Method) headers := concatenateHeaders(signedHeaders) - authValue := fmt.Sprintf("Signature headers=\"%s\",keyId=\"%s\",algorithm=\"rsa-sha256\",signature=\"%s\"", headers, auth.getKeyID(), sig) + authValue := fmt.Sprintf("Signature version=\"%s\",headers=\"%s\",keyId=\"%s\",algorithm=\"rsa-sha256\",signature=\"%s\"", signerVersion, headers, auth.getKeyID(), sig) request.Header.Add("authorization", authValue) @@ -87,6 +89,7 @@ func getSigningHeaders(method string) []string { result := []string{ "date", "(request-target)", + "host", } if method == http.MethodPost || method == http.MethodPut { @@ -151,6 +154,7 @@ func getBodyHash(body []byte) string { func addRequiredRequestHeaders(request *http.Request, userAgent string, body []byte) { addIfNotPresent(&request.Header, "content-type", "application/json") addIfNotPresent(&request.Header, "date", time.Now().UTC().Format(http.TimeFormat)) + addIfNotPresent(&request.Header, "host", request.URL.Host) if userAgent == "" { addIfNotPresent(&request.Header, "User-Agent", fmt.Sprintf("baremetal-sdk-go-v%s", SDKVersion)) } else { diff --git a/vendor/vendor.json b/vendor/vendor.json index 5a8a2c04528..6f9ff5b8f20 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -2972,10 +2972,10 @@ "revisionTime": "2017-01-25T16:36:56Z" }, { - "checksumSHA1": "16wWla3HWHMOrJHo0yN7iu1YIhw=", + "checksumSHA1": "Swv3Qr8tQWyEN9KlAYC6eyD1J8E=", "path": "github.com/oracle/bmcs-go-sdk", - "revision": "2f3eb845627cb625dc2de52ccd7c4b69ecf60240", - "revisionTime": "2017-10-20T17:32:20Z", + "revision": "b4d4e32d4024fff11c732f5e3721c86c418b35ff", + "revisionTime": "2017-10-20T22:37:45Z", "version": "add-db-license-model", "versionExact": "add-db-license-model" },