github.com/minio/minio-go/v6@v6.0.57/api-get-policy.go (about) 1 /* 2 * MinIO Go Library for Amazon S3 Compatible Cloud Storage 3 * Copyright 2015-2017 MinIO, Inc. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package minio 19 20 import ( 21 "context" 22 "io/ioutil" 23 "net/http" 24 "net/url" 25 26 "github.com/minio/minio-go/v6/pkg/s3utils" 27 ) 28 29 // GetBucketPolicy - get bucket policy at a given path. 30 func (c Client) GetBucketPolicy(bucketName string) (string, error) { 31 // Input validation. 32 if err := s3utils.CheckValidBucketName(bucketName); err != nil { 33 return "", err 34 } 35 bucketPolicy, err := c.getBucketPolicy(bucketName) 36 if err != nil { 37 errResponse := ToErrorResponse(err) 38 if errResponse.Code == "NoSuchBucketPolicy" { 39 return "", nil 40 } 41 return "", err 42 } 43 return bucketPolicy, nil 44 } 45 46 // Request server for current bucket policy. 47 func (c Client) getBucketPolicy(bucketName string) (string, error) { 48 // Get resources properly escaped and lined up before 49 // using them in http request. 50 urlValues := make(url.Values) 51 urlValues.Set("policy", "") 52 53 // Execute GET on bucket to list objects. 54 resp, err := c.executeMethod(context.Background(), "GET", requestMetadata{ 55 bucketName: bucketName, 56 queryValues: urlValues, 57 contentSHA256Hex: emptySHA256Hex, 58 }) 59 60 defer closeResponse(resp) 61 if err != nil { 62 return "", err 63 } 64 65 if resp != nil { 66 if resp.StatusCode != http.StatusOK { 67 return "", httpRespToErrorResponse(resp, bucketName, "") 68 } 69 } 70 71 bucketPolicyBuf, err := ioutil.ReadAll(resp.Body) 72 if err != nil { 73 return "", err 74 } 75 76 policy := string(bucketPolicyBuf) 77 return policy, err 78 }