| # Copyright 2021 Google LLC | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # https://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| import synthtool as s | |
| from synthtool.languages import java | |
| IMPLEMENTS_RESOURCE_NAME = "implements ResourceName" | |
| EXTENDS_KEY_NAME = "extends KeyName" | |
| ENCRYPT_INSERTION_POINT = r'(\s+public final EncryptResponse encrypt\(ResourceName.*\) {\n.*\n.*\n.*\n.*\n.*\n.*return encrypt\(request\);\n\s+})' | |
| SET_IAM_INSERTION_POINT = r'(\s+public final Policy setIamPolicy\(SetIamPolicyRequest request\) {\n\s+return.*\n\s+})' | |
| GET_IAM_INSERTION_POINT = r'(\s+public final Policy getIamPolicy\(GetIamPolicyRequest request\) {\n\s+return.*\n\s+})' | |
| TEST_IAM_INSERTION_POINT = r'(\s+public final TestIamPermissionsResponse testIamPermissions\(TestIamPermissionsRequest request\) {\n\s+return.*\n\s+})' | |
| ENCRYPT_METHOD = """ | |
| // ADDED BY SYNTH | |
| /** | |
| * Encrypts data, so that it can only be recovered by a call to | |
| * [Decrypt][google.cloud.kms.v1.KeyManagementService.Decrypt]. The | |
| * [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] must be | |
| * [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT]. | |
| * | |
| * <p>Sample code: | |
| * | |
| * <pre><code> | |
| * try (KeyManagementServiceClient keyManagementServiceClient = KeyManagementServiceClient.create()) { | |
| * CryptoKeyPathName name = CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]"); | |
| * ByteString plaintext = ByteString.copyFromUtf8(""); | |
| * EncryptResponse response = keyManagementServiceClient.encrypt(name, plaintext); | |
| * } | |
| * </code></pre> | |
| * | |
| * @param name Required. The resource name of the [CryptoKey][google.cloud.kms.v1.CryptoKey] or | |
| * [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] to use for encryption. | |
| * <p>If a [CryptoKey][google.cloud.kms.v1.CryptoKey] is specified, the server will use its | |
| * [primary version][google.cloud.kms.v1.CryptoKey.primary]. | |
| * @param plaintext Required. The data to encrypt. Must be no larger than 64KiB. | |
| * <p>The maximum size depends on the key version's | |
| * [protection_level][google.cloud.kms.v1.CryptoKeyVersionTemplate.protection_level]. For | |
| * [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE] keys, the plaintext must be no | |
| * larger than 64KiB. For [HSM][google.cloud.kms.v1.ProtectionLevel.HSM] keys, the combined | |
| * length of the plaintext and additional_authenticated_data fields must be no larger than | |
| * 8KiB. | |
| * @throws com.google.api.gax.rpc.ApiException if the remote call fails | |
| */ | |
| public final EncryptResponse encrypt(CryptoKeyPathName name, ByteString plaintext) { | |
| EncryptRequest request = | |
| EncryptRequest.newBuilder() | |
| .setName(name == null ? null : name.toString()) | |
| .setPlaintext(plaintext) | |
| .build(); | |
| return encrypt(request); | |
| } | |
| """ | |
| SET_IAM_METHODS = """ | |
| // ADDED BY SYNTH | |
| /** | |
| * Sets the access control policy on the specified resource. Replaces any existing policy. | |
| * | |
| * <p>Can return Public Errors: NOT_FOUND, INVALID_ARGUMENT and PERMISSION_DENIED | |
| * | |
| * <p>Sample code: | |
| * | |
| * <pre><code> | |
| * try (KeyManagementServiceClient keyManagementServiceClient = KeyManagementServiceClient.create()) { | |
| * KeyName resource = KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]"); | |
| * Policy policy = Policy.newBuilder().build(); | |
| * Policy response = keyManagementServiceClient.setIamPolicy(resource, policy); | |
| * } | |
| * </code></pre> | |
| * | |
| * @param resource REQUIRED: The resource for which the policy is being specified. See the | |
| * operation documentation for the appropriate value for this field. | |
| * @param policy REQUIRED: The complete policy to be applied to the `resource`. The size of the | |
| * policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud | |
| * Platform services (such as Projects) might reject them. | |
| * @throws com.google.api.gax.rpc.ApiException if the remote call fails | |
| */ | |
| public final Policy setIamPolicy(KeyName resource, Policy policy) { | |
| SetIamPolicyRequest request = | |
| SetIamPolicyRequest.newBuilder() | |
| .setResource(resource == null ? null : resource.toString()) | |
| .setPolicy(policy) | |
| .build(); | |
| return setIamPolicy(request); | |
| } | |
| // ADDED BY SYNTH | |
| /** | |
| * Sets the access control policy on the specified resource. Replaces any existing policy. | |
| * | |
| * <p>Can return Public Errors: NOT_FOUND, INVALID_ARGUMENT and PERMISSION_DENIED | |
| * | |
| * <p>Sample code: | |
| * | |
| * <pre><code> | |
| * try (KeyManagementServiceClient keyManagementServiceClient = KeyManagementServiceClient.create()) { | |
| * KeyName resource = KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]"); | |
| * Policy policy = Policy.newBuilder().build(); | |
| * Policy response = keyManagementServiceClient.setIamPolicy(resource.toString(), policy); | |
| * } | |
| * </code></pre> | |
| * | |
| * @param resource REQUIRED: The resource for which the policy is being specified. See the | |
| * operation documentation for the appropriate value for this field. | |
| * @param policy REQUIRED: The complete policy to be applied to the `resource`. The size of the | |
| * policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud | |
| * Platform services (such as Projects) might reject them. | |
| * @throws com.google.api.gax.rpc.ApiException if the remote call fails | |
| */ | |
| public final Policy setIamPolicy(String resource, Policy policy) { | |
| SetIamPolicyRequest request = | |
| SetIamPolicyRequest.newBuilder().setResource(resource).setPolicy(policy).build(); | |
| return setIamPolicy(request); | |
| } | |
| """ | |
| GET_IAM_METHODS = """ | |
| // ADDED BY SYNTH | |
| /** | |
| * Gets the access control policy for a resource. Returns an empty policy if the resource exists | |
| * and does not have a policy set. | |
| * | |
| * <p>Sample code: | |
| * | |
| * <pre><code> | |
| * try (KeyManagementServiceClient keyManagementServiceClient = KeyManagementServiceClient.create()) { | |
| * KeyName resource = KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]"); | |
| * Policy response = keyManagementServiceClient.getIamPolicy(resource); | |
| * } | |
| * </code></pre> | |
| * | |
| * @param resource REQUIRED: The resource for which the policy is being requested. See the | |
| * operation documentation for the appropriate value for this field. | |
| * @throws com.google.api.gax.rpc.ApiException if the remote call fails | |
| */ | |
| public final Policy getIamPolicy(KeyName resource) { | |
| GetIamPolicyRequest request = | |
| GetIamPolicyRequest.newBuilder() | |
| .setResource(resource == null ? null : resource.toString()) | |
| .build(); | |
| return getIamPolicy(request); | |
| } | |
| // ADDED BY SYNTH | |
| /** | |
| * Gets the access control policy for a resource. Returns an empty policy if the resource exists | |
| * and does not have a policy set. | |
| * | |
| * <p>Sample code: | |
| * | |
| * <pre><code> | |
| * try (KeyManagementServiceClient keyManagementServiceClient = KeyManagementServiceClient.create()) { | |
| * KeyName resource = KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]"); | |
| * Policy response = keyManagementServiceClient.getIamPolicy(resource.toString()); | |
| * } | |
| * </code></pre> | |
| * | |
| * @param resource REQUIRED: The resource for which the policy is being requested. See the | |
| * operation documentation for the appropriate value for this field. | |
| * @throws com.google.api.gax.rpc.ApiException if the remote call fails | |
| */ | |
| public final Policy getIamPolicy(String resource) { | |
| GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder().setResource(resource).build(); | |
| return getIamPolicy(request); | |
| } | |
| """ | |
| TEST_IAM_METHODS = """ | |
| // ADDED BY SYNTH | |
| /** | |
| * Returns permissions that a caller has on the specified resource. If the resource does not | |
| * exist, this will return an empty set of permissions, not a NOT_FOUND error. | |
| * | |
| * <p>Note: This operation is designed to be used for building permission-aware UIs and | |
| * command-line tools, not for authorization checking. This operation may "fail open" without | |
| * warning. | |
| * | |
| * <p>Sample code: | |
| * | |
| * <pre><code> | |
| * try (KeyManagementServiceClient keyManagementServiceClient = KeyManagementServiceClient.create()) { | |
| * KeyName resource = KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]"); | |
| * List<String> permissions = new ArrayList<>(); | |
| * TestIamPermissionsResponse response = keyManagementServiceClient.testIamPermissions(resource, permissions); | |
| * } | |
| * </code></pre> | |
| * | |
| * @param resource REQUIRED: The resource for which the policy detail is being requested. See the | |
| * operation documentation for the appropriate value for this field. | |
| * @param permissions The set of permissions to check for the `resource`. Permissions with | |
| * wildcards (such as '*' or 'storage.*') are not allowed. For more information see | |
| * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions). | |
| * @throws com.google.api.gax.rpc.ApiException if the remote call fails | |
| */ | |
| public final TestIamPermissionsResponse testIamPermissions( | |
| KeyName resource, List<String> permissions) { | |
| TestIamPermissionsRequest request = | |
| TestIamPermissionsRequest.newBuilder() | |
| .setResource(resource == null ? null : resource.toString()) | |
| .addAllPermissions(permissions) | |
| .build(); | |
| return testIamPermissions(request); | |
| } | |
| // ADDED BY SYNTH | |
| /** | |
| * Returns permissions that a caller has on the specified resource. If the resource does not | |
| * exist, this will return an empty set of permissions, not a NOT_FOUND error. | |
| * | |
| * <p>Note: This operation is designed to be used for building permission-aware UIs and | |
| * command-line tools, not for authorization checking. This operation may "fail open" without | |
| * warning. | |
| * | |
| * <p>Sample code: | |
| * | |
| * <pre><code> | |
| * try (KeyManagementServiceClient keyManagementServiceClient = KeyManagementServiceClient.create()) { | |
| * KeyName resource = KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]"); | |
| * List<String> permissions = new ArrayList<>(); | |
| * TestIamPermissionsResponse response = keyManagementServiceClient.testIamPermissions(resource.toString(), permissions); | |
| * } | |
| * </code></pre> | |
| * | |
| * @param resource REQUIRED: The resource for which the policy detail is being requested. See the | |
| * operation documentation for the appropriate value for this field. | |
| * @param permissions The set of permissions to check for the `resource`. Permissions with | |
| * wildcards (such as '*' or 'storage.*') are not allowed. For more information see | |
| * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions). | |
| * @throws com.google.api.gax.rpc.ApiException if the remote call fails | |
| */ | |
| public final TestIamPermissionsResponse testIamPermissions( | |
| String resource, List<String> permissions) { | |
| TestIamPermissionsRequest request = | |
| TestIamPermissionsRequest.newBuilder() | |
| .setResource(resource) | |
| .addAllPermissions(permissions) | |
| .build(); | |
| return testIamPermissions(request); | |
| } | |
| """ | |
| for library in s.get_staging_dirs(): | |
| # put any special-case replacements here | |
| s.replace( | |
| "**/KeyManagementServiceClient.java", | |
| ENCRYPT_INSERTION_POINT, | |
| "\g<1>\n\n" + ENCRYPT_METHOD | |
| ) | |
| s.replace( | |
| "**/KeyManagementServiceClient.java", | |
| GET_IAM_INSERTION_POINT, | |
| "\g<1>\n\n" + GET_IAM_METHODS | |
| ) | |
| s.replace( | |
| "**/KeyManagementServiceClient.java", | |
| SET_IAM_INSERTION_POINT, | |
| "\g<1>\n\n" + SET_IAM_METHODS | |
| ) | |
| s.replace( | |
| "**/KeyManagementServiceClient.java", | |
| TEST_IAM_INSERTION_POINT, | |
| "\g<1>\n\n" + TEST_IAM_METHODS | |
| ) | |
| s.replace( | |
| "**/KeyRingName.java", | |
| IMPLEMENTS_RESOURCE_NAME, | |
| EXTENDS_KEY_NAME | |
| ) | |
| s.replace( | |
| "**/CryptoKeyName.java", | |
| IMPLEMENTS_RESOURCE_NAME, | |
| EXTENDS_KEY_NAME) | |
| s.move(library) | |
| s.remove_staging_dirs() | |
| java.common_templates(monorepo=True, excludes=[ | |
| ".github/*", | |
| ".kokoro/*", | |
| "samples/*", | |
| "CODE_OF_CONDUCT.md", | |
| "CONTRIBUTING.md", | |
| "LICENSE", | |
| "SECURITY.md", | |
| "java.header", | |
| "license-checks.xml", | |
| "renovate.json", | |
| ".gitignore" | |
| ]) |