5050import com .google .cloud .storage .UnifiedOpts .BucketSourceOpt ;
5151import com .google .cloud .storage .UnifiedOpts .BucketTargetOpt ;
5252import com .google .cloud .storage .UnifiedOpts .HmacKeyListOpt ;
53+ import com .google .cloud .storage .UnifiedOpts .HmacKeySourceOpt ;
5354import com .google .cloud .storage .UnifiedOpts .HmacKeyTargetOpt ;
5455import com .google .cloud .storage .UnifiedOpts .ObjectListOpt ;
5556import com .google .cloud .storage .UnifiedOpts .ObjectSourceOpt ;
5657import com .google .cloud .storage .UnifiedOpts .ObjectTargetOpt ;
5758import com .google .cloud .storage .UnifiedOpts .Opts ;
5859import com .google .cloud .storage .UnifiedOpts .ProjectId ;
5960import com .google .common .collect .ImmutableSet ;
61+ import com .google .common .io .BaseEncoding ;
6062import com .google .common .io .ByteStreams ;
63+ import com .google .protobuf .ByteString ;
6164import com .google .protobuf .FieldMask ;
6265import com .google .protobuf .Message ;
6366import com .google .storage .v2 .ComposeObjectRequest ;
6467import com .google .storage .v2 .ComposeObjectRequest .SourceObject ;
6568import com .google .storage .v2 .CreateBucketRequest ;
69+ import com .google .storage .v2 .CreateHmacKeyRequest ;
6670import com .google .storage .v2 .DeleteBucketRequest ;
6771import com .google .storage .v2 .DeleteHmacKeyRequest ;
6872import com .google .storage .v2 .DeleteObjectRequest ;
6973import com .google .storage .v2 .GetBucketRequest ;
74+ import com .google .storage .v2 .GetHmacKeyRequest ;
7075import com .google .storage .v2 .GetObjectRequest ;
7176import com .google .storage .v2 .GetServiceAccountRequest ;
7277import com .google .storage .v2 .ListBucketsRequest ;
8388import com .google .storage .v2 .StorageClient .ListObjectsPage ;
8489import com .google .storage .v2 .StorageClient .ListObjectsPagedResponse ;
8590import com .google .storage .v2 .UpdateBucketRequest ;
91+ import com .google .storage .v2 .UpdateHmacKeyRequest ;
8692import com .google .storage .v2 .UpdateObjectRequest ;
8793import com .google .storage .v2 .WriteObjectRequest ;
8894import com .google .storage .v2 .WriteObjectResponse ;
@@ -141,7 +147,7 @@ final class GrpcStorageImpl extends BaseService<StorageOptions> implements Stora
141147 private final GrpcRetryAlgorithmManager retryAlgorithmManager ;
142148 private final SyntaxDecoders syntaxDecoders ;
143149
144- private final transient ProjectId defaultProjectId ;
150+ @ Deprecated private final transient ProjectId defaultProjectId ;
145151
146152 GrpcStorageImpl (GrpcStorageOptions options , StorageClient storageClient ) {
147153 super (options );
@@ -389,9 +395,12 @@ public Page<Bucket> list(BucketListOption... options) {
389395 Opts <BucketListOpt > opts = Opts .unwrap (options );
390396 GrpcCallContext grpcCallContext =
391397 opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
392- ListBucketsRequest .Builder builder =
393- ListBucketsRequest .newBuilder ().setParent (projectNameCodec .encode (defaultProjectId .val ));
394- ListBucketsRequest request = opts .listBucketsRequest ().apply (builder ).build ();
398+ ListBucketsRequest request =
399+ defaultProjectId
400+ .listBuckets ()
401+ .andThen (opts .listBucketsRequest ())
402+ .apply (ListBucketsRequest .newBuilder ())
403+ .build ();
395404 ListBucketsPagedResponse call = listBucketsCallable .call (request , grpcCallContext );
396405 ListBucketsPage page = call .getPage ();
397406 return new TransformingPageDecorator <>(page , syntaxDecoders .bucket );
@@ -873,7 +882,27 @@ public List<Acl> listAcls(BlobId blob) {
873882
874883 @ Override
875884 public HmacKey createHmacKey (ServiceAccount serviceAccount , CreateHmacKeyOption ... options ) {
876- return todo ();
885+ Opts <HmacKeyTargetOpt > opts = Opts .unwrap (options );
886+ GrpcCallContext grpcCallContext =
887+ opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
888+ CreateHmacKeyRequest request =
889+ defaultProjectId
890+ .createHmacKey ()
891+ .andThen (opts .createHmacKeysRequest ())
892+ .apply (CreateHmacKeyRequest .newBuilder ())
893+ .setServiceAccountEmail (serviceAccount .getEmail ())
894+ .build ();
895+ return Retrying .run (
896+ getOptions (),
897+ retryAlgorithmManager .getFor (request ),
898+ () -> grpcStorageStub .createHmacKeyCallable ().call (request , grpcCallContext ),
899+ resp -> {
900+ ByteString secretKeyBytes = resp .getSecretKeyBytes ();
901+ String b64SecretKey = BaseEncoding .base64 ().encode (secretKeyBytes .toByteArray ());
902+ return HmacKey .newBuilder (b64SecretKey )
903+ .setMetadata (codecs .hmacKeyMetadata ().decode (resp .getMetadata ()))
904+ .build ();
905+ });
877906 }
878907
879908 @ Override
@@ -884,19 +913,34 @@ public Page<HmacKeyMetadata> listHmacKeys(ListHmacKeysOption... options) {
884913 GrpcCallContext grpcCallContext =
885914 opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
886915
887- ProjectId projectId = opts .projectId ().orElse (defaultProjectId );
888-
889- ListHmacKeysRequest .Builder builder =
890- projectId .listHmacKeys ().apply (ListHmacKeysRequest .newBuilder ());
891- ListHmacKeysRequest request = opts .listHmacKeysRequest ().apply (builder ).build ();
916+ ListHmacKeysRequest request =
917+ defaultProjectId
918+ .listHmacKeys ()
919+ .andThen (opts .listHmacKeysRequest ())
920+ .apply (ListHmacKeysRequest .newBuilder ())
921+ .build ();
892922 ListHmacKeysPagedResponse call = listHmacKeysCallable .call (request , grpcCallContext );
893923 ListHmacKeysPage page = call .getPage ();
894924 return new TransformingPageDecorator <>(page , codecs .hmacKeyMetadata ());
895925 }
896926
897927 @ Override
898928 public HmacKeyMetadata getHmacKey (String accessId , GetHmacKeyOption ... options ) {
899- return todo ();
929+ Opts <HmacKeySourceOpt > opts = Opts .unwrap (options );
930+ GrpcCallContext grpcCallContext =
931+ opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
932+ GetHmacKeyRequest request =
933+ defaultProjectId
934+ .getHmacKey ()
935+ .andThen (opts .getHmacKeysRequest ())
936+ .apply (GetHmacKeyRequest .newBuilder ())
937+ .setAccessId (accessId )
938+ .build ();
939+ return Retrying .run (
940+ getOptions (),
941+ retryAlgorithmManager .getFor (request ),
942+ () -> grpcStorageStub .getHmacKeyCallable ().call (request , grpcCallContext ),
943+ codecs .hmacKeyMetadata ());
900944 }
901945
902946 @ Override
@@ -907,7 +951,7 @@ public void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption..
907951 DeleteHmacKeyRequest req =
908952 DeleteHmacKeyRequest .newBuilder ()
909953 .setAccessId (hmacKeyMetadata .getAccessId ())
910- .setProject (hmacKeyMetadata .getProjectId ())
954+ .setProject (projectNameCodec . encode ( hmacKeyMetadata .getProjectId () ))
911955 .build ();
912956 Retrying .run (
913957 getOptions (),
@@ -922,7 +966,21 @@ public void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption..
922966 @ Override
923967 public HmacKeyMetadata updateHmacKeyState (
924968 HmacKeyMetadata hmacKeyMetadata , HmacKeyState state , UpdateHmacKeyOption ... options ) {
925- return todo ();
969+ Opts <HmacKeyTargetOpt > opts = Opts .unwrap (options );
970+ GrpcCallContext grpcCallContext =
971+ opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
972+ com .google .storage .v2 .HmacKeyMetadata encode =
973+ codecs .hmacKeyMetadata ().encode (hmacKeyMetadata ).toBuilder ().setState (state .name ()).build ();
974+
975+ UpdateHmacKeyRequest .Builder builder =
976+ opts .updateHmacKeysRequest ().apply (UpdateHmacKeyRequest .newBuilder ()).setHmacKey (encode );
977+ UpdateHmacKeyRequest request =
978+ builder .setUpdateMask (FieldMask .newBuilder ().addPaths ("state" ).build ()).build ();
979+ return Retrying .run (
980+ getOptions (),
981+ retryAlgorithmManager .getFor (request ),
982+ () -> grpcStorageStub .updateHmacKeyCallable ().call (request , grpcCallContext ),
983+ codecs .hmacKeyMetadata ());
926984 }
927985
928986 @ Override
0 commit comments