Skip to content

Commit

Permalink
fix: remove server unimplemented GrpcStorageImpl#{get,list,create,del…
Browse files Browse the repository at this point in the history
…ete,Update}HmacKey

Partial revert of 84e4adf
  • Loading branch information
BenWhitehead committed Sep 20, 2024
1 parent 9de9a92 commit 51e841c
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 173 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,6 @@
import com.google.cloud.storage.UnifiedOpts.BucketSourceOpt;
import com.google.cloud.storage.UnifiedOpts.BucketTargetOpt;
import com.google.cloud.storage.UnifiedOpts.Fields;
import com.google.cloud.storage.UnifiedOpts.HmacKeyListOpt;
import com.google.cloud.storage.UnifiedOpts.HmacKeySourceOpt;
import com.google.cloud.storage.UnifiedOpts.HmacKeyTargetOpt;
import com.google.cloud.storage.UnifiedOpts.Mapper;
import com.google.cloud.storage.UnifiedOpts.NamedField;
import com.google.cloud.storage.UnifiedOpts.ObjectListOpt;
Expand All @@ -76,32 +73,25 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Streams;
import com.google.common.io.BaseEncoding;
import com.google.common.io.ByteStreams;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.SetIamPolicyRequest;
import com.google.iam.v1.TestIamPermissionsRequest;
import com.google.protobuf.ByteString;
import com.google.protobuf.FieldMask;
import com.google.storage.v2.BidiWriteObjectRequest;
import com.google.storage.v2.BucketAccessControl;
import com.google.storage.v2.ComposeObjectRequest;
import com.google.storage.v2.ComposeObjectRequest.SourceObject;
import com.google.storage.v2.CreateBucketRequest;
import com.google.storage.v2.CreateHmacKeyRequest;
import com.google.storage.v2.CreateNotificationConfigRequest;
import com.google.storage.v2.DeleteBucketRequest;
import com.google.storage.v2.DeleteHmacKeyRequest;
import com.google.storage.v2.DeleteNotificationConfigRequest;
import com.google.storage.v2.DeleteObjectRequest;
import com.google.storage.v2.GetBucketRequest;
import com.google.storage.v2.GetHmacKeyRequest;
import com.google.storage.v2.GetNotificationConfigRequest;
import com.google.storage.v2.GetObjectRequest;
import com.google.storage.v2.GetServiceAccountRequest;
import com.google.storage.v2.ListBucketsRequest;
import com.google.storage.v2.ListHmacKeysRequest;
import com.google.storage.v2.ListNotificationConfigsRequest;
import com.google.storage.v2.ListNotificationConfigsResponse;
import com.google.storage.v2.ListObjectsRequest;
Expand All @@ -118,7 +108,6 @@
import com.google.storage.v2.StorageClient;
import com.google.storage.v2.StorageClient.ListNotificationConfigsPage;
import com.google.storage.v2.UpdateBucketRequest;
import com.google.storage.v2.UpdateHmacKeyRequest;
import com.google.storage.v2.UpdateObjectRequest;
import com.google.storage.v2.WriteObjectRequest;
import com.google.storage.v2.WriteObjectResponse;
Expand Down Expand Up @@ -1317,119 +1306,28 @@ public List<Acl> listAcls(BlobId blob) {

@Override
public HmacKey createHmacKey(ServiceAccount serviceAccount, CreateHmacKeyOption... options) {
Opts<HmacKeyTargetOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
GrpcCallContext grpcCallContext =
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
CreateHmacKeyRequest request =
defaultProjectId
.createHmacKey()
.andThen(opts.createHmacKeysRequest())
.apply(CreateHmacKeyRequest.newBuilder())
.setServiceAccountEmail(serviceAccount.getEmail())
.build();
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
return Retrying.run(
getOptions(),
retryAlgorithmManager.getFor(request),
() -> storageClient.createHmacKeyCallable().call(request, merge),
resp -> {
ByteString secretKeyBytes = resp.getSecretKeyBytes();
String b64SecretKey = BaseEncoding.base64().encode(secretKeyBytes.toByteArray());
return HmacKey.newBuilder(b64SecretKey)
.setMetadata(codecs.hmacKeyMetadata().decode(resp.getMetadata()))
.build();
});
return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "createHmacKey");
}

