diff --git a/dlp/src/inspect_string_without_overlap.php b/dlp/src/inspect_string_without_overlap.php new file mode 100644 index 0000000000..3733491531 --- /dev/null +++ b/dlp/src/inspect_string_without_overlap.php @@ -0,0 +1,126 @@ +setValue($textToInspect); + + // Specify the type of info the inspection will look for. + $domainName = (new InfoType()) + ->setName('DOMAIN_NAME'); + $emailAddress = (new InfoType()) + ->setName('EMAIL_ADDRESS'); + $infoTypes = [$domainName, $emailAddress]; + + // Define a custom info type to exclude email addresses + $customInfoType = (new CustomInfoType()) + ->setInfoType($emailAddress) + ->setExclusionType(ExclusionType::EXCLUSION_TYPE_EXCLUDE); + + // Exclude EMAIL_ADDRESS matches + $matchingType = MatchingType::MATCHING_TYPE_PARTIAL_MATCH; + + $exclusionRule = (new ExclusionRule()) + ->setMatchingType($matchingType) + ->setExcludeInfoTypes((new ExcludeInfoTypes()) + ->setInfoTypes([$customInfoType->getInfoType()]) + ); + + // Construct a ruleset that applies the exclusion rule to the DOMAIN_NAME infotype. + // If a DOMAIN_NAME match is part of an EMAIL_ADDRESS match, the DOMAIN_NAME match will + // be excluded. + $inspectionRuleSet = (new InspectionRuleSet()) + ->setInfoTypes([$domainName]) + ->setRules([ + (new InspectionRule()) + ->setExclusionRule($exclusionRule), + ]); + + // Construct the configuration for the Inspect request, including the ruleset. + $inspectConfig = (new InspectConfig()) + ->setInfoTypes($infoTypes) + ->setCustomInfoTypes([$customInfoType]) + ->setIncludeQuote(true) + ->setRuleSet([$inspectionRuleSet]); + + // Run request + $response = $dlp->inspectContent([ + 'parent' => $parent, + 'inspectConfig' => $inspectConfig, + 'item' => $item + ]); + + // Print the results + $findings = $response->getResult()->getFindings(); + if (count($findings) == 0) { + printf('No findings.' . PHP_EOL); + } else { + printf('Findings:' . PHP_EOL); + foreach ($findings as $finding) { + printf(' Quote: %s' . PHP_EOL, $finding->getQuote()); + printf(' Info type: %s' . PHP_EOL, $finding->getInfoType()->getName()); + printf( + ' Likelihood: %s' . PHP_EOL, + Likelihood::name($finding->getLikelihood())); + } + } +} +// [END dlp_inspect_string_without_overlap] + +// The following 2 lines are only needed to run the samples +require_once __DIR__ . '/../../testing/sample_helpers.php'; +\Google\Cloud\Samples\execute_sample(__FILE__, __NAMESPACE__, $argv); diff --git a/dlp/test/dlpTest.php b/dlp/test/dlpTest.php index 62e1803f1d..9b6f77cf2d 100644 --- a/dlp/test/dlpTest.php +++ b/dlp/test/dlpTest.php @@ -259,6 +259,17 @@ public function testJobs() $this->assertStringContainsString('Successfully deleted job ' . $jobId, $output); } + public function testInspectStringWithoutOverlap() + { + $output = $this->runFunctionSnippet('inspect_string_without_overlap', [ + self::$projectId, + 'example.com is a domain, james@example.org is an email.' + ]); + + $this->assertStringContainsString('Info type: DOMAIN_NAME', $output); + $this->assertStringNotContainsString('Info type: EMAIL_ADDRESS', $output); + } + public function testInspectStringWithExclusionDict() { $output = $this->runFunctionSnippet('inspect_string_with_exclusion_dict', [