Skip to content

Commit

Permalink
DLP: Added sample for inspect string with custom regex (#3107)
Browse files Browse the repository at this point in the history
* DLP: Added sample for inspect string with custom regex
Added unit test cases for the same

* Resolved PR comments

---------

Co-authored-by: Patti Shin <[email protected]>
Co-authored-by: Karl Weinmeister <[email protected]>
  • Loading branch information
3 people authored Apr 14, 2023
1 parent a2474f6 commit 183a16b
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 0 deletions.
95 changes: 95 additions & 0 deletions dlp/inspectWithCustomRegex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
// Copyright 2023 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
//
// http://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.

'use strict';

// sample-metadata:
// title: Inspects strings
// description: Inspects a string using custom regex pattern.
// usage: node inspectWithCustomRegex.js my-project string customRegex

function main(projectId, string, customRegex) {
// [START dlp_inspect_custom_regex]
// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const projectId = 'my-project';

// The string to inspect
// const string = 'Patients MRN 444-5-22222';

// The regex pattern to match for
// const customRegex = '[1-9]{3}-[1-9]{1}-[1-9]{5}';

async function inspectWithCustomRegex() {
// Construct item to inspect
const item = {
byteItem: {
type: DLP.protos.google.privacy.dlp.v2.ByteContentItem.BytesType
.TEXT_UTF8,
data: Buffer.from(string, 'utf-8'),
},
};

// Construct the custom regex detector.
const customInfoTypes = [
{
infoType: {
name: 'C_MRN',
},
likelihood: DLP.protos.google.privacy.dlp.v2.Likelihood.POSSIBLE,
regex: {
pattern: customRegex,
},
},
];

// Construct request
const request = {
parent: `projects/${projectId}/locations/global`,
inspectConfig: {
customInfoTypes: customInfoTypes,
includeQuote: true,
},
item: item,
};

// Run request
const [response] = await dlp.inspectContent(request);
const findings = response.result.findings;
if (findings.length > 0) {
console.log('Findings: \n');
findings.forEach(finding => {
console.log(`InfoType: ${finding.infoType.name}`);
console.log(`\tQuote: ${finding.quote}`);
console.log(`\tLikelihood: ${finding.likelihood} \n`);
});
} else {
console.log('No findings.');
}
}
inspectWithCustomRegex();
// [END dlp_inspect_custom_regex]
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});

main(...process.argv.slice(2));
34 changes: 34 additions & 0 deletions dlp/system-test/inspect.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -309,4 +309,38 @@ describe('inspect', () => {
assert.notMatch(outputB, /EMAIL_ADDRESS/);
assert.match(outputB, /PHONE_NUMBER/);
});

// dlp_inspect_custom_regex
it('should inspect a string using custom regex', () => {
const string = 'Patients MRN 444-5-22222';
const custRegex = '[1-9]{3}-[1-9]{1}-[1-9]{5}';
const output = execSync(
`node inspectWithCustomRegex.js ${projectId} "${string}" "${custRegex}"`
);
assert.match(output, /InfoType: C_MRN/);
assert.match(output, /Likelihood: POSSIBLE/);
});

it('should handle string with no match', () => {
const string = 'Patients MRN 444-5-22222';
const custRegex = '[1-9]{3}-[1-9]{2}-[1-9]{5}';
const output = execSync(
`node inspectWithCustomRegex.js ${projectId} "${string}" "${custRegex}"`
);
assert.include(output, 'No findings');
});

it('should report any errors while inspecting a string', () => {
let output;
const string = 'Patients MRN 444-5-22222';
const custRegex = '[1-9]{3}-[1-9]{2}-[1-9]{5}';
try {
output = execSync(
`node inspectWithCustomRegex.js BAD_PROJECT_ID "${string}" "${custRegex}"`
);
} catch (err) {
output = err.message;
}
assert.include(output, 'INVALID_ARGUMENT');
});
});

0 comments on commit 183a16b

Please sign in to comment.