@Override
public Page<HmacKeyMetadata> listHmacKeys(ListHmacKeysOption... options) {
Opts<HmacKeyListOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
GrpcCallContext grpcCallContext =
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());

ListHmacKeysRequest request =
defaultProjectId
.listHmacKeys()
.andThen(opts.listHmacKeysRequest())
.apply(ListHmacKeysRequest.newBuilder())
.build();
try {
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
return Retrying.run(
getOptions(),
retryAlgorithmManager.getFor(request),
() -> storageClient.listHmacKeysPagedCallable().call(request, merge),
resp ->
new TransformingPageDecorator<>(
resp.getPage(),
codecs.hmacKeyMetadata(),
getOptions(),
retryAlgorithmManager.getFor(request)));
} catch (Exception e) {
throw StorageException.coalesce(e);
}
return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "listHmacKey");
}

@Override
public HmacKeyMetadata getHmacKey(String accessId, GetHmacKeyOption... options) {
Opts<HmacKeySourceOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
GrpcCallContext grpcCallContext =
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
GetHmacKeyRequest request =
defaultProjectId
.getHmacKey()
.andThen(opts.getHmacKeysRequest())
.apply(GetHmacKeyRequest.newBuilder())
.setAccessId(accessId)
.build();
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
return Retrying.run(
getOptions(),
retryAlgorithmManager.getFor(request),
() -> storageClient.getHmacKeyCallable().call(request, merge),
codecs.hmacKeyMetadata());
return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "getHmacKey");
}

@Override
public void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption... options) {
Opts<HmacKeyTargetOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
GrpcCallContext grpcCallContext =
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
DeleteHmacKeyRequest req =
DeleteHmacKeyRequest.newBuilder()
.setAccessId(hmacKeyMetadata.getAccessId())
.setProject(projectNameCodec.encode(hmacKeyMetadata.getProjectId()))
.build();
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
Retrying.run(
getOptions(),
retryAlgorithmManager.getFor(req),
() -> {
storageClient.deleteHmacKeyCallable().call(req, merge);
return null;
},
Decoder.identity());
CrossTransportUtils.throwHttpJsonOnly(Storage.class, "deleteHmacKey");
}

@Override
public HmacKeyMetadata updateHmacKeyState(
HmacKeyMetadata hmacKeyMetadata, HmacKeyState state, UpdateHmacKeyOption... options) {
Opts<HmacKeyTargetOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
GrpcCallContext grpcCallContext =
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
com.google.storage.v2.HmacKeyMetadata encode =
codecs.hmacKeyMetadata().encode(hmacKeyMetadata).toBuilder().setState(state.name()).build();

UpdateHmacKeyRequest.Builder builder =
opts.updateHmacKeysRequest().apply(UpdateHmacKeyRequest.newBuilder()).setHmacKey(encode);
UpdateHmacKeyRequest request =
builder.setUpdateMask(FieldMask.newBuilder().addPaths("state").build()).build();
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
return Retrying.run(
getOptions(),
retryAlgorithmManager.getFor(request),
() -> storageClient.updateHmacKeyCallable().call(request, merge),
codecs.hmacKeyMetadata());
return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "updateHmacKeyState");
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4596,7 +4596,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
*
* @throws StorageException upon failure
*/
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
@TransportCompatibility({Transport.HTTP})
HmacKey createHmacKey(ServiceAccount serviceAccount, CreateHmacKeyOption... options);

/**
Expand Down Expand Up @@ -4631,7 +4631,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
* @param options the options to apply to this operation
* @throws StorageException upon failure
*/
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
@TransportCompatibility({Transport.HTTP})
Page<HmacKeyMetadata> listHmacKeys(ListHmacKeysOption... options);

/**
Expand All @@ -4648,7 +4648,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
*
* @throws StorageException upon failure
*/
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
@TransportCompatibility({Transport.HTTP})
HmacKeyMetadata getHmacKey(String accessId, GetHmacKeyOption... options);

/**
Expand All @@ -4668,7 +4668,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
*
* @throws StorageException upon failure
*/
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
@TransportCompatibility({Transport.HTTP})
void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption... options);

