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 }