").deidentifyText(deidentifyTextRequest);
-
- // Step 5: Print the response
- System.out.println("Deidentify text Response: " + deidentifyTextResponse);
- }
-}
-
-```
-
-## An [example](https://github.com/skyflowapi/skyflow-java/blob/beta-release/25.6.2/samples/src/main/java/com/example/detect/DeidentifyTextExample.java) of deidentify text:
-```java
-import java.util.ArrayList;
-import java.util.List;
-
-import com.skyflow.enums.DetectEntities;
-import com.skyflow.errors.SkyflowException;
-import com.skyflow.vault.detect.DateTransformation;
-import com.skyflow.vault.detect.DeidentifyTextRequest;
-import com.skyflow.vault.detect.DeidentifyTextResponse;
-import com.skyflow.vault.detect.TokenFormat;
-import com.skyflow.vault.detect.Transformations;
-
-/**
- * Skyflow Deidentify Text Example
- *
- * This example demonstrates how to use the Skyflow SDK to deidentify text data
- * across multiple vaults. It includes:
- * 1. Setting up credentials and vault configurations.
- * 2. Creating a Skyflow client with multiple vaults.
- * 3. Performing deidentify of text with various options.
- * 4. Handling responses and errors.
- */
-
-public class DeidentifyTextExample {
- public static void main(String[] args) throws SkyflowException {
-
- // Step 1: Initialise the Skyflow client by configuring the credentials & vault config.
-
- // Step 2: Configuring the different options for deidentify
-
- // Replace with the entity you want to detect
- List detectEntitiesList = new ArrayList<>();
- detectEntitiesList.add(DetectEntities.SSN);
- detectEntitiesList.add(DetectEntities.CREDIT_CARD);
-
- // Replace with the entity you want to detect with vault token
- List vaultTokenList = new ArrayList<>();
- vaultTokenList.add(DetectEntities.SSN);
- vaultTokenList.add(DetectEntities.CREDIT_CARD);
-
- // Configure Token Format
- TokenFormat tokenFormat = TokenFormat.builder()
- .vaultToken(vaultTokenList)
- .build();
-
- // Configure Transformation for deidentified entities
- List detectEntitiesTransformationList = new ArrayList<>();
- detectEntitiesTransformationList.add(DetectEntities.DOB); // Replace with the entity you want to transform
-
- DateTransformation dateTransformation = new DateTransformation(20, 5, detectEntitiesTransformationList);
- Transformations transformations = new Transformations(dateTransformation);
-
- // Step 3: invoking Deidentify text on the vault
- try {
- // Create a deidentify text request for the vault
- DeidentifyTextRequest deidentifyTextRequest = DeidentifyTextRequest.builder()
- .text("My SSN is 123-45-6789 and my card is 4111 1111 1111 1111.") // Replace with your deidentify text
- .entities(detectEntitiesList)
- .tokenFormat(tokenFormat)
- .transformations(transformations)
- .build();
- // Replace `9f27764a10f7946fe56b3258e117` with the acutal vault id
- DeidentifyTextResponse deidentifyTextResponse = skyflowClient.detect("9f27764a10f7946fe56b3258e117").deidentifyText(deidentifyTextRequest);
-
- System.out.println("Deidentify text Response: " + deidentifyTextResponse);
- } catch (SkyflowException e) {
- System.err.println("Error occurred during deidentify: ");
- e.printStackTrace(); // Print the exception for debugging purposes
- }
- }
-}
-```
-
-Sample Response:
-```json
-{
- "processedText": "My SSN is [SSN_IWdexZe] and my card is [CREDIT_CARD_rUzMjdQ].",
- "entities": [
+ "summary": {
+ "total_tokens": 2,
+ "total_detokenized": 2,
+ "total_failed": 0,
+ },
+ "success": [
{
- "token": "SSN_IWdexZe",
- "value": "123-45-6789",
- "textIndex": {
- "start": 10,
- "end": 21
- },
- "processedIndex": {
- "start": 10,
- "end": 23
- },
- "entity": "SSN",
- "scores": {
- "SSN": 0.9384
+ "index": 0,
+ "token": "b8eea77a-47e1-4d67-a560-fd395cabc82f",
+ "value": "xxxx@skyflow.com",
+ "tokenGroupName": "nondeterministic_regex",
+ "metadata": {
+ "skyflowID": "5ddc71a6-3bdb-47e4-9723-259452946349",
+ "tableName": "table1"
}
},
- {
- "token": "CREDIT_CARD_rUzMjdQ",
- "value": "4111 1111 1111 1111",
- "textIndex": {
- "start": 37,
- "end": 56
- },
- "processedIndex": {
- "start": 39,
- "end": 60
- },
- "entity": "CREDIT_CARD",
- "scores": {
- "CREDIT_CARD": 0.9051
- }
- }
- ],
- "wordCount": 9,
- "charCount": 57
-}
-```
-
-## Reidentify Text
-To reidentify text, use the `reidentifyText` method. The `ReidentifyTextRequest` class creates a reidentify text request, which includes the redacted or deidentified text to be reidentified. Additionally, you can provide optional parameters using the ReidentifyTextOptions class to control how specific entities are returned (as redacted, masked, or plain text).
-
-### Construct an reidentify text request
-
-```java
-import com.skyflow.enums.DetectEntities;
-import com.skyflow.vault.detect.ReidentifyTextRequest;
-import com.skyflow.vault.detect.ReidentifyTextResponse;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This example demonstrates how to build a reidentify text request.
- */
-public class ReidentifyTextSchema {
- public static void main(String[] args) {
- // Step 1: Initialise the Skyflow client by configuring the credentials & vault config.
-
- // Step 2: Configuring the different options for reidentify
- List maskedEntity = new ArrayList<>();
- maskedEntity.add(DetectEntities.CREDIT_CARD); // Replace with the entity you want to mask
-
- List plainTextEntity = new ArrayList<>();
- plainTextEntity.add(DetectEntities.SSN); // Replace with the entity you want to keep in plain text
-
- // List redactedEntity = new ArrayList<>();
- // redactedEntity.add(DetectEntities.SSN); // Replace with the entity you want to redact
-
-
- // Step 3: Create a reidentify text request with the configured entities
- ReidentifyTextRequest reidentifyTextRequest = ReidentifyTextRequest.builder()
- .text("My SSN is [SSN_IWdexZe] and my card is [CREDIT_CARD_rUzMjdQ].") // Replace with your deidentify text
- .maskedEntities(maskedEntity)
-// .redactedEntities(redactedEntity)
- .plainTextEntities(plainTextEntity)
- .build();
-
- // Step 4: Invoke reidentify text on the vault
- ReidentifyTextResponse reidentifyTextResponse = skyflowClient.detect("").reidentifyText(reidentifyTextRequest);
- System.out.println("Reidentify text Response: " + reidentifyTextResponse);
- }
-}
-```
-
-## An [example](https://github.com/skyflowapi/skyflow-java/blob/beta-release/25.6.2/samples/src/main/java/com/example/detect/ReidentifyTextExample.java) of Reidentify text
-
-```java
-import com.skyflow.enums.DetectEntities;
-import com.skyflow.errors.SkyflowException;
-import com.skyflow.vault.detect.ReidentifyTextRequest;
-import com.skyflow.vault.detect.ReidentifyTextResponse;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Skyflow Reidentify Text Example
- *
- * This example demonstrates how to use the Skyflow SDK to reidentify text data
- * across multiple vaults. It includes:
- * 1. Setting up credentials and vault configurations.
- * 2. Creating a Skyflow client with multiple vaults.
- * 3. Performing reidentify of text with various options.
- * 4. Handling responses and errors.
- */
-
-public class ReidentifyTextExample {
- public static void main(String[] args) throws SkyflowException {
- // Step 1: Initialise the Skyflow client by configuring the credentials & vault config.
-
- // Step 2: Configuring the different options for reidentify
- List maskedEntity = new ArrayList<>();
- maskedEntity.add(DetectEntities.CREDIT_CARD); // Replace with the entity you want to mask
-
- List plainTextEntity = new ArrayList<>();
- plainTextEntity.add(DetectEntities.SSN); // Replace with the entity you want to keep in plain text
-
- try {
- // Step 3: Create a reidentify text request with the configured options
- ReidentifyTextRequest reidentifyTextRequest = ReidentifyTextRequest.builder()
- .text("My SSN is [SSN_IWdexZe] and my card is [CREDIT_CARD_rUzMjdQ].") // Replace with your deidentify text
- .maskedEntities(maskedEntity)
- .plainTextEntities(plainTextEntity)
- .build();
-
- // Step 4: Invoke Reidentify text on the vault
- // Replace `9f27764a10f7946fe56b3258e117` with the acutal vault id
- ReidentifyTextResponse reidentifyTextResponse = skyflowClient.detect("9f27764a10f7946fe56b3258e117").reidentifyText(reidentifyTextRequest);
-
- // Handle the response from the reidentify text request
- System.out.println("Reidentify text Response: " + reidentifyTextResponse);
- } catch (SkyflowException e) {
- System.err.println("Error occurred during reidentify : ");
- e.printStackTrace();
- }
- }
-}
-```
-
-Sample Response:
-
-```json
-{
- "processedText":"My SSN is 123-45-6789 and my card is XXXXX1111."
-}
-```
-
-## Deidentify file
-To deidentify files, use the `deidentifyFile` method. The `DeidentifyFileRequest` class creates a deidentify file request, which includes the file to be deidentified (such as images, PDFs, audio, documents, spreadsheets, or presentations). Additionally, you can provide optional parameters using the DeidentifyFileOptions class to control how entities are detected and deidentified, as well as how the output is generated for different file types.
-
-### Construct an deidentify file request
-
-```java
-import com.skyflow.config.Credentials;
-import com.skyflow.config.VaultConfig;
-import com.skyflow.enums.Env;
-import com.skyflow.enums.LogLevel;
-import com.skyflow.enums.MaskingMethod;
-import com.skyflow.errors.SkyflowException;
-import com.skyflow.vault.detect.DeidentifyFileRequest;
-import com.skyflow.vault.detect.DeidentifyFileResponse;
-
-import java.io.File;
-
-/**
- * This example demonstrates how to build a deidentify file request.
- */
-
-public class DeidentifyFileSchema {
-
- public static void main(String[] args) {
- // Step 1: Initialise the Skyflow client by configuring the credentials & vault config.
-
- // Step 2: Create a deidentify file request with all options
-
- // Create file object
- File file = new File(""); // Replace with the path to the file you want to deidentify
-
- // Create file input using the file object
- FileInput fileInput = FileInput.builder()
- .file(file)
- // .filePath("") // Alternatively, you can use .filePath()
- .build();
-
- // Output configuration
- String outputDirectory = ""; // Replace with the desired output directory to save the deidentified file
-
- // Entities to detect
- // List detectEntities = new ArrayList<>();
- // detectEntities.add(DetectEntities.IP_ADDRESS); // Replace with the entities you want to detect
-
- // Image-specific options
- // Boolean outputProcessedImage = true; // Include processed image in output
- // Boolean outputOcrText = true; // Include OCR text in output
- MaskingMethod maskingMethod = MaskingMethod.BLACKBOX; // Masking method for images
-
- // PDF-specific options
- // Integer pixelDensity = 15; // Pixel density for PDF processing
- // Integer maxResolution = 2000; // Max resolution for PDF
-
- // Audio-specific options
- // Boolean outputProcessedAudio = true; // Include processed audio
- // DetectOutputTranscriptions outputTanscription = DetectOutputTranscriptions.PLAINTEXT_TRANSCRIPTION; // Transcription type
-
- // Audio bleep configuration
- // AudioBleep audioBleep = AudioBleep.builder()
- // .frequency(5D) // Pitch in Hz
- // .startPadding(7D) // Padding at start (seconds)
- // .stopPadding(8D) // Padding at end (seconds)
- // .build();
-
- Integer waitTime = 20; // Max wait time for response (max 64 seconds)
-
- DeidentifyFileRequest deidentifyFileRequest = DeidentifyFileRequest.builder()
- .file(fileInput)
- .waitTime(waitTime)
- .entities(detectEntities)
- .outputDirectory(outputDirectory)
- .maskingMethod(maskingMethod)
- // .outputProcessedImage(outputProcessedImage)
- // .outputOcrText(outputOcrText)
- // .pixelDensity(pixelDensity)
- // .maxResolution(maxResolution)
- // .outputProcessedAudio(outputProcessedAudio)
- // .outputTranscription(outputTanscription)
- // .bleep(audioBleep)
- .build();
-
-
- DeidentifyFileResponse deidentifyFileResponse = skyflowClient.detect("").deidentifyFile(deidentifyFileRequest);
- System.out.println("Deidentify file response: " + deidentifyFileResponse.toString());
- }
-}
-```
-
-## An [example](https://github.com/skyflowapi/skyflow-java/blob/beta-release/25.6.2/samples/src/main/java/com/example/detect/DeidentifyFileExample.java) of Deidentify file
-
-```java
-import java.io.File;
-
-import com.skyflow.enums.MaskingMethod;
-import com.skyflow.errors.SkyflowException;
-import com.skyflow.vault.detect.DeidentifyFileRequest;
-import com.skyflow.vault.detect.DeidentifyFileResponse;
-
-/**
- * Skyflow Deidentify File Example
- *
- * This example demonstrates how to use the Skyflow SDK to deidentify file
- * It has all available options for deidentifying files.
- * Supported file types: images (jpg, png, etc.), pdf, audio (mp3, wav), documents, spreadsheets, presentations, structured text.
- * It includes:
- * 1. Configure credentials
- * 2. Set up vault configuration
- * 3. Create a deidentify file request with all options
- * 4. Call deidentifyFile to deidentify file.
- * 5. Handle response and errors
- */
-public class DeidentifyFileExample {
-
- public static void main(String[] args) throws SkyflowException {
- // Step 1: Initialise the Skyflow client by configuring the credentials & vault config.
- try {
- // Step 2: Create a deidentify file request with all options
-
-
- // Create file object
- File file = new File("sensitive-folder/personal-info.txt"); // Replace with the path to the file you want to deidentify
-
- // Create file input using the file object
- FileInput fileInput = FileInput.builder()
- .file(file)
- // .filePath("") // Alternatively, you can use .filePath()
- .build();
-
- // Output configuration
- String outputDirectory = "deidenfied-file/"; // Replace with the desired output directory to save the deidentified file
-
- // Entities to detect
- // List detectEntities = new ArrayList<>();
- // detectEntities.add(DetectEntities.IP_ADDRESS); // Replace with the entities you want to detect
-
- // Image-specific options
- // Boolean outputProcessedImage = true; // Include processed image in output
- // Boolean outputOcrText = true; // Include OCR text in output
- MaskingMethod maskingMethod = MaskingMethod.BLACKBOX; // Masking method for images
-
- Integer waitTime = 20; // Max wait time for response (max 64 seconds)
-
- DeidentifyFileRequest deidentifyFileRequest = DeidentifyFileRequest.builder()
- .file(fileInput)
- .waitTime(waitTime)
- .outputDirectory(outputDirectory)
- .maskingMethod(maskingMethod)
- .build();
-
- // Step 3: Invoking deidentifyFile
- // Replace `9f27764a10f7946fe56b3258e117` with the acutal vault id
- DeidentifyFileResponse deidentifyFileResponse = skyflowClient.detect("9f27764a10f7946fe56b3258e117").deidentifyFile(deidentifyFileRequest);
- System.out.println("Deidentify file response: " + deidentifyFileResponse.toString());
- } catch (SkyflowException e) {
- System.err.println("Error occurred during deidentify file: ");
- e.printStackTrace();
- }
- }
-}
-
-```
-
-Sample response:
-
-```json
-{
- "file": {
- "name": "deidentified.txt",
- "size": 33,
- "type": "",
- "lastModified": 1751355183039
- },
- "fileBase64": "bXkgY2FyZCBudW1iZXIgaXMgW0NSRURJVF",
- "type": "redacted_file",
- "extension": "txt",
- "wordCount": 11,
- "charCount": 61,
- "sizeInKb": 0,
- "entities": [
- {
- "file": "bmFtZTogW05BTUVfMV0gCm==",
- "type": "entities",
- "extension": "json"
- }
],
- "runId": "undefined",
- "status": "success"
-}
-
-```
-
-**Supported file types:**
-- Documents: `doc`, `docx`, `pdf`
-- PDFs: `pdf`
-- Images: `bmp`, `jpeg`, `jpg`, `png`, `tif`, `tiff`
-- Structured text: `json`, `xml`
-- Spreadsheets: `csv`, `xls`, `xlsx`
-- Presentations: `ppt`, `pptx`
-- Audio: `mp3`, `wav`
-
-**Note:**
-- Transformations cannot be applied to Documents, Images, or PDFs file formats.
-
-- The `waitTime` option must be ≤ 64 seconds; otherwise, an error is thrown.
-
-- If the API takes more than 64 seconds to process the file, it will return only the run ID in the response.
-
-Sample response (when the API takes more than 64 seconds):
-```json
-{
- "file": null,
- "fileBase64": null,
- "type": null,
- "extension": null,
- "wordCount": null,
- "charCount": null,
- "sizeInKb": null,
- "durationInSeconds": null,
- "pageCount": null,
- "slideCount": null,
- "entities": null,
- "runId": "1273a8c6-c498-4293-a9d6-389864cd3a44",
- "status": "IN_PROGRESS",
- "errors": null
-}
-```
-
-## Get run:
-To retrieve the results of a previously started file `deidentification operation`, use the `getDetectRun` method.
-The `GetDetectRunRequest` class is initialized with the `runId` returned from a prior deidentifyFile call.
-This method allows you to fetch the final results of the file processing operation once they are available.
-
-### Construct an get run request
-
-```java
-import com.skyflow.errors.SkyflowException;
-import com.skyflow.vault.detect.DeidentifyFileResponse;
-import com.skyflow.vault.detect.GetDetectRunRequest;
-
-/**
- * Skyflow Get Detect Run Example
- */
-
-public class GetDetectRunSchema {
-
- public static void main(String[] args) {
- try {
- // Step 1: Initialise the Skyflow client by configuring the credentials & vault config.
-
- // Step 2: Create a get detect run request
- GetDetectRunRequest getDetectRunRequest = GetDetectRunRequest.builder()
- .runId("") // Replace with the runId from deidentifyFile call
- .build();
-
- // Step 3: Call getDetectRun to poll for file processing results
- // Replace with your actual vault ID
- DeidentifyFileResponse deidentifyFileResponse = skyflowClient.detect("").getDetectRun(getDetectRunRequest);
- System.out.println("Get Detect Run Response: " + deidentifyFileResponse);
- } catch (SkyflowException e) {
- System.err.println("Error occurred during get detect run: ");
- e.printStackTrace();
- }
- }
-}
-
-```
-
-## An [example](https://github.com/skyflowapi/skyflow-java/blob/beta-release/25.6.2/samples/src/main/java/com/example/detect/GetDetectRunExample.java) of get run
-```java
-import com.skyflow.config.Credentials;
-import com.skyflow.config.VaultConfig;
-import com.skyflow.enums.Env;
-import com.skyflow.enums.LogLevel;
-import com.skyflow.errors.SkyflowException;
-import com.skyflow.vault.detect.DeidentifyFileResponse;
-import com.skyflow.vault.detect.GetDetectRunRequest;
-
-/**
- * Skyflow Get Detect Run Example
- *
- * This example demonstrates how to:
- * 1. Configure credentials
- * 2. Set up vault configuration
- * 3. Create a get detect run request
- * 4. Call getDetectRun to poll for file processing results
- * 5. Handle response and errors
- */
-public class GetDetectRunExample {
- public static void main(String[] args) throws SkyflowException {
- // Step 1: Initialise the Skyflow client by configuring the credentials & vault config.
- try {
-
- // Step 2: Create a get detect run request
- GetDetectRunRequest getDetectRunRequest = GetDetectRunRequest.builder()
- .runId("e0038196-4a20-422b-bad7-e0477117f9bb") // Replace with the runId from deidentifyFile call
- .build();
-
- // Step 3: Call getDetectRun to poll for file processing results
- // Replace `9f27764a10f7946fe56b3258e117` with the acutal vault id
- DeidentifyFileResponse deidentifyFileResponse = skyflowClient.detect("9f27764a10f7946fe56b3258e117").getDetectRun(getDetectRunRequest);
- System.out.println("Get Detect Run Response: " + deidentifyFileResponse);
- } catch (SkyflowException e) {
- System.err.println("Error occurred during get detect run: ");
- e.printStackTrace();
- }
- }
-}
-```
-
-Sample Response:
-
-```json
-{
- "file": "bmFtZTogW05BTET0JfMV0K",
- "type": "redacted_file",
- "extension": "txt",
- "wordCount": 11,
- "charCount": 61,
- "sizeInKb": 0.0,
- "entities": [
+ "errors": [
{
- "file": "gW05BTUVfMV0gCmNhcmQ0K",
- "type": "entities",
- "extension": "json"
- }
- ],
- "runId": "e0038196-4a20-422b-bad7-e0477117f9bb",
- "status": "success"
-}
-
-```
-
-# Connections
-
-Skyflow Connections is a gateway service that uses tokenization to securely send and receive data between your systems and first- or third-party services. The [connections](https://github.com/skyflowapi/skyflow-java/tree/main/src/main/java/com/skyflow/vault/connection) module invokes both inbound and/or outbound connections.
-
-- **Inbound connections**: Act as intermediaries between your client and server, tokenizing sensitive data before it reaches your backend, ensuring downstream services handle only tokenized data.
-- **Outbound connections**: Enable secure extraction of data from the vault and transfer it to third-party services via your backend server, such as processing checkout or card issuance flows.
-
-## Invoke a connection
-
-To invoke a connection, use the `invoke` method of the Skyflow client.
-
-### Construct an invoke connection request
-
-```java
-import com.skyflow.enums.RequestMethod;
-import com.skyflow.errors.SkyflowException;
-import com.skyflow.vault.connection.InvokeConnectionRequest;
-import com.skyflow.vault.connection.InvokeConnectionResponse;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This example demonstrates how to invoke an external connection using the Skyflow SDK, along with corresponding InvokeConnectionRequest schema.
- *
- */
-public class InvokeConnectionSchema {
- public static void main(String[] args) {
- try {
- // Initialize Skyflow client
- // Step 1: Define the request body parameters
- // These are the values you want to send in the request body
- Map requestBody = new HashMap<>();
- requestBody.put("", "");
- requestBody.put("", "");
-
- // Step 2: Define the request headers
- // Add any required headers that need to be sent with the request
- Map requestHeaders = new HashMap<>();
- requestHeaders.put("", "");
- requestHeaders.put("", "");
-
- // Step 3: Define the path parameters
- // Path parameters are part of the URL and typically used in RESTful APIs
- Map pathParams = new HashMap<>();
- pathParams.put("", "");
- pathParams.put("", "");
-
- // Step 4: Define the query parameters
- // Query parameters are included in the URL after a '?' and are used to filter or modify the response
- Map queryParams = new HashMap<>();
- queryParams.put("", "");
- queryParams.put("", "");
-
- // Step 5: Build the InvokeConnectionRequest using the provided parameters
- InvokeConnectionRequest invokeConnectionRequest = InvokeConnectionRequest.builder()
- .method(RequestMethod.POST) // The HTTP method to use for the request (POST in this case)
- .requestBody(requestBody) // The body of the request
- .requestHeaders(requestHeaders) // The headers to include in the request
- .pathParams(pathParams) // The path parameters for the URL
- .queryParams(queryParams) // The query parameters to append to the URL
- .build();
-
- // Step 6: Invoke the connection using the request
- // Replace "" with the actual connection ID you are using
- InvokeConnectionResponse invokeConnectionResponse = skyflowClient.connection("").invoke(invokeConnectionRequest);
-
- // Step 7: Print the response from the invoked connection
- // This response contains the result of the request sent to the external system
- System.out.println(invokeConnectionResponse);
-
- } catch (SkyflowException e) {
- // Step 8: Handle any exceptions that occur during the connection invocation
- System.out.println("Error occurred: ");
- e.printStackTrace(); // Print the exception stack trace for debugging
- }
- }
-}
-```
-
-`method` supports the following methods:
-
-- GET
-- POST
-- PUT
-- PATCH
-- DELETE
-
-**pathParams, queryParams, requestHeader, requestBody** are the JSON objects represented as HashMaps, that will be sent through the connection integration url.
-
-### An [example](https://github.com/skyflowapi/skyflow-java/blob/main/samples/src/main/java/com/example/connection/InvokeConnectionExample.java) of invokeConnection
-
-```java
-import com.skyflow.Skyflow;
-import com.skyflow.config.ConnectionConfig;
-import com.skyflow.config.Credentials;
-import com.skyflow.enums.LogLevel;
-import com.skyflow.enums.RequestMethod;
-import com.skyflow.errors.SkyflowException;
-import com.skyflow.vault.connection.InvokeConnectionRequest;
-import com.skyflow.vault.connection.InvokeConnectionResponse;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This example demonstrates how to invoke an external connection using the Skyflow SDK.
- * It configures a connection, sets up the request, and sends a POST request to the external service.
- *
- * 1. Initialize Skyflow client with connection details.
- * 2. Define the request body, headers, and method.
- * 3. Execute the connection request.
- * 4. Print the response from the invoked connection.
- */
-public class InvokeConnectionExample {
- public static void main(String[] args) {
- try {
- // Initialize Skyflow client
- // Step 1: Set up credentials and connection configuration
- // Load credentials from a JSON file (you need to provide the correct path)
- Credentials credentials = new Credentials();
- credentials.setPath("/path/to/credentials.json");
-
- // Define the connection configuration (URL and credentials)
- ConnectionConfig connectionConfig = new ConnectionConfig();
- connectionConfig.setConnectionId(""); // Replace with actual connection ID
- connectionConfig.setConnectionUrl("https://connection.url.com"); // Replace with actual connection URL
- connectionConfig.setCredentials(credentials); // Set credentials for the connection
-
- // Initialize the Skyflow client with the connection configuration
- Skyflow skyflowClient = Skyflow.builder()
- .setLogLevel(LogLevel.DEBUG) // Set log level to DEBUG for detailed logs
- .addConnectionConfig(connectionConfig) // Add connection configuration to client
- .build(); // Build the Skyflow client instance
-
- // Step 2: Define the request body and headers
- // Map for request body parameters
- Map requestBody = new HashMap<>();
- requestBody.put("card_number", "4337-1696-5866-0865"); // Example card number
- requestBody.put("ssn", "524-41-4248"); // Example SSN
-
- // Map for request headers
- Map requestHeaders = new HashMap<>();
- requestHeaders.put("Content-Type", "application/json"); // Set content type for the request
-
- // Step 3: Build the InvokeConnectionRequest with required parameters
- // Set HTTP method to POST, include the request body and headers
- InvokeConnectionRequest invokeConnectionRequest = InvokeConnectionRequest.builder()
- .method(RequestMethod.POST) // HTTP POST method
- .requestBody(requestBody) // Add request body parameters
- .requestHeaders(requestHeaders) // Add headers
- .build(); // Build the request
-
- // Step 4: Invoke the connection and capture the response
- // Replace "" with the actual connection ID
- InvokeConnectionResponse invokeConnectionResponse = skyflowClient.connection("").invoke(invokeConnectionRequest);
-
- // Step 5: Print the response from the connection invocation
- System.out.println(invokeConnectionResponse); // Print the response to the console
-
- } catch (SkyflowException e) {
- // Step 6: Handle any exceptions that occur during the connection invocation
- System.out.println("Error occurred: ");
- e.printStackTrace(); // Print the exception stack trace for debugging
- }
+ "index": 1,
+ "code": 404,
+ "error": "Detokenize failed. Token 6ffb412b-a79d is invalid. Specify a valid token.",
}
-}
-```
-
-Sample response:
-
-```json
-{
- "data": {
- "card_number": "4337-1696-5866-0865",
- "ssn": "524-41-4248"
- },
- "metadata": {
- "requestId": "4a3453b5-7aa4-4373-98d7-cf102b1f6f97"
- }
+ ]
}
```
@@ -2606,11 +688,11 @@ This section covers methods for generating and managing tokens to authenticate A
## Generate a bearer token
-The [Service Account](https://github.com/skyflowapi/skyflow-java/tree/v2/src/main/java/com/skyflow/serviceaccount/util) Java module generates service account tokens using a service account credentials file, which is provided when a service account is created. The tokens generated by this module are valid for 60 minutes and can be used to make API calls to the [Data](https://docs.skyflow.com/record/) and [Management](https://docs.skyflow.com/management/) APIs, depending on the permissions assigned to the service account.
+The [Service Account](https://github.com/skyflowapi/skyflow-java/tree/v3/common/src/main/java/com/skyflow/serviceaccount/util) Java module generates service account tokens using a service account credentials file, which is provided when a service account is created. The tokens generated by this module are valid for 60 minutes and can be used to make API calls to the [Data](https://docs.skyflow.com/api/data/) and [Management](https://docs.skyflow.com/management/) APIs, depending on the permissions assigned to the service account.
The `BearerToken` utility class generates bearer tokens using a credentials JSON file. Alternatively, you can pass the credentials as a string.
-[Example](https://github.com/skyflowapi/skyflow-java/blob/main/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java):
+Example:
```java
/**
@@ -2679,7 +761,7 @@ public class BearerTokenGenerationExample {
A service account with the `context_id` identifier generates bearer tokens containing context information, represented as a JWT claim in a Skyflow-generated bearer token. Tokens generated from such service accounts include a `context_identifier` claim, are valid for 60 minutes, and can be used to make API calls to the Data and Management APIs, depending on the service account's permissions.
-[Example](https://github.com/skyflowapi/skyflow-java/blob/main/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java):
+Example:
```java
import com.skyflow.errors.SkyflowException;
@@ -2747,7 +829,7 @@ public class BearerTokenGenerationWithContextExample {
A service account with multiple roles can generate bearer tokens with access limited to a specific role by specifying the appropriate `roleID`. This can be used to limit access to specific roles for services with multiple responsibilities, such as segregating access for billing and analytics. The generated bearer tokens are valid for 60 minutes and can only execute operations permitted by the permissions associated with the designated role.
-[Example](https://github.com/skyflowapi/skyflow-java/blob/main/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java):
+Example:
```java
import com.skyflow.errors.SkyflowException;
@@ -2798,7 +880,6 @@ Notes:
- You can pass either the file path of a service account key credentials file or the service account key credentials as a string to the `setCredentials` method of the `BearerTokenBuilder` class.
- If both a file path and a string are provided, the last method used takes precedence.
-- To generate multiple bearer tokens concurrently using threads, refer to the following [example](https://github.com/skyflowapi/skyflow-java/blob/main/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java).
## Generate Signed Data Tokens
@@ -2807,7 +888,7 @@ with the private key of the service account credentials, which adds an additiona
be detokenized by passing the signed data token and a bearer token generated from service account credentials. The
service account must have appropriate permissions and context to detokenize the signed data tokens.
-[Example](https://github.com/skyflowapi/skyflow-java/blob/main/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java):
+Example:
```java
import com.skyflow.errors.SkyflowException;
@@ -2887,7 +968,7 @@ message: Authentication failed. Bearer token is expired. Use a valid bearer toke
If you encounter this kind of error, retry the request. During the retry, the SDK detects that the previous bearer token has expired and generates a new one for the current and subsequent requests.
-#### [Example](https://github.com/skyflowapi/skyflow-java/blob/v2/samples/src/main/java/com/example/serviceaccount/BearerTokenExpiryExample.java):
+#### Example:
```java
package com.example.serviceaccount;
@@ -2965,8 +1046,6 @@ public class DetokenizeExample {
// Building a detokenization request with the token list and configuration
DetokenizeRequest detokenizeRequest = DetokenizeRequest.builder()
.tokens(tokenList) // Adding tokens to the request
- .continueOnError(false) // Stop on error
- .redactionType(RedactionType.PLAIN_TEXT) // Redaction type (e.g., PLAIN_TEXT)
.build();
// Sending the detokenization request and receiving the response
@@ -3058,4 +1137,4 @@ public class ChangeLogLevel {
# Reporting a Vulnerability
-If you discover a potential security issue in this project, please reach out to us at **security@skyflow.com**. Please do not create public GitHub issues or Pull Requests, as malicious actors could potentially view them.
+If you discover a potential security issue in this project, please reach out to us at **security@skyflow.com**. Please do not create public GitHub issues or Pull Requests, as malicious actors could potentially view them.
\ No newline at end of file
diff --git a/Rule/gitleaks.toml b/Rule/gitleaks.toml
new file mode 100644
index 00000000..e127f827
--- /dev/null
+++ b/Rule/gitleaks.toml
@@ -0,0 +1,3137 @@
+# This file has been auto-generated. Do not edit manually.
+# If you would like to contribute new rules, please use
+# cmd/generate/config/main.go and follow the contributing guidelines
+# at https://github.com/gitleaks/gitleaks/blob/master/CONTRIBUTING.md
+#
+# How the hell does secret scanning work? Read this:
+# https://lookingatcomputer.substack.com/p/regex-is-almost-all-you-need
+#
+# This is the default gitleaks configuration file.
+# Rules and allowlists are defined within this file.
+# Rules instruct gitleaks on what should be considered a secret.
+# Allowlists instruct gitleaks on what is allowed, i.e. not a secret.
+
+title = "gitleaks config"
+
+[allowlist]
+description = "global allow lists"
+regexes = [
+ '''(?i)^true|false|null$''',
+ '''^(?i:a+|b+|c+|d+|e+|f+|g+|h+|i+|j+|k+|l+|m+|n+|o+|p+|q+|r+|s+|t+|u+|v+|w+|x+|y+|z+|\*+|\.+)$''',
+ '''^\$(?:\d+|{\d+})$''',
+ '''^\$(?:[A-Z_]+|[a-z_]+)$''',
+ '''^\${(?:[A-Z_]+|[a-z_]+)}$''',
+ '''^\{\{[ \t]*[\w ().|]+[ \t]*}}$''',
+ '''^\$\{\{[ \t]*(?:(?:env|github|secrets|vars)(?:\.[A-Za-z]\w+)+[\w "'&./=|]*)[ \t]*}}$''',
+ '''^%(?:[A-Z_]+|[a-z_]+)%$''',
+ '''^%[+\-# 0]?[bcdeEfFgGoOpqstTUvxX]$''',
+ '''^\{\d{0,2}}$''',
+ '''^@(?:[A-Z_]+|[a-z_]+)@$''',
+ '''^/Users/(?i)[a-z0-9]+/[\w .-/]+$''',
+ '''^/(?:bin|etc|home|opt|tmp|usr|var)/[\w ./-]+$''',
+]
+paths = [
+ '''gitleaks\.toml''',
+ '''(?i)\.(?:bmp|gif|jpe?g|png|svg|tiff?)$''',
+ '''(?i)\.(?:eot|[ot]tf|woff2?)$''',
+ '''(?i)\.(?:docx?|xlsx?|pdf|bin|socket|vsidx|v2|suo|wsuo|.dll|pdb|exe|gltf|zip)$''',
+ '''go\.(?:mod|sum|work(?:\.sum)?)$''',
+ '''(?:^|/)vendor/modules\.txt$''',
+ '''(?:^|/)vendor/(?:github\.com|golang\.org/x|google\.golang\.org|gopkg\.in|istio\.io|k8s\.io|sigs\.k8s\.io)(?:/.*)?$''',
+ '''(?:^|/)gradlew(?:\.bat)?$''',
+ '''(?:^|/)gradle\.lockfile$''',
+ '''(?:^|/)mvnw(?:\.cmd)?$''',
+ '''(?:^|/)\.mvn/wrapper/MavenWrapperDownloader\.java$''',
+ '''(?:^|/)node_modules(?:/.*)?$''',
+ '''(?:^|/)(?:deno\.lock|npm-shrinkwrap\.json|package-lock\.json|pnpm-lock\.yaml|yarn\.lock)$''',
+ '''(?:^|/)bower_components(?:/.*)?$''',
+ '''(?:^|/)(?:angular|bootstrap|jquery(?:-?ui)?|plotly|swagger-?ui)[a-zA-Z0-9.-]*(?:\.min)?\.js(?:\.map)?$''',
+ '''(?:^|/)javascript\.json$''',
+ '''(?:^|/)(?:Pipfile|poetry)\.lock$''',
+ '''(?i)(?:^|/)(?:v?env|virtualenv)/lib(?:64)?(?:/.*)?$''',
+ '''(?i)(?:^|/)(?:lib(?:64)?/python[23](?:\.\d{1,2})+|python/[23](?:\.\d{1,2})+/lib(?:64)?)(?:/.*)?$''',
+ '''(?i)(?:^|/)[a-z0-9_.]+-[0-9.]+\.dist-info(?:/.+)?$''',
+ '''(?:^|/)vendor/(?:bundle|ruby)(?:/.*?)?$''',
+ '''\.gem$''',
+ '''verification-metadata\.xml''',
+ '''Database.refactorlog''',
+]
+stopwords = [
+ "abcdefghijklmnopqrstuvwxyz",
+ "014df517-39d1-4453-b7b3-9930c563627c",
+]
+
+[[rules]]
+id = "1password-service-account-token"
+description = "Uncovered a possible 1Password service account token, potentially compromising access to secrets in vaults."
+regex = '''ops_eyJ[a-zA-Z0-9+/]{250,}={0,3}'''
+entropy = 4
+keywords = ["ops_"]
+
+[[rules]]
+id = "adafruit-api-key"
+description = "Identified a potential Adafruit API Key, which could lead to unauthorized access to Adafruit services and sensitive data exposure."
+regex = '''(?i)[\w.-]{0,50}?(?:adafruit)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9_-]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["adafruit"]
+
+[[rules]]
+id = "adobe-client-id"
+description = "Detected a pattern that resembles an Adobe OAuth Web Client ID, posing a risk of compromised Adobe integrations and data breaches."
+regex = '''(?i)[\w.-]{0,50}?(?:adobe)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-f0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["adobe"]
+
+[[rules]]
+id = "adobe-client-secret"
+description = "Discovered a potential Adobe Client Secret, which, if exposed, could allow unauthorized Adobe service access and data manipulation."
+regex = '''\b(p8e-(?i)[a-z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["p8e-"]
+
+[[rules]]
+id = "age-secret-key"
+description = "Discovered a potential Age encryption tool secret key, risking data decryption and unauthorized access to sensitive information."
+regex = '''AGE-SECRET-KEY-1[QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7L]{58}'''
+keywords = ["age-secret-key-1"]
+
+[[rules]]
+id = "airtable-api-key"
+description = "Uncovered a possible Airtable API Key, potentially compromising database access and leading to data leakage or alteration."
+regex = '''(?i)[\w.-]{0,50}?(?:airtable)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{17})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["airtable"]
+
+[[rules]]
+id = "algolia-api-key"
+description = "Identified an Algolia API Key, which could result in unauthorized search operations and data exposure on Algolia-managed platforms."
+regex = '''(?i)[\w.-]{0,50}?(?:algolia)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["algolia"]
+
+[[rules]]
+id = "alibaba-access-key-id"
+description = "Detected an Alibaba Cloud AccessKey ID, posing a risk of unauthorized cloud resource access and potential data compromise."
+regex = '''\b(LTAI(?i)[a-z0-9]{20})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["ltai"]
+
+[[rules]]
+id = "alibaba-secret-key"
+description = "Discovered a potential Alibaba Cloud Secret Key, potentially allowing unauthorized operations and data access within Alibaba Cloud."
+regex = '''(?i)[\w.-]{0,50}?(?:alibaba)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{30})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["alibaba"]
+
+[[rules]]
+id = "asana-client-id"
+description = "Discovered a potential Asana Client ID, risking unauthorized access to Asana projects and sensitive task information."
+regex = '''(?i)[\w.-]{0,50}?(?:asana)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([0-9]{16})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["asana"]
+
+[[rules]]
+id = "asana-client-secret"
+description = "Identified an Asana Client Secret, which could lead to compromised project management integrity and unauthorized access."
+regex = '''(?i)[\w.-]{0,50}?(?:asana)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["asana"]
+
+[[rules]]
+id = "atlassian-api-token"
+description = "Detected an Atlassian API token, posing a threat to project management and collaboration tool security and data confidentiality."
+regex = '''[\w.-]{0,50}?(?i:[\w.-]{0,50}?(?:atlassian|confluence|jira)(?:[ \t\w.-]{0,20})[\s'"]{0,3})(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-zA-Z0-9]{24})(?:[\x60'"\s;]|\\[nr]|$)|\b(ATATT3[A-Za-z0-9_\-=]{186})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3.5
+keywords = [
+ "atlassian",
+ "confluence",
+ "jira",
+ "atatt3",
+]
+
+[[rules]]
+id = "authress-service-client-access-key"
+description = "Uncovered a possible Authress Service Client Access Key, which may compromise access control services and sensitive data."
+regex = '''\b((?:sc|ext|scauth|authress)_(?i)[a-z0-9]{5,30}\.[a-z0-9]{4,6}\.(?-i:acc)[_-][a-z0-9-]{10,32}\.[a-z0-9+/_=-]{30,120})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = [
+ "sc_",
+ "ext_",
+ "scauth_",
+ "authress_",
+]
+
+[[rules]]
+id = "aws-access-token"
+description = "Identified a pattern that may indicate AWS credentials, risking unauthorized cloud resource access and data breaches on AWS platforms."
+regex = '''\b((?:A3T[A-Z0-9]|AKIA|ASIA|ABIA|ACCA)[A-Z0-9]{16})\b'''
+entropy = 3
+keywords = [
+ "a3t",
+ "akia",
+ "asia",
+ "abia",
+ "acca",
+]
+[[rules.allowlists]]
+regexes = [
+ '''.+EXAMPLE$''',
+]
+
+[[rules]]
+id = "azure-ad-client-secret"
+description = "Azure AD Client Secret"
+regex = '''(?:^|[\\'"\x60\s>=:(,)])([a-zA-Z0-9_~.]{3}\dQ~[a-zA-Z0-9_~.-]{31,34})(?:$|[\\'"\x60\s<),])'''
+entropy = 3
+keywords = ["q~"]
+
+[[rules]]
+id = "beamer-api-token"
+description = "Detected a Beamer API token, potentially compromising content management and exposing sensitive notifications and updates."
+regex = '''(?i)[\w.-]{0,50}?(?:beamer)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}(b_[a-z0-9=_\-]{44})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["beamer"]
+
+[[rules]]
+id = "bitbucket-client-id"
+description = "Discovered a potential Bitbucket Client ID, risking unauthorized repository access and potential codebase exposure."
+regex = '''(?i)[\w.-]{0,50}?(?:bitbucket)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["bitbucket"]
+
+[[rules]]
+id = "bitbucket-client-secret"
+description = "Discovered a potential Bitbucket Client Secret, posing a risk of compromised code repositories and unauthorized access."
+regex = '''(?i)[\w.-]{0,50}?(?:bitbucket)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9=_\-]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["bitbucket"]
+
+[[rules]]
+id = "bittrex-access-key"
+description = "Identified a Bittrex Access Key, which could lead to unauthorized access to cryptocurrency trading accounts and financial loss."
+regex = '''(?i)[\w.-]{0,50}?(?:bittrex)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["bittrex"]
+
+[[rules]]
+id = "bittrex-secret-key"
+description = "Detected a Bittrex Secret Key, potentially compromising cryptocurrency transactions and financial security."
+regex = '''(?i)[\w.-]{0,50}?(?:bittrex)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["bittrex"]
+
+[[rules]]
+id = "cisco-meraki-api-key"
+description = "Cisco Meraki is a cloud-managed IT solution that provides networking, security, and device management through an easy-to-use interface."
+regex = '''[\w.-]{0,50}?(?i:[\w.-]{0,50}?(?:(?-i:[Mm]eraki|MERAKI))(?:[ \t\w.-]{0,20})[\s'"]{0,3})(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([0-9a-f]{40})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["meraki"]
+
+[[rules]]
+id = "clojars-api-token"
+description = "Uncovered a possible Clojars API token, risking unauthorized access to Clojure libraries and potential code manipulation."
+regex = '''(?i)CLOJARS_[a-z0-9]{60}'''
+entropy = 2
+keywords = ["clojars_"]
+
+[[rules]]
+id = "cloudflare-api-key"
+description = "Detected a Cloudflare API Key, potentially compromising cloud application deployments and operational security."
+regex = '''(?i)[\w.-]{0,50}?(?:cloudflare)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9_-]{40})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["cloudflare"]
+
+[[rules]]
+id = "cloudflare-global-api-key"
+description = "Detected a Cloudflare Global API Key, potentially compromising cloud application deployments and operational security."
+regex = '''(?i)[\w.-]{0,50}?(?:cloudflare)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-f0-9]{37})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["cloudflare"]
+
+[[rules]]
+id = "cloudflare-origin-ca-key"
+description = "Detected a Cloudflare Origin CA Key, potentially compromising cloud application deployments and operational security."
+regex = '''\b(v1\.0-[a-f0-9]{24}-[a-f0-9]{146})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = [
+ "cloudflare",
+ "v1.0-",
+]
+
+[[rules]]
+id = "codecov-access-token"
+description = "Found a pattern resembling a Codecov Access Token, posing a risk of unauthorized access to code coverage reports and sensitive data."
+regex = '''(?i)[\w.-]{0,50}?(?:codecov)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["codecov"]
+
+[[rules]]
+id = "cohere-api-token"
+description = "Identified a Cohere Token, posing a risk of unauthorized access to AI services and data manipulation."
+regex = '''[\w.-]{0,50}?(?i:[\w.-]{0,50}?(?:cohere|CO_API_KEY)(?:[ \t\w.-]{0,20})[\s'"]{0,3})(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-zA-Z0-9]{40})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 4
+keywords = [
+ "cohere",
+ "co_api_key",
+]
+
+[[rules]]
+id = "coinbase-access-token"
+description = "Detected a Coinbase Access Token, posing a risk of unauthorized access to cryptocurrency accounts and financial transactions."
+regex = '''(?i)[\w.-]{0,50}?(?:coinbase)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9_-]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["coinbase"]
+
+[[rules]]
+id = "confluent-access-token"
+description = "Identified a Confluent Access Token, which could compromise access to streaming data platforms and sensitive data flow."
+regex = '''(?i)[\w.-]{0,50}?(?:confluent)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{16})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["confluent"]
+
+[[rules]]
+id = "confluent-secret-key"
+description = "Found a Confluent Secret Key, potentially risking unauthorized operations and data access within Confluent services."
+regex = '''(?i)[\w.-]{0,50}?(?:confluent)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["confluent"]
+
+[[rules]]
+id = "contentful-delivery-api-token"
+description = "Discovered a Contentful delivery API token, posing a risk to content management systems and data integrity."
+regex = '''(?i)[\w.-]{0,50}?(?:contentful)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9=_\-]{43})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["contentful"]
+
+[[rules]]
+id = "curl-auth-header"
+description = "Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource."
+regex = '''\bcurl\b(?:.*?|.*?(?:[\r\n]{1,2}.*?){1,5})[ \t\n\r](?:-H|--header)(?:=|[ \t]{0,5})(?:"(?i)(?:Authorization:[ \t]{0,5}(?:Basic[ \t]([a-z0-9+/]{8,}={0,3})|(?:Bearer|(?:Api-)?Token)[ \t]([\w=~@.+/-]{8,})|([\w=~@.+/-]{8,}))|(?:(?:X-(?:[a-z]+-)?)?(?:Api-?)?(?:Key|Token)):[ \t]{0,5}([\w=~@.+/-]{8,}))"|'(?i)(?:Authorization:[ \t]{0,5}(?:Basic[ \t]([a-z0-9+/]{8,}={0,3})|(?:Bearer|(?:Api-)?Token)[ \t]([\w=~@.+/-]{8,})|([\w=~@.+/-]{8,}))|(?:(?:X-(?:[a-z]+-)?)?(?:Api-?)?(?:Key|Token)):[ \t]{0,5}([\w=~@.+/-]{8,}))')(?:\B|\s|\z)'''
+entropy = 2.75
+keywords = ["curl"]
+
+[[rules]]
+id = "curl-auth-user"
+description = "Discovered a potential basic authorization token provided in a curl command, which could compromise the curl accessed resource."
+regex = '''\bcurl\b(?:.*|.*(?:[\r\n]{1,2}.*){1,5})[ \t\n\r](?:-u|--user)(?:=|[ \t]{0,5})("(:[^"]{3,}|[^:"]{3,}:|[^:"]{3,}:[^"]{3,})"|'([^:']{3,}:[^']{3,})'|((?:"[^"]{3,}"|'[^']{3,}'|[\w$@.-]+):(?:"[^"]{3,}"|'[^']{3,}'|[\w${}@.-]+)))(?:\s|\z)'''
+entropy = 2
+keywords = ["curl"]
+[[rules.allowlists]]
+regexes = [
+ '''[^:]+:(?:change(?:it|me)|pass(?:word)?|pwd|test|token|\*+|x+)''',
+ '''['"]?<[^>]+>['"]?:['"]?<[^>]+>|<[^:]+:[^>]+>['"]?''',
+ '''[^:]+:\[[^]]+]''',
+ '''['"]?[^:]+['"]?:['"]?\$(?:\d|\w+|\{(?:\d|\w+)})['"]?''',
+ '''\$\([^)]+\):\$\([^)]+\)''',
+ '''['"]?\$?{{[^}]+}}['"]?:['"]?\$?{{[^}]+}}['"]?''',
+]
+
+[[rules]]
+id = "databricks-api-token"
+description = "Uncovered a Databricks API token, which may compromise big data analytics platforms and sensitive data processing."
+regex = '''\b(dapi[a-f0-9]{32}(?:-\d)?)(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["dapi"]
+
+[[rules]]
+id = "datadog-access-token"
+description = "Detected a Datadog Access Token, potentially risking monitoring and analytics data exposure and manipulation."
+regex = '''(?i)[\w.-]{0,50}?(?:datadog)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{40})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["datadog"]
+
+[[rules]]
+id = "defined-networking-api-token"
+description = "Identified a Defined Networking API token, which could lead to unauthorized network operations and data breaches."
+regex = '''(?i)[\w.-]{0,50}?(?:dnkey)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}(dnkey-[a-z0-9=_\-]{26}-[a-z0-9=_\-]{52})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["dnkey"]
+
+[[rules]]
+id = "digitalocean-access-token"
+description = "Found a DigitalOcean OAuth Access Token, risking unauthorized cloud resource access and data compromise."
+regex = '''\b(doo_v1_[a-f0-9]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["doo_v1_"]
+
+[[rules]]
+id = "digitalocean-pat"
+description = "Discovered a DigitalOcean Personal Access Token, posing a threat to cloud infrastructure security and data privacy."
+regex = '''\b(dop_v1_[a-f0-9]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["dop_v1_"]
+
+[[rules]]
+id = "digitalocean-refresh-token"
+description = "Uncovered a DigitalOcean OAuth Refresh Token, which could allow prolonged unauthorized access and resource manipulation."
+regex = '''(?i)\b(dor_v1_[a-f0-9]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["dor_v1_"]
+
+[[rules]]
+id = "discord-api-token"
+description = "Detected a Discord API key, potentially compromising communication channels and user data privacy on Discord."
+regex = '''(?i)[\w.-]{0,50}?(?:discord)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-f0-9]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["discord"]
+
+[[rules]]
+id = "discord-client-id"
+description = "Identified a Discord client ID, which may lead to unauthorized integrations and data exposure in Discord applications."
+regex = '''(?i)[\w.-]{0,50}?(?:discord)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([0-9]{18})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["discord"]
+
+[[rules]]
+id = "discord-client-secret"
+description = "Discovered a potential Discord client secret, risking compromised Discord bot integrations and data leaks."
+regex = '''(?i)[\w.-]{0,50}?(?:discord)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9=_\-]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["discord"]
+
+[[rules]]
+id = "doppler-api-token"
+description = "Discovered a Doppler API token, posing a risk to environment and secrets management security."
+regex = '''dp\.pt\.(?i)[a-z0-9]{43}'''
+entropy = 2
+keywords = ["dp.pt."]
+
+[[rules]]
+id = "droneci-access-token"
+description = "Detected a Droneci Access Token, potentially compromising continuous integration and deployment workflows."
+regex = '''(?i)[\w.-]{0,50}?(?:droneci)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["droneci"]
+
+[[rules]]
+id = "dropbox-api-token"
+description = "Identified a Dropbox API secret, which could lead to unauthorized file access and data breaches in Dropbox storage."
+regex = '''(?i)[\w.-]{0,50}?(?:dropbox)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{15})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["dropbox"]
+
+[[rules]]
+id = "dropbox-long-lived-api-token"
+description = "Found a Dropbox long-lived API token, risking prolonged unauthorized access to cloud storage and sensitive data."
+regex = '''(?i)[\w.-]{0,50}?(?:dropbox)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{11}(AAAAAAAAAA)[a-z0-9\-_=]{43})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["dropbox"]
+
+[[rules]]
+id = "dropbox-short-lived-api-token"
+description = "Discovered a Dropbox short-lived API token, posing a risk of temporary but potentially harmful data access and manipulation."
+regex = '''(?i)[\w.-]{0,50}?(?:dropbox)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}(sl\.[a-z0-9\-=_]{135})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["dropbox"]
+
+[[rules]]
+id = "duffel-api-token"
+description = "Uncovered a Duffel API token, which may compromise travel platform integrations and sensitive customer data."
+regex = '''duffel_(?:test|live)_(?i)[a-z0-9_\-=]{43}'''
+entropy = 2
+keywords = ["duffel_"]
+
+[[rules]]
+id = "dynatrace-api-token"
+description = "Detected a Dynatrace API token, potentially risking application performance monitoring and data exposure."
+regex = '''dt0c01\.(?i)[a-z0-9]{24}\.[a-z0-9]{64}'''
+entropy = 4
+keywords = ["dt0c01."]
+
+[[rules]]
+id = "easypost-api-token"
+description = "Identified an EasyPost API token, which could lead to unauthorized postal and shipment service access and data exposure."
+regex = '''\bEZAK(?i)[a-z0-9]{54}\b'''
+entropy = 2
+keywords = ["ezak"]
+
+[[rules]]
+id = "easypost-test-api-token"
+description = "Detected an EasyPost test API token, risking exposure of test environments and potentially sensitive shipment data."
+regex = '''\bEZTK(?i)[a-z0-9]{54}\b'''
+entropy = 2
+keywords = ["eztk"]
+
+[[rules]]
+id = "etsy-access-token"
+description = "Found an Etsy Access Token, potentially compromising Etsy shop management and customer data."
+regex = '''(?i)[\w.-]{0,50}?(?:(?-i:ETSY|[Ee]tsy))(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{24})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["etsy"]
+
+[[rules]]
+id = "facebook-access-token"
+description = "Discovered a Facebook Access Token, posing a risk of unauthorized access to Facebook accounts and personal data exposure."
+regex = '''(?i)\b(\d{15,16}(\||%)[0-9a-z\-_]{27,40})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["facebook"]
+
+[[rules]]
+id = "facebook-page-access-token"
+description = "Discovered a Facebook Page Access Token, posing a risk of unauthorized access to Facebook accounts and personal data exposure."
+regex = '''\b(EAA[MC](?i)[a-z0-9]{100,})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 4
+keywords = [
+ "eaam",
+ "eaac",
+]
+
+[[rules]]
+id = "facebook-secret"
+description = "Discovered a Facebook Application secret, posing a risk of unauthorized access to Facebook accounts and personal data exposure."
+regex = '''(?i)[\w.-]{0,50}?(?:facebook)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-f0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["facebook"]
+
+[[rules]]
+id = "fastly-api-token"
+description = "Uncovered a Fastly API key, which may compromise CDN and edge cloud services, leading to content delivery and security issues."
+regex = '''(?i)[\w.-]{0,50}?(?:fastly)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9=_\-]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["fastly"]
+
+[[rules]]
+id = "finicity-api-token"
+description = "Detected a Finicity API token, potentially risking financial data access and unauthorized financial operations."
+regex = '''(?i)[\w.-]{0,50}?(?:finicity)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-f0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["finicity"]
+
+[[rules]]
+id = "finicity-client-secret"
+description = "Identified a Finicity Client Secret, which could lead to compromised financial service integrations and data breaches."
+regex = '''(?i)[\w.-]{0,50}?(?:finicity)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{20})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["finicity"]
+
+[[rules]]
+id = "finnhub-access-token"
+description = "Found a Finnhub Access Token, risking unauthorized access to financial market data and analytics."
+regex = '''(?i)[\w.-]{0,50}?(?:finnhub)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{20})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["finnhub"]
+
+[[rules]]
+id = "flickr-access-token"
+description = "Discovered a Flickr Access Token, posing a risk of unauthorized photo management and potential data leakage."
+regex = '''(?i)[\w.-]{0,50}?(?:flickr)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["flickr"]
+
+[[rules]]
+id = "flutterwave-encryption-key"
+description = "Uncovered a Flutterwave Encryption Key, which may compromise payment processing and sensitive financial information."
+regex = '''FLWSECK_TEST-(?i)[a-h0-9]{12}'''
+entropy = 2
+keywords = ["flwseck_test"]
+
+[[rules]]
+id = "flutterwave-public-key"
+description = "Detected a Finicity Public Key, potentially exposing public cryptographic operations and integrations."
+regex = '''FLWPUBK_TEST-(?i)[a-h0-9]{32}-X'''
+entropy = 2
+keywords = ["flwpubk_test"]
+
+[[rules]]
+id = "flutterwave-secret-key"
+description = "Identified a Flutterwave Secret Key, risking unauthorized financial transactions and data breaches."
+regex = '''FLWSECK_TEST-(?i)[a-h0-9]{32}-X'''
+entropy = 2
+keywords = ["flwseck_test"]
+
+[[rules]]
+id = "flyio-access-token"
+description = "Uncovered a Fly.io API key"
+regex = '''\b((?:fo1_[\w-]{43}|fm1[ar]_[a-zA-Z0-9+\/]{100,}={0,3}|fm2_[a-zA-Z0-9+\/]{100,}={0,3}))(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 4
+keywords = [
+ "fo1_",
+ "fm1",
+ "fm2_",
+]
+
+[[rules]]
+id = "frameio-api-token"
+description = "Found a Frame.io API token, potentially compromising video collaboration and project management."
+regex = '''fio-u-(?i)[a-z0-9\-_=]{64}'''
+keywords = ["fio-u-"]
+
+[[rules]]
+id = "freemius-secret-key"
+description = "Detected a Freemius secret key, potentially exposing sensitive information."
+regex = '''(?i)["']secret_key["']\s*=>\s*["'](sk_[\S]{29})["']'''
+path = '''(?i)\.php$'''
+keywords = ["secret_key"]
+
+[[rules]]
+id = "freshbooks-access-token"
+description = "Discovered a Freshbooks Access Token, posing a risk to accounting software access and sensitive financial data exposure."
+regex = '''(?i)[\w.-]{0,50}?(?:freshbooks)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["freshbooks"]
+
+[[rules]]
+id = "gcp-api-key"
+description = "Uncovered a GCP API key, which could lead to unauthorized access to Google Cloud services and data breaches."
+regex = '''\b(AIza[\w-]{35})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["aiza"]
+[[rules.allowlists]]
+regexes = [
+ '''AIzaSyabcdefghijklmnopqrstuvwxyz1234567''',
+ '''AIzaSyAnLA7NfeLquW1tJFpx_eQCxoX-oo6YyIs''',
+ '''AIzaSyCkEhVjf3pduRDt6d1yKOMitrUEke8agEM''',
+ '''AIzaSyDMAScliyLx7F0NPDEJi1QmyCgHIAODrlU''',
+ '''AIzaSyD3asb-2pEZVqMkmL6M9N6nHZRR_znhrh0''',
+ '''AIzayDNSXIbFmlXbIE6mCzDLQAqITYefhixbX4A''',
+ '''AIzaSyAdOS2zB6NCsk1pCdZ4-P6GBdi_UUPwX7c''',
+ '''AIzaSyASWm6HmTMdYWpgMnjRBjxcQ9CKctWmLd4''',
+ '''AIzaSyANUvH9H9BsUccjsu2pCmEkOPjjaXeDQgY''',
+ '''AIzaSyA5_iVawFQ8ABuTZNUdcwERLJv_a_p4wtM''',
+ '''AIzaSyA4UrcGxgwQFTfaI3no3t7Lt1sjmdnP5sQ''',
+ '''AIzaSyDSb51JiIcB6OJpwwMicseKRhhrOq1cS7g''',
+ '''AIzaSyBF2RrAIm4a0mO64EShQfqfd2AFnzAvvuU''',
+ '''AIzaSyBcE-OOIbhjyR83gm4r2MFCu4MJmprNXsw''',
+ '''AIzaSyB8qGxt4ec15vitgn44duC5ucxaOi4FmqE''',
+ '''AIzaSyA8vmApnrHNFE0bApF4hoZ11srVL_n0nvY''',
+]
+
+[[rules]]
+id = "generic-api-key"
+description = "Detected a Generic API Key, potentially exposing access to various services and sensitive operations."
+regex = '''(?i)[\w.-]{0,50}?(?:access|auth|(?-i:[Aa]pi|API)|credential|creds|key|passw(?:or)?d|secret|token)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([\w.=-]{10,150}|[a-z0-9][a-z0-9+/]{11,}={0,3})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3.5
+keywords = [
+ "access",
+ "api",
+ "auth",
+ "key",
+ "credential",
+ "creds",
+ "passwd",
+ "password",
+ "secret",
+ "token",
+]
+[[rules.allowlists]]
+regexes = [
+ '''^[a-zA-Z_.-]+$''',
+]
+[[rules.allowlists]]
+regexTarget = "match"
+regexes = [
+ '''(?i)(?:access(?:ibility|or)|access[_.-]?id|random[_.-]?access|api[_.-]?(?:id|name|version)|rapid|capital|[a-z0-9-]*?api[a-z0-9-]*?:jar:|author|X-MS-Exchange-Organization-Auth|Authentication-Results|(?:credentials?[_.-]?id|withCredentials)|(?:bucket|foreign|hot|idx|natural|primary|pub(?:lic)?|schema|sequence)[_.-]?key|(?:turkey)|key[_.-]?(?:alias|board|code|frame|id|length|mesh|name|pair|press(?:ed)?|ring|selector|signature|size|stone|storetype|word|up|down|left|right)|key[_.-]?vault[_.-]?(?:id|name)|keyVaultToStoreSecrets|key(?:store|tab)[_.-]?(?:file|path)|issuerkeyhash|(?-i:[DdMm]onkey|[DM]ONKEY)|keying|(?:secret)[_.-]?(?:length|name|size)|UserSecretsId|(?:csrf)[_.-]?token|(?:io\.jsonwebtoken[ \t]?:[ \t]?[\w-]+)|(?:api|credentials|token)[_.-]?(?:endpoint|ur[il])|public[_.-]?token|(?:key|token)[_.-]?file|(?-i:(?:[A-Z_]+=\n[A-Z_]+=|[a-z_]+=\n[a-z_]+=)(?:\n|\z))|(?-i:(?:[A-Z.]+=\n[A-Z.]+=|[a-z.]+=\n[a-z.]+=)(?:\n|\z)))''',
+]
+stopwords = [
+ "000000",
+ "aaaaaa",
+ "about",
+ "abstract",
+ "academy",
+ "acces",
+ "account",
+ "act-",
+ "act.",
+ "act_",
+ "action",
+ "active",
+ "actively",
+ "activity",
+ "adapter",
+ "add-",
+ "add.",
+ "add_",
+ "add-on",
+ "addon",
+ "addres",
+ "admin",
+ "adobe",
+ "advanced",
+ "adventure",
+ "agent",
+ "agile",
+ "air-",
+ "air.",
+ "air_",
+ "ajax",
+ "akka",
+ "alert",
+ "alfred",
+ "algorithm",
+ "all-",
+ "all.",
+ "all_",
+ "alloy",
+ "alpha",
+ "amazon",
+ "amqp",
+ "analysi",
+ "analytic",
+ "analyzer",
+ "android",
+ "angular",
+ "angularj",
+ "animate",
+ "animation",
+ "another",
+ "ansible",
+ "answer",
+ "ant-",
+ "ant.",
+ "ant_",
+ "any-",
+ "any.",
+ "any_",
+ "apache",
+ "app-",
+ "app-",
+ "app.",
+ "app.",
+ "app_",
+ "app_",
+ "apple",
+ "arch",
+ "archive",
+ "archived",
+ "arduino",
+ "array",
+ "art-",
+ "art.",
+ "art_",
+ "article",
+ "asp-",
+ "asp.",
+ "asp_",
+ "asset",
+ "async",
+ "atom",
+ "attention",
+ "audio",
+ "audit",
+ "aura",
+ "auth",
+ "author",
+ "author",
+ "authorize",
+ "auto",
+ "automated",
+ "automatic",
+ "awesome",
+ "aws_",
+ "azure",
+ "back",
+ "backbone",
+ "backend",
+ "backup",
+ "bar-",
+ "bar.",
+ "bar_",
+ "base",
+ "based",
+ "bash",
+ "basic",
+ "batch",
+ "been",
+ "beer",
+ "behavior",
+ "being",
+ "benchmark",
+ "best",
+ "beta",
+ "better",
+ "big-",
+ "big.",
+ "big_",
+ "binary",
+ "binding",
+ "bit-",
+ "bit.",
+ "bit_",
+ "bitcoin",
+ "block",
+ "blog",
+ "board",
+ "book",
+ "bookmark",
+ "boost",
+ "boot",
+ "bootstrap",
+ "bosh",
+ "bot-",
+ "bot.",
+ "bot_",
+ "bower",
+ "box-",
+ "box.",
+ "box_",
+ "boxen",
+ "bracket",
+ "branch",
+ "bridge",
+ "browser",
+ "brunch",
+ "buffer",
+ "bug-",
+ "bug.",
+ "bug_",
+ "build",
+ "builder",
+ "building",
+ "buildout",
+ "buildpack",
+ "built",
+ "bundle",
+ "busines",
+ "but-",
+ "but.",
+ "but_",
+ "button",
+ "cache",
+ "caching",
+ "cakephp",
+ "calendar",
+ "call",
+ "camera",
+ "campfire",
+ "can-",
+ "can.",
+ "can_",
+ "canva",
+ "captcha",
+ "capture",
+ "card",
+ "carousel",
+ "case",
+ "cassandra",
+ "cat-",
+ "cat.",
+ "cat_",
+ "category",
+ "center",
+ "cento",
+ "challenge",
+ "change",
+ "changelog",
+ "channel",
+ "chart",
+ "chat",
+ "cheat",
+ "check",
+ "checker",
+ "chef",
+ "ches",
+ "chinese",
+ "chosen",
+ "chrome",
+ "ckeditor",
+ "clas",
+ "classe",
+ "classic",
+ "clean",
+ "cli-",
+ "cli.",
+ "cli_",
+ "client",
+ "client",
+ "clojure",
+ "clone",
+ "closure",
+ "cloud",
+ "club",
+ "cluster",
+ "cms-",
+ "cms_",
+ "coco",
+ "code",
+ "coding",
+ "coffee",
+ "color",
+ "combination",
+ "combo",
+ "command",
+ "commander",
+ "comment",
+ "commit",
+ "common",
+ "community",
+ "compas",
+ "compiler",
+ "complete",
+ "component",
+ "composer",
+ "computer",
+ "computing",
+ "con-",
+ "con.",
+ "con_",
+ "concept",
+ "conf",
+ "config",
+ "config",
+ "connect",
+ "connector",
+ "console",
+ "contact",
+ "container",
+ "contao",
+ "content",
+ "contest",
+ "context",
+ "control",
+ "convert",
+ "converter",
+ "conway'",
+ "cookbook",
+ "cookie",
+ "cool",
+ "copy",
+ "cordova",
+ "core",
+ "couchbase",
+ "couchdb",
+ "countdown",
+ "counter",
+ "course",
+ "craft",
+ "crawler",
+ "create",
+ "creating",
+ "creator",
+ "credential",
+ "crm-",
+ "crm.",
+ "crm_",
+ "cros",
+ "crud",
+ "csv-",
+ "csv.",
+ "csv_",
+ "cube",
+ "cucumber",
+ "cuda",
+ "current",
+ "currently",
+ "custom",
+ "daemon",
+ "dark",
+ "dart",
+ "dash",
+ "dashboard",
+ "data",
+ "database",
+ "date",
+ "day-",
+ "day.",
+ "day_",
+ "dead",
+ "debian",
+ "debug",
+ "debug",
+ "debugger",
+ "deck",
+ "define",
+ "del-",
+ "del.",
+ "del_",
+ "delete",
+ "demo",
+ "deploy",
+ "design",
+ "designer",
+ "desktop",
+ "detection",
+ "detector",
+ "dev-",
+ "dev.",
+ "dev_",
+ "develop",
+ "developer",
+ "device",
+ "devise",
+ "diff",
+ "digital",
+ "directive",
+ "directory",
+ "discovery",
+ "display",
+ "django",
+ "dns-",
+ "dns_",
+ "doc-",
+ "doc-",
+ "doc.",
+ "doc.",
+ "doc_",
+ "doc_",
+ "docker",
+ "docpad",
+ "doctrine",
+ "document",
+ "doe-",
+ "doe.",
+ "doe_",
+ "dojo",
+ "dom-",
+ "dom.",
+ "dom_",
+ "domain",
+ "done",
+ "don't",
+ "dot-",
+ "dot.",
+ "dot_",
+ "dotfile",
+ "download",
+ "draft",
+ "drag",
+ "drill",
+ "drive",
+ "driven",
+ "driver",
+ "drop",
+ "dropbox",
+ "drupal",
+ "dsl-",
+ "dsl.",
+ "dsl_",
+ "dynamic",
+ "easy",
+ "_ec2_",
+ "ecdsa",
+ "eclipse",
+ "edit",
+ "editing",
+ "edition",
+ "editor",
+ "element",
+ "emac",
+ "email",
+ "embed",
+ "embedded",
+ "ember",
+ "emitter",
+ "emulator",
+ "encoding",
+ "endpoint",
+ "engine",
+ "english",
+ "enhanced",
+ "entity",
+ "entry",
+ "env_",
+ "episode",
+ "erlang",
+ "error",
+ "espresso",
+ "event",
+ "evented",
+ "example",
+ "example",
+ "exchange",
+ "exercise",
+ "experiment",
+ "expire",
+ "exploit",
+ "explorer",
+ "export",
+ "exporter",
+ "expres",
+ "ext-",
+ "ext.",
+ "ext_",
+ "extended",
+ "extension",
+ "external",
+ "extra",
+ "extractor",
+ "fabric",
+ "facebook",
+ "factory",
+ "fake",
+ "fast",
+ "feature",
+ "feed",
+ "fewfwef",
+ "ffmpeg",
+ "field",
+ "file",
+ "filter",
+ "find",
+ "finder",
+ "firefox",
+ "firmware",
+ "first",
+ "fish",
+ "fix-",
+ "fix_",
+ "flash",
+ "flask",
+ "flat",
+ "flex",
+ "flexible",
+ "flickr",
+ "flow",
+ "fluent",
+ "fluentd",
+ "fluid",
+ "folder",
+ "font",
+ "force",
+ "foreman",
+ "fork",
+ "form",
+ "format",
+ "formatter",
+ "forum",
+ "foundry",
+ "framework",
+ "free",
+ "friend",
+ "friendly",
+ "front-end",
+ "frontend",
+ "ftp-",
+ "ftp.",
+ "ftp_",
+ "fuel",
+ "full",
+ "fun-",
+ "fun.",
+ "fun_",
+ "func",
+ "future",
+ "gaia",
+ "gallery",
+ "game",
+ "gateway",
+ "gem-",
+ "gem.",
+ "gem_",
+ "gen-",
+ "gen.",
+ "gen_",
+ "general",
+ "generator",
+ "generic",
+ "genetic",
+ "get-",
+ "get.",
+ "get_",
+ "getenv",
+ "getting",
+ "ghost",
+ "gist",
+ "git-",
+ "git.",
+ "git_",
+ "github",
+ "gitignore",
+ "gitlab",
+ "glas",
+ "gmail",
+ "gnome",
+ "gnu-",
+ "gnu.",
+ "gnu_",
+ "goal",
+ "golang",
+ "gollum",
+ "good",
+ "google",
+ "gpu-",
+ "gpu.",
+ "gpu_",
+ "gradle",
+ "grail",
+ "graph",
+ "graphic",
+ "great",
+ "grid",
+ "groovy",
+ "group",
+ "grunt",
+ "guard",
+ "gui-",
+ "gui.",
+ "gui_",
+ "guide",
+ "guideline",
+ "gulp",
+ "gwt-",
+ "gwt.",
+ "gwt_",
+ "hack",
+ "hackathon",
+ "hacker",
+ "hacking",
+ "hadoop",
+ "haml",
+ "handler",
+ "hardware",
+ "has-",
+ "has_",
+ "hash",
+ "haskell",
+ "have",
+ "haxe",
+ "hello",
+ "help",
+ "helper",
+ "here",
+ "hero",
+ "heroku",
+ "high",
+ "hipchat",
+ "history",
+ "home",
+ "homebrew",
+ "homepage",
+ "hook",
+ "host",
+ "hosting",
+ "hot-",
+ "hot.",
+ "hot_",
+ "house",
+ "how-",
+ "how.",
+ "how_",
+ "html",
+ "http",
+ "hub-",
+ "hub.",
+ "hub_",
+ "hubot",
+ "human",
+ "icon",
+ "ide-",
+ "ide.",
+ "ide_",
+ "idea",
+ "identity",
+ "idiomatic",
+ "image",
+ "impact",
+ "import",
+ "important",
+ "importer",
+ "impres",
+ "index",
+ "infinite",
+ "info",
+ "injection",
+ "inline",
+ "input",
+ "inside",
+ "inspector",
+ "instagram",
+ "install",
+ "installer",
+ "instant",
+ "intellij",
+ "interface",
+ "internet",
+ "interview",
+ "into",
+ "intro",
+ "ionic",
+ "iphone",
+ "ipython",
+ "irc-",
+ "irc_",
+ "iso-",
+ "iso.",
+ "iso_",
+ "issue",
+ "jade",
+ "jasmine",
+ "java",
+ "jbos",
+ "jekyll",
+ "jenkin",
+ "jetbrains",
+ "job-",
+ "job.",
+ "job_",
+ "joomla",
+ "jpa-",
+ "jpa.",
+ "jpa_",
+ "jquery",
+ "json",
+ "just",
+ "kafka",
+ "karma",
+ "kata",
+ "kernel",
+ "keyboard",
+ "kindle",
+ "kit-",
+ "kit.",
+ "kit_",
+ "kitchen",
+ "knife",
+ "koan",
+ "kohana",
+ "lab-",
+ "lab-",
+ "lab.",
+ "lab.",
+ "lab_",
+ "lab_",
+ "lambda",
+ "lamp",
+ "language",
+ "laravel",
+ "last",
+ "latest",
+ "latex",
+ "launcher",
+ "layer",
+ "layout",
+ "lazy",
+ "ldap",
+ "leaflet",
+ "league",
+ "learn",
+ "learning",
+ "led-",
+ "led.",
+ "led_",
+ "leetcode",
+ "les-",
+ "les.",
+ "les_",
+ "level",
+ "leveldb",
+ "lib-",
+ "lib.",
+ "lib_",
+ "librarie",
+ "library",
+ "license",
+ "life",
+ "liferay",
+ "light",
+ "lightbox",
+ "like",
+ "line",
+ "link",
+ "linked",
+ "linkedin",
+ "linux",
+ "lisp",
+ "list",
+ "lite",
+ "little",
+ "load",
+ "loader",
+ "local",
+ "location",
+ "lock",
+ "log-",
+ "log.",
+ "log_",
+ "logger",
+ "logging",
+ "logic",
+ "login",
+ "logstash",
+ "longer",
+ "look",
+ "love",
+ "lua-",
+ "lua.",
+ "lua_",
+ "mac-",
+ "mac.",
+ "mac_",
+ "machine",
+ "made",
+ "magento",
+ "magic",
+ "mail",
+ "make",
+ "maker",
+ "making",
+ "man-",
+ "man.",
+ "man_",
+ "manage",
+ "manager",
+ "manifest",
+ "manual",
+ "map-",
+ "map-",
+ "map.",
+ "map.",
+ "map_",
+ "map_",
+ "mapper",
+ "mapping",
+ "markdown",
+ "markup",
+ "master",
+ "math",
+ "matrix",
+ "maven",
+ "md5",
+ "mean",
+ "media",
+ "mediawiki",
+ "meetup",
+ "memcached",
+ "memory",
+ "menu",
+ "merchant",
+ "message",
+ "messaging",
+ "meta",
+ "metadata",
+ "meteor",
+ "method",
+ "metric",
+ "micro",
+ "middleman",
+ "migration",
+ "minecraft",
+ "miner",
+ "mini",
+ "minimal",
+ "mirror",
+ "mit-",
+ "mit.",
+ "mit_",
+ "mobile",
+ "mocha",
+ "mock",
+ "mod-",
+ "mod.",
+ "mod_",
+ "mode",
+ "model",
+ "modern",
+ "modular",
+ "module",
+ "modx",
+ "money",
+ "mongo",
+ "mongodb",
+ "mongoid",
+ "mongoose",
+ "monitor",
+ "monkey",
+ "more",
+ "motion",
+ "moved",
+ "movie",
+ "mozilla",
+ "mqtt",
+ "mule",
+ "multi",
+ "multiple",
+ "music",
+ "mustache",
+ "mvc-",
+ "mvc.",
+ "mvc_",
+ "mysql",
+ "nagio",
+ "name",
+ "native",
+ "need",
+ "neo-",
+ "neo.",
+ "neo_",
+ "nest",
+ "nested",
+ "net-",
+ "net.",
+ "net_",
+ "nette",
+ "network",
+ "new-",
+ "new-",
+ "new.",
+ "new.",
+ "new_",
+ "new_",
+ "next",
+ "nginx",
+ "ninja",
+ "nlp-",
+ "nlp.",
+ "nlp_",
+ "node",
+ "nodej",
+ "nosql",
+ "not-",
+ "not.",
+ "not_",
+ "note",
+ "notebook",
+ "notepad",
+ "notice",
+ "notifier",
+ "now-",
+ "now.",
+ "now_",
+ "number",
+ "oauth",
+ "object",
+ "objective",
+ "obsolete",
+ "ocaml",
+ "octopres",
+ "official",
+ "old-",
+ "old.",
+ "old_",
+ "onboard",
+ "online",
+ "only",
+ "open",
+ "opencv",
+ "opengl",
+ "openshift",
+ "openwrt",
+ "option",
+ "oracle",
+ "org-",
+ "org.",
+ "org_",
+ "origin",
+ "original",
+ "orm-",
+ "orm.",
+ "orm_",
+ "osx-",
+ "osx_",
+ "our-",
+ "our.",
+ "our_",
+ "out-",
+ "out.",
+ "out_",
+ "output",
+ "over",
+ "overview",
+ "own-",
+ "own.",
+ "own_",
+ "pack",
+ "package",
+ "packet",
+ "page",
+ "page",
+ "panel",
+ "paper",
+ "paperclip",
+ "para",
+ "parallax",
+ "parallel",
+ "parse",
+ "parser",
+ "parsing",
+ "particle",
+ "party",
+ "password",
+ "patch",
+ "path",
+ "pattern",
+ "payment",
+ "paypal",
+ "pdf-",
+ "pdf.",
+ "pdf_",
+ "pebble",
+ "people",
+ "perl",
+ "personal",
+ "phalcon",
+ "phoenix",
+ "phone",
+ "phonegap",
+ "photo",
+ "php-",
+ "php.",
+ "php_",
+ "physic",
+ "picker",
+ "pipeline",
+ "platform",
+ "play",
+ "player",
+ "please",
+ "plu-",
+ "plu.",
+ "plu_",
+ "plug-in",
+ "plugin",
+ "plupload",
+ "png-",
+ "png.",
+ "png_",
+ "poker",
+ "polyfill",
+ "polymer",
+ "pool",
+ "pop-",
+ "pop.",
+ "pop_",
+ "popcorn",
+ "popup",
+ "port",
+ "portable",
+ "portal",
+ "portfolio",
+ "post",
+ "power",
+ "powered",
+ "powerful",
+ "prelude",
+ "pretty",
+ "preview",
+ "principle",
+ "print",
+ "pro-",
+ "pro.",
+ "pro_",
+ "problem",
+ "proc",
+ "product",
+ "profile",
+ "profiler",
+ "program",
+ "progres",
+ "project",
+ "protocol",
+ "prototype",
+ "provider",
+ "proxy",
+ "public",
+ "pull",
+ "puppet",
+ "pure",
+ "purpose",
+ "push",
+ "pusher",
+ "pyramid",
+ "python",
+ "quality",
+ "query",
+ "queue",
+ "quick",
+ "rabbitmq",
+ "rack",
+ "radio",
+ "rail",
+ "railscast",
+ "random",
+ "range",
+ "raspberry",
+ "rdf-",
+ "rdf.",
+ "rdf_",
+ "react",
+ "reactive",
+ "read",
+ "reader",
+ "readme",
+ "ready",
+ "real",
+ "reality",
+ "real-time",
+ "realtime",
+ "recipe",
+ "recorder",
+ "red-",
+ "red.",
+ "red_",
+ "reddit",
+ "redi",
+ "redmine",
+ "reference",
+ "refinery",
+ "refresh",
+ "registry",
+ "related",
+ "release",
+ "remote",
+ "rendering",
+ "repo",
+ "report",
+ "request",
+ "require",
+ "required",
+ "requirej",
+ "research",
+ "resource",
+ "response",
+ "resque",
+ "rest",
+ "restful",
+ "resume",
+ "reveal",
+ "reverse",
+ "review",
+ "riak",
+ "rich",
+ "right",
+ "ring",
+ "robot",
+ "role",
+ "room",
+ "router",
+ "routing",
+ "rpc-",
+ "rpc.",
+ "rpc_",
+ "rpg-",
+ "rpg.",
+ "rpg_",
+ "rspec",
+ "ruby-",
+ "ruby.",
+ "ruby_",
+ "rule",
+ "run-",
+ "run.",
+ "run_",
+ "runner",
+ "running",
+ "runtime",
+ "rust",
+ "rvm-",
+ "rvm.",
+ "rvm_",
+ "salt",
+ "sample",
+ "sample",
+ "sandbox",
+ "sas-",
+ "sas.",
+ "sas_",
+ "sbt-",
+ "sbt.",
+ "sbt_",
+ "scala",
+ "scalable",
+ "scanner",
+ "schema",
+ "scheme",
+ "school",
+ "science",
+ "scraper",
+ "scratch",
+ "screen",
+ "script",
+ "scroll",
+ "scs-",
+ "scs.",
+ "scs_",
+ "sdk-",
+ "sdk.",
+ "sdk_",
+ "sdl-",
+ "sdl.",
+ "sdl_",
+ "search",
+ "secure",
+ "security",
+ "see-",
+ "see.",
+ "see_",
+ "seed",
+ "select",
+ "selector",
+ "selenium",
+ "semantic",
+ "sencha",
+ "send",
+ "sentiment",
+ "serie",
+ "server",
+ "service",
+ "session",
+ "set-",
+ "set.",
+ "set_",
+ "setting",
+ "setting",
+ "setup",
+ "sha1",
+ "sha2",
+ "sha256",
+ "share",
+ "shared",
+ "sharing",
+ "sheet",
+ "shell",
+ "shield",
+ "shipping",
+ "shop",
+ "shopify",
+ "shortener",
+ "should",
+ "show",
+ "showcase",
+ "side",
+ "silex",
+ "simple",
+ "simulator",
+ "single",
+ "site",
+ "skeleton",
+ "sketch",
+ "skin",
+ "slack",
+ "slide",
+ "slider",
+ "slim",
+ "small",
+ "smart",
+ "smtp",
+ "snake",
+ "snapshot",
+ "snippet",
+ "soap",
+ "social",
+ "socket",
+ "software",
+ "solarized",
+ "solr",
+ "solution",
+ "solver",
+ "some",
+ "soon",
+ "source",
+ "space",
+ "spark",
+ "spatial",
+ "spec",
+ "sphinx",
+ "spine",
+ "spotify",
+ "spree",
+ "spring",
+ "sprite",
+ "sql-",
+ "sql.",
+ "sql_",
+ "sqlite",
+ "ssh-",
+ "ssh.",
+ "ssh_",
+ "stack",
+ "staging",
+ "standard",
+ "stanford",
+ "start",
+ "started",
+ "starter",
+ "startup",
+ "stat",
+ "statamic",
+ "state",
+ "static",
+ "statistic",
+ "statsd",
+ "statu",
+ "steam",
+ "step",
+ "still",
+ "stm-",
+ "stm.",
+ "stm_",
+ "storage",
+ "store",
+ "storm",
+ "story",
+ "strategy",
+ "stream",
+ "streaming",
+ "string",
+ "stripe",
+ "structure",
+ "studio",
+ "study",
+ "stuff",
+ "style",
+ "sublime",
+ "sugar",
+ "suite",
+ "summary",
+ "super",
+ "support",
+ "supported",
+ "svg-",
+ "svg.",
+ "svg_",
+ "svn-",
+ "svn.",
+ "svn_",
+ "swagger",
+ "swift",
+ "switch",
+ "switcher",
+ "symfony",
+ "symphony",
+ "sync",
+ "synopsi",
+ "syntax",
+ "system",
+ "system",
+ "tab-",
+ "tab-",
+ "tab.",
+ "tab.",
+ "tab_",
+ "tab_",
+ "table",
+ "tag-",
+ "tag-",
+ "tag.",
+ "tag.",
+ "tag_",
+ "tag_",
+ "talk",
+ "target",
+ "task",
+ "tcp-",
+ "tcp.",
+ "tcp_",
+ "tdd-",
+ "tdd.",
+ "tdd_",
+ "team",
+ "tech",
+ "template",
+ "term",
+ "terminal",
+ "testing",
+ "tetri",
+ "text",
+ "textmate",
+ "theme",
+ "theory",
+ "three",
+ "thrift",
+ "time",
+ "timeline",
+ "timer",
+ "tiny",
+ "tinymce",
+ "tip-",
+ "tip.",
+ "tip_",
+ "title",
+ "todo",
+ "todomvc",
+ "token",
+ "tool",
+ "toolbox",
+ "toolkit",
+ "top-",
+ "top.",
+ "top_",
+ "tornado",
+ "touch",
+ "tower",
+ "tracker",
+ "tracking",
+ "traffic",
+ "training",
+ "transfer",
+ "translate",
+ "transport",
+ "tree",
+ "trello",
+ "try-",
+ "try.",
+ "try_",
+ "tumblr",
+ "tut-",
+ "tut.",
+ "tut_",
+ "tutorial",
+ "tweet",
+ "twig",
+ "twitter",
+ "type",
+ "typo",
+ "ubuntu",
+ "uiview",
+ "ultimate",
+ "under",
+ "unit",
+ "unity",
+ "universal",
+ "unix",
+ "update",
+ "updated",
+ "upgrade",
+ "upload",
+ "uploader",
+ "uri-",
+ "uri.",
+ "uri_",
+ "url-",
+ "url.",
+ "url_",
+ "usage",
+ "usb-",
+ "usb.",
+ "usb_",
+ "use-",
+ "use.",
+ "use_",
+ "used",
+ "useful",
+ "user",
+ "using",
+ "util",
+ "utilitie",
+ "utility",
+ "vagrant",
+ "validator",
+ "value",
+ "variou",
+ "varnish",
+ "version",
+ "via-",
+ "via.",
+ "via_",
+ "video",
+ "view",
+ "viewer",
+ "vim-",
+ "vim.",
+ "vim_",
+ "vimrc",
+ "virtual",
+ "vision",
+ "visual",
+ "vpn",
+ "want",
+ "warning",
+ "watch",
+ "watcher",
+ "wave",
+ "way-",
+ "way.",
+ "way_",
+ "weather",
+ "web-",
+ "web_",
+ "webapp",
+ "webgl",
+ "webhook",
+ "webkit",
+ "webrtc",
+ "website",
+ "websocket",
+ "welcome",
+ "welcome",
+ "what",
+ "what'",
+ "when",
+ "where",
+ "which",
+ "why-",
+ "why.",
+ "why_",
+ "widget",
+ "wifi",
+ "wiki",
+ "win-",
+ "win.",
+ "win_",
+ "window",
+ "wip-",
+ "wip.",
+ "wip_",
+ "within",
+ "without",
+ "wizard",
+ "word",
+ "wordpres",
+ "work",
+ "worker",
+ "workflow",
+ "working",
+ "workshop",
+ "world",
+ "wrapper",
+ "write",
+ "writer",
+ "writing",
+ "written",
+ "www-",
+ "www.",
+ "www_",
+ "xamarin",
+ "xcode",
+ "xml-",
+ "xml.",
+ "xml_",
+ "xmpp",
+ "xxxxxx",
+ "yahoo",
+ "yaml",
+ "yandex",
+ "yeoman",
+ "yet-",
+ "yet.",
+ "yet_",
+ "yii-",
+ "yii.",
+ "yii_",
+ "youtube",
+ "yui-",
+ "yui.",
+ "yui_",
+ "zend",
+ "zero",
+ "zip-",
+ "zip.",
+ "zip_",
+ "zsh-",
+ "zsh.",
+ "zsh_",
+ "6fe4476ee5a1832882e326b506d14126",
+]
+[[rules.allowlists]]
+regexTarget = "line"
+regexes = [
+ '''--mount=type=secret,''',
+ '''import[ \t]+{[ \t\w,]+}[ \t]+from[ \t]+['"][^'"]+['"]''',
+]
+[[rules.allowlists]]
+condition = "AND"
+paths = [
+ '''\.bb$''','''\.bbappend$''','''\.bbclass$''','''\.inc$''',
+]
+regexTarget = "line"
+regexes = [
+ '''LICENSE[^=]*=\s*"[^"]+''',
+ '''LIC_FILES_CHKSUM[^=]*=\s*"[^"]+''',
+ '''SRC[^=]*=\s*"[a-zA-Z0-9]+''',
+]
+
+[[rules]]
+id = "github-app-token"
+description = "Identified a GitHub App Token, which may compromise GitHub application integrations and source code security."
+regex = '''(?:ghu|ghs)_[0-9a-zA-Z]{36}'''
+entropy = 3
+keywords = [
+ "ghu_",
+ "ghs_",
+]
+[[rules.allowlists]]
+paths = [
+ '''(?:^|/)@octokit/auth-token/README\.md$''',
+]
+
+[[rules]]
+id = "github-fine-grained-pat"
+description = "Found a GitHub Fine-Grained Personal Access Token, risking unauthorized repository access and code manipulation."
+regex = '''github_pat_\w{82}'''
+entropy = 3
+keywords = ["github_pat_"]
+
+[[rules]]
+id = "github-oauth"
+description = "Discovered a GitHub OAuth Access Token, posing a risk of compromised GitHub account integrations and data leaks."
+regex = '''gho_[0-9a-zA-Z]{36}'''
+entropy = 3
+keywords = ["gho_"]
+
+[[rules]]
+id = "github-pat"
+description = "Uncovered a GitHub Personal Access Token, potentially leading to unauthorized repository access and sensitive content exposure."
+regex = '''ghp_[0-9a-zA-Z]{36}'''
+entropy = 3
+keywords = ["ghp_"]
+[[rules.allowlists]]
+paths = [
+ '''(?:^|/)@octokit/auth-token/README\.md$''',
+]
+
+[[rules]]
+id = "github-refresh-token"
+description = "Detected a GitHub Refresh Token, which could allow prolonged unauthorized access to GitHub services."
+regex = '''ghr_[0-9a-zA-Z]{36}'''
+entropy = 3
+keywords = ["ghr_"]
+
+[[rules]]
+id = "gitlab-cicd-job-token"
+description = "Identified a GitLab CI/CD Job Token, potential access to projects and some APIs on behalf of a user while the CI job is running."
+regex = '''glcbt-[0-9a-zA-Z]{1,5}_[0-9a-zA-Z_-]{20}'''
+entropy = 3
+keywords = ["glcbt-"]
+
+[[rules]]
+id = "gitlab-deploy-token"
+description = "Identified a GitLab Deploy Token, risking access to repositories, packages and containers with write access."
+regex = '''gldt-[0-9a-zA-Z_\-]{20}'''
+entropy = 3
+keywords = ["gldt-"]
+
+[[rules]]
+id = "gitlab-feature-flag-client-token"
+description = "Identified a GitLab feature flag client token, risks exposing user lists and features flags used by an application."
+regex = '''glffct-[0-9a-zA-Z_\-]{20}'''
+entropy = 3
+keywords = ["glffct-"]
+
+[[rules]]
+id = "gitlab-feed-token"
+description = "Identified a GitLab feed token, risking exposure of user data."
+regex = '''glft-[0-9a-zA-Z_\-]{20}'''
+entropy = 3
+keywords = ["glft-"]
+
+[[rules]]
+id = "gitlab-incoming-mail-token"
+description = "Identified a GitLab incoming mail token, risking manipulation of data sent by mail."
+regex = '''glimt-[0-9a-zA-Z_\-]{25}'''
+entropy = 3
+keywords = ["glimt-"]
+
+[[rules]]
+id = "gitlab-kubernetes-agent-token"
+description = "Identified a GitLab Kubernetes Agent token, risking access to repos and registry of projects connected via agent."
+regex = '''glagent-[0-9a-zA-Z_\-]{50}'''
+entropy = 3
+keywords = ["glagent-"]
+
+[[rules]]
+id = "gitlab-oauth-app-secret"
+description = "Identified a GitLab OIDC Application Secret, risking access to apps using GitLab as authentication provider."
+regex = '''gloas-[0-9a-zA-Z_\-]{64}'''
+entropy = 3
+keywords = ["gloas-"]
+
+[[rules]]
+id = "gitlab-pat"
+description = "Identified a GitLab Personal Access Token, risking unauthorized access to GitLab repositories and codebase exposure."
+regex = '''glpat-[\w-]{20}'''
+entropy = 3
+keywords = ["glpat-"]
+
+[[rules]]
+id = "gitlab-pat-routable"
+description = "Identified a GitLab Personal Access Token (routable), risking unauthorized access to GitLab repositories and codebase exposure."
+regex = '''\bglpat-[0-9a-zA-Z_-]{27,300}\.[0-9a-z]{2}[0-9a-z]{7}\b'''
+entropy = 4
+keywords = ["glpat-"]
+
+[[rules]]
+id = "gitlab-ptt"
+description = "Found a GitLab Pipeline Trigger Token, potentially compromising continuous integration workflows and project security."
+regex = '''glptt-[0-9a-f]{40}'''
+entropy = 3
+keywords = ["glptt-"]
+
+[[rules]]
+id = "gitlab-rrt"
+description = "Discovered a GitLab Runner Registration Token, posing a risk to CI/CD pipeline integrity and unauthorized access."
+regex = '''GR1348941[\w-]{20}'''
+entropy = 3
+keywords = ["gr1348941"]
+
+[[rules]]
+id = "gitlab-runner-authentication-token"
+description = "Discovered a GitLab Runner Authentication Token, posing a risk to CI/CD pipeline integrity and unauthorized access."
+regex = '''glrt-[0-9a-zA-Z_\-]{20}'''
+entropy = 3
+keywords = ["glrt-"]
+
+[[rules]]
+id = "gitlab-runner-authentication-token-routable"
+description = "Discovered a GitLab Runner Authentication Token (Routable), posing a risk to CI/CD pipeline integrity and unauthorized access."
+regex = '''\bglrt-t\d_[0-9a-zA-Z_\-]{27,300}\.[0-9a-z]{2}[0-9a-z]{7}\b'''
+entropy = 4
+keywords = ["glrt-"]
+
+[[rules]]
+id = "gitlab-scim-token"
+description = "Discovered a GitLab SCIM Token, posing a risk to unauthorized access for a organization or instance."
+regex = '''glsoat-[0-9a-zA-Z_\-]{20}'''
+entropy = 3
+keywords = ["glsoat-"]
+
+[[rules]]
+id = "gitlab-session-cookie"
+description = "Discovered a GitLab Session Cookie, posing a risk to unauthorized access to a user account."
+regex = '''_gitlab_session=[0-9a-z]{32}'''
+entropy = 3
+keywords = ["_gitlab_session="]
+
+[[rules]]
+id = "gitter-access-token"
+description = "Uncovered a Gitter Access Token, which may lead to unauthorized access to chat and communication services."
+regex = '''(?i)[\w.-]{0,50}?(?:gitter)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9_-]{40})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["gitter"]
+
+[[rules]]
+id = "gocardless-api-token"
+description = "Detected a GoCardless API token, potentially risking unauthorized direct debit payment operations and financial data exposure."
+regex = '''(?i)[\w.-]{0,50}?(?:gocardless)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}(live_(?i)[a-z0-9\-_=]{40})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = [
+ "live_",
+ "gocardless",
+]
+
+[[rules]]
+id = "grafana-api-key"
+description = "Identified a Grafana API key, which could compromise monitoring dashboards and sensitive data analytics."
+regex = '''(?i)\b(eyJrIjoi[A-Za-z0-9]{70,400}={0,3})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["eyjrijoi"]
+
+[[rules]]
+id = "grafana-cloud-api-token"
+description = "Found a Grafana cloud API token, risking unauthorized access to cloud-based monitoring services and data exposure."
+regex = '''(?i)\b(glc_[A-Za-z0-9+/]{32,400}={0,3})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["glc_"]
+
+[[rules]]
+id = "grafana-service-account-token"
+description = "Discovered a Grafana service account token, posing a risk of compromised monitoring services and data integrity."
+regex = '''(?i)\b(glsa_[A-Za-z0-9]{32}_[A-Fa-f0-9]{8})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["glsa_"]
+
+[[rules]]
+id = "harness-api-key"
+description = "Identified a Harness Access Token (PAT or SAT), risking unauthorized access to a Harness account."
+regex = '''(?:pat|sat)\.[a-zA-Z0-9_-]{22}\.[a-zA-Z0-9]{24}\.[a-zA-Z0-9]{20}'''
+keywords = [
+ "pat.",
+ "sat.",
+]
+
+[[rules]]
+id = "hashicorp-tf-api-token"
+description = "Uncovered a HashiCorp Terraform user/org API token, which may lead to unauthorized infrastructure management and security breaches."
+regex = '''(?i)[a-z0-9]{14}\.(?-i:atlasv1)\.[a-z0-9\-_=]{60,70}'''
+entropy = 3.5
+keywords = ["atlasv1"]
+
+[[rules]]
+id = "hashicorp-tf-password"
+description = "Identified a HashiCorp Terraform password field, risking unauthorized infrastructure configuration and security breaches."
+regex = '''(?i)[\w.-]{0,50}?(?:administrator_login_password|password)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}("[a-z0-9=_\-]{8,20}")(?:[\x60'"\s;]|\\[nr]|$)'''
+path = '''(?i)\.(?:tf|hcl)$'''
+entropy = 2
+keywords = [
+ "administrator_login_password",
+ "password",
+]
+
+[[rules]]
+id = "heroku-api-key"
+description = "Detected a Heroku API Key, potentially compromising cloud application deployments and operational security."
+regex = '''(?i)[\w.-]{0,50}?(?:heroku)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["heroku"]
+
+[[rules]]
+id = "hubspot-api-key"
+description = "Found a HubSpot API Token, posing a risk to CRM data integrity and unauthorized marketing operations."
+regex = '''(?i)[\w.-]{0,50}?(?:hubspot)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["hubspot"]
+
+[[rules]]
+id = "huggingface-access-token"
+description = "Discovered a Hugging Face Access token, which could lead to unauthorized access to AI models and sensitive data."
+regex = '''\b(hf_(?i:[a-z]{34}))(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["hf_"]
+
+[[rules]]
+id = "huggingface-organization-api-token"
+description = "Uncovered a Hugging Face Organization API token, potentially compromising AI organization accounts and associated data."
+regex = '''\b(api_org_(?i:[a-z]{34}))(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 2
+keywords = ["api_org_"]
+
+[[rules]]
+id = "infracost-api-token"
+description = "Detected an Infracost API Token, risking unauthorized access to cloud cost estimation tools and financial data."
+regex = '''\b(ico-[a-zA-Z0-9]{32})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["ico-"]
+
+[[rules]]
+id = "intercom-api-key"
+description = "Identified an Intercom API Token, which could compromise customer communication channels and data privacy."
+regex = '''(?i)[\w.-]{0,50}?(?:intercom)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9=_\-]{60})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = ["intercom"]
+
+[[rules]]
+id = "intra42-client-secret"
+description = "Found a Intra42 client secret, which could lead to unauthorized access to the 42School API and sensitive data."
+regex = '''\b(s-s4t2(?:ud|af)-(?i)[abcdef0123456789]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = [
+ "intra",
+ "s-s4t2ud-",
+ "s-s4t2af-",
+]
+
+[[rules]]
+id = "jfrog-api-key"
+description = "Found a JFrog API Key, posing a risk of unauthorized access to software artifact repositories and build pipelines."
+regex = '''(?i)[\w.-]{0,50}?(?:jfrog|artifactory|bintray|xray)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{73})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = [
+ "jfrog",
+ "artifactory",
+ "bintray",
+ "xray",
+]
+
+[[rules]]
+id = "jfrog-identity-token"
+description = "Discovered a JFrog Identity Token, potentially compromising access to JFrog services and sensitive software artifacts."
+regex = '''(?i)[\w.-]{0,50}?(?:jfrog|artifactory|bintray|xray)(?:[ \t\w.-]{0,20})[\s'"]{0,3}(?:=|>|:{1,3}=|\|\||:|=>|\?=|,)[\x60'"\s=]{0,5}([a-z0-9]{64})(?:[\x60'"\s;]|\\[nr]|$)'''
+keywords = [
+ "jfrog",
+ "artifactory",
+ "bintray",
+ "xray",
+]
+
+[[rules]]
+id = "jwt"
+description = "Uncovered a JSON Web Token, which may lead to unauthorized access to web applications and sensitive user data."
+regex = '''\b(ey[a-zA-Z0-9]{17,}\.ey[a-zA-Z0-9\/\\_-]{17,}\.(?:[a-zA-Z0-9\/\\_-]{10,}={0,2})?)(?:[\x60'"\s;]|\\[nr]|$)'''
+entropy = 3
+keywords = ["ey"]
+
+[[rules]]
+id = "jwt-base64"
+description = "Detected a Base64-encoded JSON Web Token, posing a risk of exposing encoded authentication and data exchange information."
+regex = '''\bZXlK(?:(?PaGJHY2lPaU)|(?PaGNIVWlPaU)|(?PaGNIWWlPaU)|(?PaGRXUWlPaU)|(?PaU5qUWlP)|(?PamNtbDBJanBi)|(?PamRIa2lPaU)|(?PbGNHc2lPbn)|(?PbGJtTWlPaU)|(?PcWEzVWlPaU)|(?PcWQyc2lPb)|(?PcGMzTWlPaU)|(?PcGRpSTZJ)|(?PcmFXUWlP)|(?PclpYbGZiM0J6SWpwY)|(?PcmRIa2lPaUp)|(?PdWIyNWpaU0k2)|(?Pd01tTWlP)|(?Pd01uTWlPaU)|(?Pd2NIUWlPaU)|(?PemRXSWlPaU)|(?PemRuUWlP)|(?PMFlXY2lPaU)|(?PMGVYQWlPaUp)|(?PMWNtd2l)|(?P