diff --git a/modelarmor/composer.json b/modelarmor/composer.json new file mode 100644 index 0000000000..4dd59701a9 --- /dev/null +++ b/modelarmor/composer.json @@ -0,0 +1,11 @@ +{ + "require": { + "google/cloud-dlp": "^2.4", + "google/cloud-modelarmor": "^0.1.0" + }, + "autoload": { + "psr-4": { + "Google\\Cloud\\Samples\\ModelArmor\\": "test" + } + } +} diff --git a/modelarmor/phpunit.xml.dist b/modelarmor/phpunit.xml.dist new file mode 100644 index 0000000000..8e2959e6a6 --- /dev/null +++ b/modelarmor/phpunit.xml.dist @@ -0,0 +1,38 @@ + + + + + + + test + + + + + + + + ./src + + ./vendor + + + + + + + diff --git a/modelarmor/src/create_template_with_advanced_sdp.php b/modelarmor/src/create_template_with_advanced_sdp.php new file mode 100644 index 0000000000..34707a2b40 --- /dev/null +++ b/modelarmor/src/create_template_with_advanced_sdp.php @@ -0,0 +1,97 @@ + 6) { + return printf("Usage: php %s PROJECT_ID LOCATION_ID TEMPLATE_ID [INSPECT_TEMPLATE] [DEIDENTIFY_TEMPLATE]\n", basename(__FILE__)); +} +list($_, $projectId, $locationId, $templateId) = $argv; +$inspectTemplate = $argv[4] ?? ''; +$deidentifyTemplate = $argv[5] ?? ''; + +// [START modelarmor_create_template_with_advanced_sdp] +// Import the ModelArmor client library. +use Google\Cloud\ModelArmor\V1\Client\ModelArmorClient; +use Google\Cloud\ModelArmor\V1\SdpAdvancedConfig; +use Google\Cloud\ModelArmor\V1\Template; +use Google\Cloud\ModelArmor\V1\FilterConfig; +use Google\Cloud\ModelArmor\V1\RaiFilterSettings; +use Google\Cloud\ModelArmor\V1\RaiFilterSettings\RaiFilter; +use Google\Cloud\ModelArmor\V1\CreateTemplateRequest; +use Google\Cloud\ModelArmor\V1\RaiFilterType; +use Google\Cloud\ModelArmor\V1\DetectionConfidenceLevel; +use Google\Cloud\ModelArmor\V1\SdpFilterSettings; + +/** Uncomment and populate these variables in your code */ +// $projectId = "YOUR_GOOGLE_CLOUD_PROJECT"; (e.g. 'my-project'); +// $locationId = 'YOUR_LOCATION_ID'; (e.g. 'my-location'); +// $templateId = 'YOUR_TEMPLATE_ID'; (e.g. 'my-template'); +// $inspectTemplate = 'YOUR_INSPECT_TEMPLATE'; (e.g. 'organizations/{organization}/inspectTemplates/{inspect_template}') +// $deidentifyTemplate = 'YOUR_DEIDENTIFY_TEMPLATE'; (e.g. 'organizations/{organization}/deidentifyTemplates/{deidentify_template}') + +// Specify regional endpoint. +$options = ['apiEndpoint' => "modelarmor.$locationId.rep.googleapis.com"]; + +$client = new ModelArmorClient($options); + +// Build the resource name of the parent location. +$parent = $client->locationName($projectId, $locationId); + +$filters = [ + (new RaiFilter()) + ->setFilterType(RaiFilterType::DANGEROUS) + ->setConfidenceLevel(DetectionConfidenceLevel::HIGH), + (new RaiFilter()) + ->setFilterType(RaiFilterType::HARASSMENT) + ->setConfidenceLevel(DetectionConfidenceLevel::MEDIUM_AND_ABOVE), + (new RaiFilter()) + ->setFilterType(RaiFilterType::HATE_SPEECH) + ->setConfidenceLevel(DetectionConfidenceLevel::HIGH), + (new RaiFilter()) + ->setFilterType(RaiFilterType::SEXUALLY_EXPLICIT) + ->setConfidenceLevel(DetectionConfidenceLevel::HIGH) +]; + +$raiFilterSetting = (new RaiFilterSettings())->setRaiFilters($filters); + +$sdpAdvancedConfig = (new SdpAdvancedConfig()) + ->setInspectTemplate($inspectTemplate) + ->setDeidentifyTemplate($deidentifyTemplate); + +$sdpSettings = (new SdpFilterSettings())->setAdvancedConfig($sdpAdvancedConfig); + +// Define the template configuration with advanced SDP settings. +$templateFilterConfig = (new FilterConfig()) + ->setRaiSettings($raiFilterSetting) + ->setSdpSettings($sdpSettings); + +$template = (new Template())->setFilterConfig($templateFilterConfig); + +$request = (new CreateTemplateRequest()) + ->setParent($parent) + ->setTemplateId($templateId) + ->setTemplate($template); + +$response = $client->createTemplate($request); + +printf('Template created: %s' . PHP_EOL, $response->getName()); +// [END modelarmor_create_template_with_advanced_sdp] diff --git a/modelarmor/src/create_template_with_basic_sdp.php b/modelarmor/src/create_template_with_basic_sdp.php new file mode 100644 index 0000000000..f442a9cc1f --- /dev/null +++ b/modelarmor/src/create_template_with_basic_sdp.php @@ -0,0 +1,93 @@ + "modelarmor.$locationId.rep.googleapis.com"]; + +// Instantiates a client. +$client = new ModelArmorClient($options); + +// Build the resource name of the parent location. +$parent = $client->locationName($projectId, $locationId); + +$raiFilters = [ + (new RaiFilter()) + ->setFilterType(RaiFilterType::DANGEROUS) + ->setConfidenceLevel(DetectionConfidenceLevel::HIGH), + (new RaiFilter()) + ->setFilterType(RaiFilterType::HARASSMENT) + ->setConfidenceLevel(DetectionConfidenceLevel::MEDIUM_AND_ABOVE), + (new RaiFilter()) + ->setFilterType(RaiFilterType::HATE_SPEECH) + ->setConfidenceLevel(DetectionConfidenceLevel::HIGH), + (new RaiFilter()) + ->setFilterType(RaiFilterType::SEXUALLY_EXPLICIT) + ->setConfidenceLevel(DetectionConfidenceLevel::HIGH) +]; + +$raiFilterSetting = (new RaiFilterSettings())->setRaiFilters($raiFilters); + +$sdpBasicConfig = (new SdpBasicConfig())->setFilterEnforcement(SdpBasicConfigEnforcement::ENABLED); + +$sdpSettings = (new SdpFilterSettings())->setBasicConfig($sdpBasicConfig); + +// Define the template configuration with basic SDP settings. +$templateFilterConfig = (new FilterConfig()) + ->setRaiSettings($raiFilterSetting) + ->setSdpSettings($sdpSettings); + +$template = (new Template())->setFilterConfig($templateFilterConfig); + +$request = (new CreateTemplateRequest()) + ->setParent($parent) + ->setTemplateId($templateId) + ->setTemplate($template); + +$response = $client->createTemplate($request); + +printf('Template created: %s' . PHP_EOL, $response->getName()); +// [END modelarmor_create_template_with_basic_sdp] diff --git a/modelarmor/test/BaseTestCase.php b/modelarmor/test/BaseTestCase.php new file mode 100644 index 0000000000..2fd406b058 --- /dev/null +++ b/modelarmor/test/BaseTestCase.php @@ -0,0 +1,75 @@ + 'modelarmor.' . self::$locationId . '.rep.googleapis.com']; + self::$client = new ModelArmorClient($options); + self::$templateId = static::getTemplatePrefix() . uniqid(); + } + + public static function tearDownAfterClass(): void + { + $templateName = self::$client->templateName(self::$projectId, self::$locationId, self::$templateId); + try { + static::customTeardown(); + $request = (new DeleteTemplateRequest())->setName($templateName); + self::$client->deleteTemplate($request); + } catch (GaxApiException $e) { + if ($e->getStatus() != 'NOT_FOUND') { + throw $e; + } + } + self::$client->close(); + } + + abstract protected static function getTemplatePrefix(): string; + protected static function customTeardown(): void + { + } + + protected function runSnippetfile(string $snippetName, array $params = []): string + { + $output = $this->runSnippet($snippetName, $params); + return $output; + } + + protected static function getProjectId() + { + return self::$projectId; + } +} diff --git a/modelarmor/test/createTemplateWithAdvancedSdpTest.php b/modelarmor/test/createTemplateWithAdvancedSdpTest.php new file mode 100644 index 0000000000..7d5548df94 --- /dev/null +++ b/modelarmor/test/createTemplateWithAdvancedSdpTest.php @@ -0,0 +1,177 @@ +runSnippetfile('create_template_with_advanced_sdp', [ + $projectId, + self::$locationId, + self::$templateId, + self::$inspectTemplateName, + self::$deidentifyTemplateName, + ]); + + $expectedTemplateString = 'Template created: projects/' . $projectId . '/locations/' . self::$locationId . '/templates/' . self::$templateId; + $this->assertStringContainsString($expectedTemplateString, $output); + } + + // Helper functions + + /** + * Creates DLP templates for inspect and deidentify configurations. + * + * @param string $projectId Google Cloud Project ID + * @param string $locationId Location ID + * + * @return array + * @throws GaxApiException + */ + public static function create_dlp_templates(string $projectId, string $locationId): array + { + // Specify regional endpoint. + $options = ['apiEndpoint' => "dlp.$locationId.rep.googleapis.com"]; + + // Instantiate a client. + $dlpClient = new DlpServiceClient($options); + + // Generate unique template IDs. + $inspectTemplateId = 'model-armor-inspect-template-' . uniqid(); + $deidentifyTemplateId = 'model-armor-deidentify-template-' . uniqid(); + $parent = $dlpClient->locationName($projectId, $locationId); + + try { + $inspectConfig = (new InspectConfig()) + ->setInfoTypes([ + (new InfoType())->setName('EMAIL_ADDRESS'), + (new InfoType())->setName('PHONE_NUMBER'), + (new InfoType())->setName('US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER'), + ]); + $inspectTemplate = (new InspectTemplate()) + ->setInspectConfig($inspectConfig); + $inspectTemplateRequest = (new CreateInspectTemplateRequest()) + ->setParent($parent) + ->setTemplateId($inspectTemplateId) + ->setInspectTemplate($inspectTemplate); + + // Create inspect template. + $inspectTemplateResponse = $dlpClient->createInspectTemplate($inspectTemplateRequest); + $inspectTemplateName = $inspectTemplateResponse->getName(); + + $replaceValueConfig = (new ReplaceValueConfig())->setNewValue((new Value())->setStringValue('[REDACTED]')); + $primitiveTrasformation = (new PrimitiveTransformation())->setReplaceConfig($replaceValueConfig); + $transformations = (new InfoTypeTransformation()) + ->setInfoTypes([]) + ->setPrimitiveTransformation($primitiveTrasformation); + + $infoTypeTransformations = (new InfoTypeTransformations()) + ->setTransformations([$transformations]); + $deidentifyconfig = (new DeidentifyConfig())->setInfoTypeTransformations($infoTypeTransformations); + $deidentifyTemplate = (new DeidentifyTemplate())->setDeidentifyConfig($deidentifyconfig); + $deidentifyTemplateRequest = (new CreateDeidentifyTemplateRequest()) + ->setParent($parent) + ->setTemplateId($deidentifyTemplateId) + ->setDeidentifyTemplate($deidentifyTemplate); + + // Create deidentify template. + $deidentifyTemplateResponse = $dlpClient->createDeidentifyTemplate($deidentifyTemplateRequest); + $deidentifyTemplateName = $deidentifyTemplateResponse->getName(); + + // Return template names. + return [ + 'inspectTemplateName' => $inspectTemplateName, + 'deidentifyTemplateName' => $deidentifyTemplateName, + ]; + } catch (GaxApiException $e) { + throw $e; + } + } + + /** + * Deletes DLP templates for inspect and deidentify configurations. + * + * @param string $inspectTemplateName + * @param string $deidentifyTemplateName + * @param string $locationId + * + * @throws GaxApiException + */ + public static function delete_dlp_templates(string $inspectTemplateName, string $deidentifyTemplateName, string $locationId): void + { + // Instantiate a client. + $dlpClient = new DlpServiceClient([ + 'apiEndpoint' => "dlp.{$locationId}.rep.googleapis.com", + ]); + + try { + // Delete inspect template. + if ($inspectTemplateName) { + $dlpDltInspectRequest = (new DeleteInspectTemplateRequest())->setName($inspectTemplateName); + $dlpClient->deleteInspectTemplate($dlpDltInspectRequest); + } + + // Delete deidentify template. + if ($deidentifyTemplateName) { + $dlpDltDeIndetifyRequest = (new DeleteDeidentifyTemplateRequest())->setName($deidentifyTemplateName); + $dlpClient->deleteDeidentifyTemplate($dlpDltDeIndetifyRequest); + } + } catch (GaxApiException $e) { + if ($e->getStatus() != 'NOT_FOUND') { + throw $e; + } + } + } +} diff --git a/modelarmor/test/createTemplateWithBasicSdpTest.php b/modelarmor/test/createTemplateWithBasicSdpTest.php new file mode 100644 index 0000000000..88904c7961 --- /dev/null +++ b/modelarmor/test/createTemplateWithBasicSdpTest.php @@ -0,0 +1,41 @@ +runSnippetfile('create_template_with_basic_sdp', [ + $projectId, + self::$locationId, + self::$templateId, + ]); + + $expectedTemplateString = 'Template created: projects/' . $projectId . '/locations/' . self::$locationId . '/templates/' . self::$templateId; + $this->assertStringContainsString($expectedTemplateString, $output); + } +}