/**
Expand All @@ -4685,7 +4685,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
*
* @throws StorageException upon failure
*/
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
@TransportCompatibility({Transport.HTTP})
HmacKeyMetadata updateHmacKeyState(
final HmacKeyMetadata hmacKeyMetadata,
final HmacKey.HmacKeyState state,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,13 @@
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.CopyWriter;
import com.google.cloud.storage.HmacKey;
import com.google.cloud.storage.HmacKey.HmacKeyMetadata;
import com.google.cloud.storage.HmacKey.HmacKeyState;
import com.google.cloud.storage.ServiceAccount;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.Storage.BlobListOption;
import com.google.cloud.storage.Storage.BlobSourceOption;
import com.google.cloud.storage.Storage.BlobTargetOption;
import com.google.cloud.storage.Storage.BlobWriteOption;
import com.google.cloud.storage.Storage.BucketTargetOption;
import com.google.cloud.storage.Storage.CopyRequest;
import com.google.cloud.storage.Storage.CreateHmacKeyOption;
import com.google.cloud.storage.Storage.ListHmacKeysOption;
import com.google.cloud.storage.StorageOptions;
import com.google.cloud.storage.TransportCompatibility.Transport;
import com.google.cloud.storage.it.runner.StorageITRunner;
Expand Down Expand Up @@ -110,61 +104,6 @@ public void listBuckets() {
assertThat(bucketNames).contains(bucketInfo.getName());
}

@Test
public void createHmacKey() {
ServiceAccount serviceAccount = ServiceAccount.of("[email protected]");
HmacKey hmacKey = storage.createHmacKey(serviceAccount);
assertThat(hmacKey).isNotNull();
assertThat(hmacKey.getSecretKey()).isNotNull();
assertThat(hmacKey.getMetadata().getServiceAccount()).isEqualTo(serviceAccount);
}

@Test
public void getHmacKey() {
ServiceAccount serviceAccount = ServiceAccount.of("[email protected]");
HmacKey hmacKey = storage.createHmacKey(serviceAccount);
HmacKeyMetadata actual = storage.getHmacKey(hmacKey.getMetadata().getAccessId());
assertThat(actual).isEqualTo(hmacKey.getMetadata());
}

@Test
public void listHmacKeys() {
ImmutableList<HmacKey> keys =
IntStream.rangeClosed(1, 4)
.mapToObj(i -> ServiceAccount.of(String.format("x-%[email protected]", i)))
.map(sa -> storage.createHmacKey(sa, CreateHmacKeyOption.projectId("proj")))
.collect(ImmutableList.toImmutableList());

ImmutableList<HmacKeyMetadata> expected =
keys.stream().map(HmacKey::getMetadata).collect(ImmutableList.toImmutableList());

Page<HmacKeyMetadata> page = storage.listHmacKeys(ListHmacKeysOption.projectId("proj"));

ImmutableList<HmacKeyMetadata> actual =
StreamSupport.stream(page.iterateAll().spliterator(), false)
.collect(ImmutableList.toImmutableList());

assertThat(actual).containsAtLeastElementsIn(expected);
}

@Test
public void updateHmacKey() {
ServiceAccount serviceAccount = ServiceAccount.of("[email protected]");
HmacKey hmacKey = storage.createHmacKey(serviceAccount);
HmacKeyMetadata updated =
storage.updateHmacKeyState(hmacKey.getMetadata(), HmacKeyState.INACTIVE);
assertThat(updated.getServiceAccount()).isEqualTo(serviceAccount);
assertThat(updated.getState()).isEqualTo(HmacKeyState.INACTIVE);
}

@Test
public void deleteHmacKey() {
ServiceAccount serviceAccount = ServiceAccount.of("[email protected]");
HmacKey hmacKey = storage.createHmacKey(serviceAccount);
storage.updateHmacKeyState(hmacKey.getMetadata(), HmacKeyState.INACTIVE);
storage.deleteHmacKey(hmacKey.getMetadata());
}

@Test
public void object_writeGetRead() {
Storage s = storage;
Expand Down

0 comments on commit 51e841c

Please sign in to comment.