github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/obs/trait_bucket.go (about)

     1  // Copyright 2019 Huawei Technologies Co.,Ltd.
     2  // Licensed under the Apache License, Version 2.0 (the "License"); you may not use
     3  // this file except in compliance with the License.  You may obtain a copy of the
     4  // License at
     5  //
     6  // http://www.apache.org/licenses/LICENSE-2.0
     7  //
     8  // Unless required by applicable law or agreed to in writing, software distributed
     9  // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    10  // CONDITIONS OF ANY KIND, either express or implied.  See the License for the
    11  // specific language governing permissions and limitations under the License.
    12  
    13  package obs
    14  
    15  import (
    16  	"fmt"
    17  	"strings"
    18  )
    19  
    20  func (input ListBucketsInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
    21  	params = make(map[string]string)
    22  	if input.MaxKeys > 0 {
    23  		params["max-keys"] = IntToString(input.MaxKeys)
    24  	}
    25  	if input.Marker != "" {
    26  		params["marker"] = input.Marker
    27  	}
    28  	headers = make(map[string][]string)
    29  	if input.QueryLocation && !isObs {
    30  		setHeaders(headers, HEADER_LOCATION_AMZ, []string{"true"}, isObs)
    31  	}
    32  	if input.BucketType != "" {
    33  		setHeaders(headers, HEADER_BUCKET_TYPE, []string{string(input.BucketType)}, true)
    34  	}
    35  	return
    36  }
    37  
    38  func (input CreateBucketInput) prepareGrantHeaders(headers map[string][]string, isObs bool) {
    39  	if grantReadID := input.GrantReadId; grantReadID != "" {
    40  		setHeaders(headers, HEADER_GRANT_READ_OBS, []string{grantReadID}, isObs)
    41  	}
    42  	if grantWriteID := input.GrantWriteId; grantWriteID != "" {
    43  		setHeaders(headers, HEADER_GRANT_WRITE_OBS, []string{grantWriteID}, isObs)
    44  	}
    45  	if grantReadAcpID := input.GrantReadAcpId; grantReadAcpID != "" {
    46  		setHeaders(headers, HEADER_GRANT_READ_ACP_OBS, []string{grantReadAcpID}, isObs)
    47  	}
    48  	if grantWriteAcpID := input.GrantWriteAcpId; grantWriteAcpID != "" {
    49  		setHeaders(headers, HEADER_GRANT_WRITE_ACP_OBS, []string{grantWriteAcpID}, isObs)
    50  	}
    51  	if grantFullControlID := input.GrantFullControlId; grantFullControlID != "" {
    52  		setHeaders(headers, HEADER_GRANT_FULL_CONTROL_OBS, []string{grantFullControlID}, isObs)
    53  	}
    54  	if grantReadDeliveredID := input.GrantReadDeliveredId; grantReadDeliveredID != "" {
    55  		setHeaders(headers, HEADER_GRANT_READ_DELIVERED_OBS, []string{grantReadDeliveredID}, true)
    56  	}
    57  	if grantFullControlDeliveredID := input.GrantFullControlDeliveredId; grantFullControlDeliveredID != "" {
    58  		setHeaders(headers, HEADER_GRANT_FULL_CONTROL_DELIVERED_OBS, []string{grantFullControlDeliveredID}, true)
    59  	}
    60  }
    61  
    62  func (input CreateBucketInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
    63  	headers = make(map[string][]string)
    64  	if acl := string(input.ACL); acl != "" {
    65  		setHeaders(headers, HEADER_ACL, []string{acl}, isObs)
    66  	}
    67  	if storageClass := string(input.StorageClass); storageClass != "" {
    68  		if !isObs {
    69  			if storageClass == string(StorageClassWarm) {
    70  				storageClass = string(storageClassStandardIA)
    71  			} else if storageClass == string(StorageClassCold) {
    72  				storageClass = string(storageClassGlacier)
    73  			}
    74  		}
    75  		setHeadersNext(headers, HEADER_STORAGE_CLASS_OBS, HEADER_STORAGE_CLASS, []string{storageClass}, isObs)
    76  	}
    77  	if epid := input.Epid; epid != "" {
    78  		setHeaders(headers, HEADER_EPID_HEADERS, []string{epid}, isObs)
    79  	}
    80  	if availableZone := input.AvailableZone; availableZone != "" {
    81  		setHeaders(headers, HEADER_AZ_REDUNDANCY, []string{availableZone}, isObs)
    82  	}
    83  
    84  	input.prepareGrantHeaders(headers, isObs)
    85  	if input.IsFSFileInterface {
    86  		setHeaders(headers, headerFSFileInterface, []string{"Enabled"}, true)
    87  	}
    88  
    89  	if location := strings.TrimSpace(input.Location); location != "" {
    90  		input.Location = location
    91  
    92  		xml := make([]string, 0, 3)
    93  		xml = append(xml, "<CreateBucketConfiguration>")
    94  		if isObs {
    95  			xml = append(xml, fmt.Sprintf("<Location>%s</Location>", input.Location))
    96  		} else {
    97  			xml = append(xml, fmt.Sprintf("<LocationConstraint>%s</LocationConstraint>", input.Location))
    98  		}
    99  		xml = append(xml, "</CreateBucketConfiguration>")
   100  
   101  		data = strings.Join(xml, "")
   102  	}
   103  
   104  	if bucketRedundancy := string(input.BucketRedundancy); bucketRedundancy != "" {
   105  		setHeaders(headers, HEADER_BUCKET_REDUNDANCY, []string{bucketRedundancy}, isObs)
   106  	}
   107  	if input.IsFusionAllowUpgrade {
   108  		setHeaders(headers, HEADER_FUSION_ALLOW_UPGRADE, []string{"true"}, isObs)
   109  	}
   110  
   111  	if input.IsRedundancyAllowALT {
   112  		setHeaders(headers, HEADER_FUSION_ALLOW_ALT, []string{"true"}, isObs)
   113  	}
   114  
   115  	return
   116  }
   117  
   118  func (input SetBucketStoragePolicyInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   119  	xml := make([]string, 0, 1)
   120  	if !isObs {
   121  		storageClass := input.StorageClass
   122  		if storageClass == "" {
   123  			storageClass = StorageClassStandard
   124  		} else if input.StorageClass == StorageClassWarm {
   125  			storageClass = storageClassStandardIA
   126  		} else if input.StorageClass == StorageClassCold {
   127  			storageClass = storageClassGlacier
   128  		}
   129  		params = map[string]string{string(SubResourceStoragePolicy): ""}
   130  		xml = append(xml, fmt.Sprintf("<StoragePolicy><DefaultStorageClass>%s</DefaultStorageClass></StoragePolicy>", storageClass))
   131  	} else {
   132  		if !IsContain(obsStorageClasses, string(input.StorageClass)) {
   133  			input.StorageClass = StorageClassStandard
   134  		}
   135  		params = map[string]string{string(SubResourceStorageClass): ""}
   136  		xml = append(xml, fmt.Sprintf("<StorageClass>%s</StorageClass>", input.StorageClass))
   137  	}
   138  	data = strings.Join(xml, "")
   139  	return
   140  }
   141  
   142  func (input SetBucketQuotaInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   143  	return trans(SubResourceQuota, input)
   144  }
   145  
   146  func (input SetBucketAclInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   147  	params = map[string]string{string(SubResourceAcl): ""}
   148  	headers = make(map[string][]string)
   149  
   150  	if acl := string(input.ACL); acl != "" {
   151  		setHeaders(headers, HEADER_ACL, []string{acl}, isObs)
   152  	} else {
   153  		data, _ = convertBucketACLToXML(input.AccessControlPolicy, false, isObs)
   154  	}
   155  	return
   156  }
   157  
   158  func (input SetBucketPolicyInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   159  	params = map[string]string{string(SubResourcePolicy): ""}
   160  	data = strings.NewReader(input.Policy)
   161  	return
   162  }
   163  
   164  func (input SetBucketCorsInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   165  	params = map[string]string{string(SubResourceCors): ""}
   166  	data, md5, err := ConvertRequestToIoReaderV2(input)
   167  	if err != nil {
   168  		return
   169  	}
   170  	headers = map[string][]string{HEADER_MD5_CAMEL: {md5}}
   171  	return
   172  }
   173  
   174  func (input SetBucketVersioningInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   175  	return trans(SubResourceVersioning, input)
   176  }
   177  
   178  func (input SetBucketWebsiteConfigurationInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   179  	params = map[string]string{string(SubResourceWebsite): ""}
   180  	data, _ = ConvertWebsiteConfigurationToXml(input.BucketWebsiteConfiguration, false)
   181  	return
   182  }
   183  
   184  func (input GetBucketMetadataInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   185  	headers = make(map[string][]string)
   186  	if origin := strings.TrimSpace(input.Origin); origin != "" {
   187  		headers[HEADER_ORIGIN_CAMEL] = []string{origin}
   188  	}
   189  	if requestHeader := strings.TrimSpace(input.RequestHeader); requestHeader != "" {
   190  		headers[HEADER_ACCESS_CONTROL_REQUEST_HEADER_CAMEL] = []string{requestHeader}
   191  	}
   192  	return
   193  }
   194  
   195  func (input SetBucketLoggingConfigurationInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   196  	params = map[string]string{string(SubResourceLogging): ""}
   197  	data, _ = ConvertLoggingStatusToXml(input.BucketLoggingStatus, false, isObs)
   198  	return
   199  }
   200  
   201  func (input SetBucketLifecycleConfigurationInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   202  	params = map[string]string{string(SubResourceLifecycle): ""}
   203  	data, md5 := ConvertLifecycleConfigurationToXml(input.BucketLifecycleConfiguration, true, isObs)
   204  	headers = map[string][]string{HEADER_MD5_CAMEL: {md5}}
   205  	return
   206  }
   207  
   208  func (input SetBucketEncryptionInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   209  	params = map[string]string{string(SubResourceEncryption): ""}
   210  	data, _ = ConvertEncryptionConfigurationToXml(input.BucketEncryptionConfiguration, false, isObs)
   211  	return
   212  }
   213  
   214  func (input SetBucketReplicationInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   215  	params = map[string]string{string(SubResourceReplication): ""}
   216  	data, md5 := convertReplicationConfigurationToXml(input.BucketReplicationConfiguration, true, isObs)
   217  	headers = map[string][]string{HEADER_MD5_CAMEL: {md5}}
   218  	return
   219  }
   220  
   221  func (input SetBucketTaggingInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   222  	params = map[string]string{string(SubResourceTagging): ""}
   223  	data, md5, err := ConvertRequestToIoReaderV2(input)
   224  	if err != nil {
   225  		return
   226  	}
   227  	headers = map[string][]string{HEADER_MD5_CAMEL: {md5}}
   228  	return
   229  }
   230  
   231  func (input SetBucketNotificationInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   232  	params = map[string]string{string(SubResourceNotification): ""}
   233  	data, _ = ConvertNotificationToXml(input.BucketNotification, false, isObs)
   234  	return
   235  }
   236  
   237  func (input SetBucketRequestPaymentInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   238  	return trans(SubResourceRequestPayment, input)
   239  }
   240  
   241  func (input SetBucketFetchPolicyInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   242  	contentType, _ := mimeTypes["json"]
   243  	headers = make(map[string][]string, 2)
   244  	headers[HEADER_CONTENT_TYPE] = []string{contentType}
   245  	setHeaders(headers, headerOefMarker, []string{"yes"}, isObs)
   246  	data, err = convertFetchPolicyToJSON(input)
   247  	return
   248  }
   249  
   250  func (input GetBucketFetchPolicyInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   251  	headers = make(map[string][]string, 1)
   252  	setHeaders(headers, headerOefMarker, []string{"yes"}, isObs)
   253  	return
   254  }
   255  
   256  func (input DeleteBucketFetchPolicyInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   257  	headers = make(map[string][]string, 1)
   258  	setHeaders(headers, headerOefMarker, []string{"yes"}, isObs)
   259  	return
   260  }
   261  
   262  func (input SetBucketFetchJobInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   263  	contentType, _ := mimeTypes["json"]
   264  	headers = make(map[string][]string, 2)
   265  	headers[HEADER_CONTENT_TYPE] = []string{contentType}
   266  	setHeaders(headers, headerOefMarker, []string{"yes"}, isObs)
   267  	data, err = convertFetchJobToJSON(input)
   268  	return
   269  }
   270  
   271  func (input GetBucketFetchJobInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   272  	headers = make(map[string][]string, 1)
   273  	setHeaders(headers, headerOefMarker, []string{"yes"}, isObs)
   274  	return
   275  }
   276  
   277  func (input SetBucketMirrorBackToSourceInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   278  	params = map[string]string{string(SubResourceMirrorBackToSource): ""}
   279  
   280  	contentType, _ := mimeTypes["json"]
   281  	headers = make(map[string][]string, 1)
   282  	headers[HEADER_CONTENT_TYPE] = []string{contentType}
   283  	data = input.Rules
   284  	return
   285  }
   286  
   287  func (input DeleteBucketCustomDomainInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   288  	return trans(SubResourceCustomDomain, input)
   289  }
   290  
   291  func (input SetBucketCustomDomainInput) trans(isObs bool) (params map[string]string, headers map[string][]string, data interface{}, err error) {
   292  	return trans(SubResourceCustomDomain, input)
   293  }