1 // Copyright 2019 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #include "google/cloud/storage/internal/hybrid_client.h" 16 #include "google/cloud/storage/internal/grpc_resumable_upload_session_url.h" 17 18 namespace google { 19 namespace cloud { 20 namespace storage { 21 inline namespace STORAGE_CLIENT_NS { 22 namespace internal { 23 HybridClient(ClientOptions options)24HybridClient::HybridClient(ClientOptions options) 25 : grpc_(std::make_shared<GrpcClient>(options)), 26 curl_(CurlClient::Create(std::move(options))) {} 27 client_options() const28ClientOptions const& HybridClient::client_options() const { 29 return curl_->client_options(); 30 } 31 ListBuckets(ListBucketsRequest const & request)32StatusOr<ListBucketsResponse> HybridClient::ListBuckets( 33 ListBucketsRequest const& request) { 34 return curl_->ListBuckets(request); 35 } 36 CreateBucket(CreateBucketRequest const & request)37StatusOr<BucketMetadata> HybridClient::CreateBucket( 38 CreateBucketRequest const& request) { 39 return curl_->CreateBucket(request); 40 } 41 GetBucketMetadata(GetBucketMetadataRequest const & request)42StatusOr<BucketMetadata> HybridClient::GetBucketMetadata( 43 GetBucketMetadataRequest const& request) { 44 return curl_->GetBucketMetadata(request); 45 } 46 DeleteBucket(DeleteBucketRequest const & request)47StatusOr<EmptyResponse> HybridClient::DeleteBucket( 48 DeleteBucketRequest const& request) { 49 return curl_->DeleteBucket(request); 50 } 51 UpdateBucket(UpdateBucketRequest const & request)52StatusOr<BucketMetadata> HybridClient::UpdateBucket( 53 UpdateBucketRequest const& request) { 54 return curl_->UpdateBucket(request); 55 } 56 PatchBucket(PatchBucketRequest const & request)57StatusOr<BucketMetadata> HybridClient::PatchBucket( 58 PatchBucketRequest const& request) { 59 return curl_->PatchBucket(request); 60 } 61 GetBucketIamPolicy(GetBucketIamPolicyRequest const & request)62StatusOr<IamPolicy> HybridClient::GetBucketIamPolicy( 63 GetBucketIamPolicyRequest const& request) { 64 return curl_->GetBucketIamPolicy(request); 65 } 66 GetNativeBucketIamPolicy(GetBucketIamPolicyRequest const & request)67StatusOr<NativeIamPolicy> HybridClient::GetNativeBucketIamPolicy( 68 GetBucketIamPolicyRequest const& request) { 69 return curl_->GetNativeBucketIamPolicy(request); 70 } 71 SetBucketIamPolicy(SetBucketIamPolicyRequest const & request)72StatusOr<IamPolicy> HybridClient::SetBucketIamPolicy( 73 SetBucketIamPolicyRequest const& request) { 74 return curl_->SetBucketIamPolicy(request); 75 } 76 SetNativeBucketIamPolicy(SetNativeBucketIamPolicyRequest const & request)77StatusOr<NativeIamPolicy> HybridClient::SetNativeBucketIamPolicy( 78 SetNativeBucketIamPolicyRequest const& request) { 79 return curl_->SetNativeBucketIamPolicy(request); 80 } 81 82 StatusOr<TestBucketIamPermissionsResponse> TestBucketIamPermissions(TestBucketIamPermissionsRequest const & request)83HybridClient::TestBucketIamPermissions( 84 TestBucketIamPermissionsRequest const& request) { 85 return curl_->TestBucketIamPermissions(request); 86 } 87 LockBucketRetentionPolicy(LockBucketRetentionPolicyRequest const & request)88StatusOr<BucketMetadata> HybridClient::LockBucketRetentionPolicy( 89 LockBucketRetentionPolicyRequest const& request) { 90 return curl_->LockBucketRetentionPolicy(request); 91 } 92 InsertObjectMedia(InsertObjectMediaRequest const & request)93StatusOr<ObjectMetadata> HybridClient::InsertObjectMedia( 94 InsertObjectMediaRequest const& request) { 95 return grpc_->InsertObjectMedia(request); 96 } 97 CopyObject(CopyObjectRequest const & request)98StatusOr<ObjectMetadata> HybridClient::CopyObject( 99 CopyObjectRequest const& request) { 100 return curl_->CopyObject(request); 101 } 102 GetObjectMetadata(GetObjectMetadataRequest const & request)103StatusOr<ObjectMetadata> HybridClient::GetObjectMetadata( 104 GetObjectMetadataRequest const& request) { 105 return curl_->GetObjectMetadata(request); 106 } 107 ReadObject(ReadObjectRangeRequest const & request)108StatusOr<std::unique_ptr<ObjectReadSource>> HybridClient::ReadObject( 109 ReadObjectRangeRequest const& request) { 110 return grpc_->ReadObject(request); 111 } 112 ListObjects(ListObjectsRequest const & request)113StatusOr<ListObjectsResponse> HybridClient::ListObjects( 114 ListObjectsRequest const& request) { 115 return curl_->ListObjects(request); 116 } 117 DeleteObject(DeleteObjectRequest const & request)118StatusOr<EmptyResponse> HybridClient::DeleteObject( 119 DeleteObjectRequest const& request) { 120 return curl_->DeleteObject(request); 121 } 122 UpdateObject(UpdateObjectRequest const & request)123StatusOr<ObjectMetadata> HybridClient::UpdateObject( 124 UpdateObjectRequest const& request) { 125 return curl_->UpdateObject(request); 126 } 127 PatchObject(PatchObjectRequest const & request)128StatusOr<ObjectMetadata> HybridClient::PatchObject( 129 PatchObjectRequest const& request) { 130 return curl_->PatchObject(request); 131 } 132 ComposeObject(ComposeObjectRequest const & request)133StatusOr<ObjectMetadata> HybridClient::ComposeObject( 134 ComposeObjectRequest const& request) { 135 return curl_->ComposeObject(request); 136 } 137 RewriteObject(RewriteObjectRequest const & request)138StatusOr<RewriteObjectResponse> HybridClient::RewriteObject( 139 RewriteObjectRequest const& request) { 140 return curl_->RewriteObject(request); 141 } 142 143 StatusOr<std::unique_ptr<ResumableUploadSession>> CreateResumableSession(ResumableUploadRequest const & request)144HybridClient::CreateResumableSession(ResumableUploadRequest const& request) { 145 return grpc_->CreateResumableSession(request); 146 } 147 148 StatusOr<std::unique_ptr<ResumableUploadSession>> RestoreResumableSession(std::string const & upload_id)149HybridClient::RestoreResumableSession(std::string const& upload_id) { 150 if (internal::IsGrpcResumableSessionUrl(upload_id)) { 151 return grpc_->RestoreResumableSession(upload_id); 152 } 153 return curl_->RestoreResumableSession(upload_id); 154 } 155 DeleteResumableUpload(DeleteResumableUploadRequest const & request)156StatusOr<EmptyResponse> HybridClient::DeleteResumableUpload( 157 DeleteResumableUploadRequest const& request) { 158 if (internal::IsGrpcResumableSessionUrl(request.upload_session_url())) { 159 return grpc_->DeleteResumableUpload(request); 160 } 161 return curl_->DeleteResumableUpload(request); 162 } 163 ListBucketAcl(ListBucketAclRequest const & request)164StatusOr<ListBucketAclResponse> HybridClient::ListBucketAcl( 165 ListBucketAclRequest const& request) { 166 return curl_->ListBucketAcl(request); 167 } 168 CreateBucketAcl(CreateBucketAclRequest const & request)169StatusOr<BucketAccessControl> HybridClient::CreateBucketAcl( 170 CreateBucketAclRequest const& request) { 171 return curl_->CreateBucketAcl(request); 172 } 173 DeleteBucketAcl(DeleteBucketAclRequest const & request)174StatusOr<EmptyResponse> HybridClient::DeleteBucketAcl( 175 DeleteBucketAclRequest const& request) { 176 return curl_->DeleteBucketAcl(request); 177 } 178 GetBucketAcl(GetBucketAclRequest const & request)179StatusOr<BucketAccessControl> HybridClient::GetBucketAcl( 180 GetBucketAclRequest const& request) { 181 return curl_->GetBucketAcl(request); 182 } 183 UpdateBucketAcl(UpdateBucketAclRequest const & request)184StatusOr<BucketAccessControl> HybridClient::UpdateBucketAcl( 185 UpdateBucketAclRequest const& request) { 186 return curl_->UpdateBucketAcl(request); 187 } 188 PatchBucketAcl(PatchBucketAclRequest const & request)189StatusOr<BucketAccessControl> HybridClient::PatchBucketAcl( 190 PatchBucketAclRequest const& request) { 191 return curl_->PatchBucketAcl(request); 192 } 193 ListObjectAcl(ListObjectAclRequest const & request)194StatusOr<ListObjectAclResponse> HybridClient::ListObjectAcl( 195 ListObjectAclRequest const& request) { 196 return curl_->ListObjectAcl(request); 197 } 198 CreateObjectAcl(CreateObjectAclRequest const & request)199StatusOr<ObjectAccessControl> HybridClient::CreateObjectAcl( 200 CreateObjectAclRequest const& request) { 201 return curl_->CreateObjectAcl(request); 202 } 203 DeleteObjectAcl(DeleteObjectAclRequest const & request)204StatusOr<EmptyResponse> HybridClient::DeleteObjectAcl( 205 DeleteObjectAclRequest const& request) { 206 return curl_->DeleteObjectAcl(request); 207 } 208 GetObjectAcl(GetObjectAclRequest const & request)209StatusOr<ObjectAccessControl> HybridClient::GetObjectAcl( 210 GetObjectAclRequest const& request) { 211 return curl_->GetObjectAcl(request); 212 } 213 UpdateObjectAcl(UpdateObjectAclRequest const & request)214StatusOr<ObjectAccessControl> HybridClient::UpdateObjectAcl( 215 UpdateObjectAclRequest const& request) { 216 return curl_->UpdateObjectAcl(request); 217 } 218 PatchObjectAcl(PatchObjectAclRequest const & request)219StatusOr<ObjectAccessControl> HybridClient::PatchObjectAcl( 220 PatchObjectAclRequest const& request) { 221 return curl_->PatchObjectAcl(request); 222 } 223 ListDefaultObjectAcl(ListDefaultObjectAclRequest const & request)224StatusOr<ListDefaultObjectAclResponse> HybridClient::ListDefaultObjectAcl( 225 ListDefaultObjectAclRequest const& request) { 226 return curl_->ListDefaultObjectAcl(request); 227 } 228 CreateDefaultObjectAcl(CreateDefaultObjectAclRequest const & request)229StatusOr<ObjectAccessControl> HybridClient::CreateDefaultObjectAcl( 230 CreateDefaultObjectAclRequest const& request) { 231 return curl_->CreateDefaultObjectAcl(request); 232 } 233 DeleteDefaultObjectAcl(DeleteDefaultObjectAclRequest const & request)234StatusOr<EmptyResponse> HybridClient::DeleteDefaultObjectAcl( 235 DeleteDefaultObjectAclRequest const& request) { 236 return curl_->DeleteDefaultObjectAcl(request); 237 } 238 GetDefaultObjectAcl(GetDefaultObjectAclRequest const & request)239StatusOr<ObjectAccessControl> HybridClient::GetDefaultObjectAcl( 240 GetDefaultObjectAclRequest const& request) { 241 return curl_->GetDefaultObjectAcl(request); 242 } 243 UpdateDefaultObjectAcl(UpdateDefaultObjectAclRequest const & request)244StatusOr<ObjectAccessControl> HybridClient::UpdateDefaultObjectAcl( 245 UpdateDefaultObjectAclRequest const& request) { 246 return curl_->UpdateDefaultObjectAcl(request); 247 } 248 PatchDefaultObjectAcl(PatchDefaultObjectAclRequest const & request)249StatusOr<ObjectAccessControl> HybridClient::PatchDefaultObjectAcl( 250 PatchDefaultObjectAclRequest const& request) { 251 return curl_->PatchDefaultObjectAcl(request); 252 } 253 GetServiceAccount(GetProjectServiceAccountRequest const & request)254StatusOr<ServiceAccount> HybridClient::GetServiceAccount( 255 GetProjectServiceAccountRequest const& request) { 256 return curl_->GetServiceAccount(request); 257 } 258 ListHmacKeys(ListHmacKeysRequest const & request)259StatusOr<ListHmacKeysResponse> HybridClient::ListHmacKeys( 260 ListHmacKeysRequest const& request) { 261 return curl_->ListHmacKeys(request); 262 } 263 CreateHmacKey(CreateHmacKeyRequest const & request)264StatusOr<CreateHmacKeyResponse> HybridClient::CreateHmacKey( 265 CreateHmacKeyRequest const& request) { 266 return curl_->CreateHmacKey(request); 267 } 268 DeleteHmacKey(DeleteHmacKeyRequest const & request)269StatusOr<EmptyResponse> HybridClient::DeleteHmacKey( 270 DeleteHmacKeyRequest const& request) { 271 return curl_->DeleteHmacKey(request); 272 } 273 GetHmacKey(GetHmacKeyRequest const & request)274StatusOr<HmacKeyMetadata> HybridClient::GetHmacKey( 275 GetHmacKeyRequest const& request) { 276 return curl_->GetHmacKey(request); 277 } 278 UpdateHmacKey(UpdateHmacKeyRequest const & request)279StatusOr<HmacKeyMetadata> HybridClient::UpdateHmacKey( 280 UpdateHmacKeyRequest const& request) { 281 return curl_->UpdateHmacKey(request); 282 } 283 SignBlob(SignBlobRequest const & request)284StatusOr<SignBlobResponse> HybridClient::SignBlob( 285 SignBlobRequest const& request) { 286 return curl_->SignBlob(request); 287 } 288 ListNotifications(ListNotificationsRequest const & request)289StatusOr<ListNotificationsResponse> HybridClient::ListNotifications( 290 ListNotificationsRequest const& request) { 291 return curl_->ListNotifications(request); 292 } 293 CreateNotification(CreateNotificationRequest const & request)294StatusOr<NotificationMetadata> HybridClient::CreateNotification( 295 CreateNotificationRequest const& request) { 296 return curl_->CreateNotification(request); 297 } 298 GetNotification(GetNotificationRequest const & request)299StatusOr<NotificationMetadata> HybridClient::GetNotification( 300 GetNotificationRequest const& request) { 301 return curl_->GetNotification(request); 302 } 303 DeleteNotification(DeleteNotificationRequest const & request)304StatusOr<EmptyResponse> HybridClient::DeleteNotification( 305 DeleteNotificationRequest const& request) { 306 return curl_->DeleteNotification(request); 307 } 308 309 } // namespace internal 310 } // namespace STORAGE_CLIENT_NS 311 } // namespace storage 312 } // namespace cloud 313 } // namespace google 314