diff --git a/packages/core/src/api.js b/packages/core/src/api.js index 9455b214b..b19895f8a 100644 --- a/packages/core/src/api.js +++ b/packages/core/src/api.js @@ -228,9 +228,11 @@ export function createPercyServer(percy, port) { body = Buffer.isBuffer(body) ? body.toString() : body; if (cmd === 'reset') { - // the reset command will reset testing mode and clear any logs + // Sync clearMemory — the HTTP handler must return synchronously + // and tearing down the disk writer mid-request would race with + // concurrent log writes. percy.testing = {}; - logger.instance.messages.clear(); + logger.clearMemory(); } else if (cmd === 'version') { // the version command will update the api version header for testing percy.testing.version = body; @@ -260,9 +262,9 @@ export function createPercyServer(percy, port) { .route('get', '/test/requests', (req, res) => res.json(200, { requests: percy.testing.requests })) - // returns an array of raw logs from the logger + // in-memory view only; callers needing disk-backed enumeration use readBack() .route('get', '/test/logs', (req, res) => res.json(200, { - logs: Array.from(logger.instance.messages) + logs: logger.toArray() })) // serves a very basic html page for testing snapshots .route('get', '/test/snapshot', (req, res) => { diff --git a/packages/core/src/percy.js b/packages/core/src/percy.js index 3f1a9eb48..4a669e1e6 100644 --- a/packages/core/src/percy.js +++ b/packages/core/src/percy.js @@ -1,6 +1,7 @@ import PercyClient from '@percy/client'; import PercyConfig from '@percy/config'; import logger from '@percy/logger'; +import { readBack } from '@percy/logger/internal'; import { getProxy } from '@percy/client/utils'; import Browser from './browser.js'; import Pako from 'pako'; @@ -9,7 +10,6 @@ import { generatePromise, yieldAll, yieldTo, - redactSecrets, detectSystemProxyAndLog, checkSDKVersion, processCorsIframes @@ -596,7 +596,6 @@ export class Percy { return syncMode; } - // This specific error will be hard coded async checkForNoSnapshotCommandError() { let isPercyStarted = false; let containsSnapshotTaken = false; @@ -682,16 +681,22 @@ export class Percy { async sendBuildLogs() { if (!process.env.PERCY_TOKEN) return; try { - const logsObject = { - clilogs: logger.query(log => !['ci'].includes(log.debug)) - }; - - // Only add CI logs if not disabled voluntarily. + // Stream directly from the on-disk JSONL (or memory fallback) so the + // POST body is the only unbounded-in-memory object, not a full copy + // of every entry. Redaction already happened at write-time. + const clilogs = []; + const cilogs = []; const sendCILogs = process.env.PERCY_CLIENT_ERROR_LOGS !== 'false'; - if (sendCILogs) { - const redactedContent = redactSecrets(logger.query(log => ['ci'].includes(log.debug))); - logsObject.cilogs = redactedContent; + + for await (const entry of readBack()) { + if (entry.debug === 'ci') { + if (sendCILogs) cilogs.push(entry); + } else { + clilogs.push(entry); + } } + + const logsObject = sendCILogs ? { clilogs, cilogs } : { clilogs }; const content = base64encode(Pako.gzip(JSON.stringify(logsObject))); const referenceId = this.build?.id ? `build_${this.build?.id}` : this.build?.id; const eventObject = { @@ -701,7 +706,6 @@ export class Percy { service_name: 'cli', base64encoded: true }; - // Ignore this will update once I implement logs controller. const logsSHA = await this.client.sendBuildLogs(eventObject); this.log.info(`Build's CLI${sendCILogs ? ' and CI' : ''} logs sent successfully. Please share this log ID with Percy team in case of any issues - ${logsSHA}`); } catch (err) { diff --git a/packages/core/src/secretPatterns.yml b/packages/core/src/secretPatterns.yml deleted file mode 100644 index 12bc3e089..000000000 --- a/packages/core/src/secretPatterns.yml +++ /dev/null @@ -1,7024 +0,0 @@ -# Attribution for the Secrets Patterns Database: -# Title: Secrets Patterns Database -# Author: Mazen A. (@mazen160) -# Source: https://github.com/mazen160/secrets-patterns-db -# License: Creative Commons Attribution Share Alike 4.0 International License (CC BY-SA 4.0) https://github.com/mazen160/secrets-patterns-db/blob/master/LICENSE.md -# Modifications: Merged rules-stable and pii-stable.yml and removed some unwanted patterns as per need. - -patterns: - - pattern: - name: AWS API Gateway - regex: '[0-9a-z]+.execute-api.[0-9a-z._-]+.amazonaws.com' - - - pattern: - name: AWS API Key - regex: AKIA[0-9A-Z]{16} - - - pattern: - name: AWS ARN - regex: arn:aws:[a-z0-9-]+:[a-z]{2}-[a-z]+-[0-9]+:[0-9]+:.+ - - - pattern: - name: AWS Access Key ID Value - regex: (A3T[A-Z0-9]|AKIA|AGPA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16} - - - pattern: - name: AWS AppSync GraphQL Key - regex: da2-[a-z0-9]{26} - - - pattern: - name: AWS EC2 External - regex: ec2-[0-9a-z._-]+.compute(-1)?.amazonaws.com - - - pattern: - name: AWS EC2 Internal - regex: '[0-9a-z._-]+.compute(-1)?.internal' - - - pattern: - name: AWS ELB - regex: '[0-9a-z._-]+.elb.amazonaws.com' - - - pattern: - name: AWS ElasticCache - regex: '[0-9a-z._-]+.cache.amazonaws.com' - - - pattern: - name: AWS MWS ID - regex: mzn\.mws\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} - - - pattern: - name: AWS MWS key - regex: amzn\.mws\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} - - - pattern: - name: AWS RDS - regex: '[0-9a-z._-]+.rds.amazonaws.com' - - - pattern: - name: AWS S3 Bucket - regex: s3://[0-9a-z._/-]+ - - - pattern: - name: AWS client ID - regex: (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16} - - - pattern: - name: AWS cred file info - regex: (aws_access_key_id|aws_secret_access_key) - - - pattern: - name: Abbysale - regex: (?:abbysale).{0,40}\b([a-z0-9A-Z]{40})\b - - - pattern: - name: Abstract - regex: (?:abstract).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Abuseipdb - regex: (?:abuseipdb).{0,40}\b([a-z0-9]{80})\b - - - pattern: - name: Accuweather - regex: (?:accuweather).{0,40}([a-z0-9A-Z\%]{35})\b - - - pattern: - name: Adafruitio - regex: \b(aio\_[a-zA-Z0-9]{28})\b - - - pattern: - name: Adobeio - 1 - regex: (?:adobe).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Adzuna - 1 - regex: (?:adzuna).{0,40}\b([a-z0-9]{8})\b - - - pattern: - name: Adzuna - 2 - regex: (?:adzuna).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Aeroworkflow - 1 - regex: (?:aeroworkflow).{0,40}\b([0-9]{1,})\b - - - pattern: - name: Aeroworkflow - 2 - regex: (?:aeroworkflow).{0,40}\b([a-zA-Z0-9^!]{20})\b - - - pattern: - name: Agora - regex: (?:agora).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Airbrakeprojectkey - 1 - regex: (?:airbrake).{0,40}\b([0-9]{6})\b - - - pattern: - name: Airbrakeprojectkey - 2 - regex: (?:airbrake).{0,40}\b([a-zA-Z-0-9]{32})\b - - - pattern: - name: Airbrakeuserkey - regex: (?:airbrake).{0,40}\b([a-zA-Z-0-9]{40})\b - - - pattern: - name: Airship - regex: (?:airship).{0,40}\b([0-9Aa-zA-Z]{91})\b - - - pattern: - name: Airvisual - regex: (?:airvisual).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Alconost - regex: (?:alconost).{0,40}\b([0-9Aa-z]{32})\b - - - pattern: - name: Alegra - 1 - regex: (?:alegra).{0,40}\b([a-z0-9-]{20})\b - - - pattern: - name: Alegra - 2 - regex: (?:alegra).{0,40}\b([a-zA-Z0-9.-@]{25,30})\b - - - pattern: - name: Aletheiaapi - regex: (?:aletheiaapi).{0,40}\b([A-Z0-9]{32})\b - - - pattern: - name: Algoliaadminkey - 1 - regex: (?:algolia).{0,40}\b([A-Z0-9]{10})\b - - - pattern: - name: Algoliaadminkey - 2 - regex: (?:algolia).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Alibaba - 2 - regex: \b(LTAI[a-zA-Z0-9]{17,21})[\"' ;\s]* - - - pattern: - name: Alienvault - regex: (?:alienvault).{0,40}\b([a-z0-9]{64})\b - - - pattern: - name: Allsports - regex: (?:allsports).{0,40}\b([0-9a-z]{64})\b - - - pattern: - name: Amadeus - 1 - regex: (?:amadeus).{0,40}\b([0-9A-Za-z]{32})\b - - - pattern: - name: Amadeus - 2 - regex: (?:amadeus).{0,40}\b([0-9A-Za-z]{16})\b - - - pattern: - name: Amazon SNS Topic - regex: arn:aws:sns:[a-z0-9\-]+:[0-9]+:[A-Za-z0-9\-_]+ - - - pattern: - name: Ambee - regex: (?:ambee).{0,40}\b([0-9a-f]{64})\b - - - pattern: - name: Amplitudeapikey - regex: (?:amplitude).{0,40}\b([a-f0-9]{32}) - - - pattern: - name: Apacta - regex: (?:apacta).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Api2cart - regex: (?:api2cart).{0,40}\b([0-9a-f]{32})\b - - - pattern: - name: Apideck - 1 - regex: \b(sk_live_[a-z0-9A-Z-]{93})\b - - - pattern: - name: Apideck - 2 - regex: (?:apideck).{0,40}\b([a-z0-9A-Z]{40})\b - - - pattern: - name: Apiflash - 1 - regex: (?:apiflash).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Apiflash - 2 - regex: (?:apiflash).{0,40}\b([a-zA-Z0-9\S]{21,30})\b - - - pattern: - name: Apifonica - regex: (?:apifonica).{0,40}\b([0-9a-z]{11}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\b - - - pattern: - name: Apify - regex: \b(apify\_api\_[a-zA-Z-0-9]{36})\b - - - pattern: - name: Apimatic - 1 - regex: (?:apimatic).{0,40}\b([a-z0-9-\S]{8,32})\b - - - pattern: - name: Apimatic - 2 - regex: (?:apimatic).{0,40}\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\b - - - pattern: - name: Apiscience - regex: (?:apiscience).{0,40}\b([a-bA-Z0-9\S]{22})\b - - - pattern: - name: Apollo - regex: (?:apollo).{0,40}\b([a-zA-Z0-9]{22})\b - - - pattern: - name: Appcues - 1 - regex: (?:appcues).{0,40}\b([0-9]{5})\b - - - pattern: - name: Appcues - 2 - regex: (?:appcues).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Appcues - 3 - regex: (?:appcues).{0,40}\b([a-z0-9-]{39})\b - - - pattern: - name: Appfollow - regex: (?:appfollow).{0,40}\b([0-9A-Za-z]{20})\b - - - pattern: - name: Appsynergy - regex: (?:appsynergy).{0,40}\b([a-z0-9]{64})\b - - - pattern: - name: Apptivo - 1 - regex: (?:apptivo).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Apptivo - 2 - regex: (?:apptivo).{0,40}\b([a-zA-Z0-9-]{32})\b - - - pattern: - name: Artifactory - 2 - regex: \b([A-Za-z0-9](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])\.jfrog\.io) - - - pattern: - name: Artifactory API Token - regex: (?:\s|=|:|"|^)AKC[a-zA-Z0-9]{10,} - - - pattern: - name: Artifactory Password - regex: (?:\s|=|:|"|^)AP[\dABCDEF][a-zA-Z0-9]{8,} - - - pattern: - name: Artsy - 1 - regex: (?:artsy).{0,40}\b([0-9a-zA-Z]{20})\b - - - pattern: - name: Artsy - 2 - regex: (?:artsy).{0,40}\b([0-9a-zA-Z]{32})\b - - - pattern: - name: Asanaoauth - regex: (?:asana).{0,40}\b([a-z\/:0-9]{51})\b - - - pattern: - name: Asanapersonalaccesstoken - regex: (?:asana).{0,40}\b([0-9]{1,}\/[0-9]{16,}:[A-Za-z0-9]{32,})\b - - - pattern: - name: Assemblyai - regex: (?:assemblyai).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Asymmetric Private Key - regex: '-----BEGIN ((EC|PGP|DSA|RSA|OPENSSH) )?PRIVATE KEY( BLOCK)?-----' - - - pattern: - name: Audd - regex: (?:audd).{0,40}\b([a-z0-9-]{32})\b - - - pattern: - name: Auth0managementapitoken - regex: (?:auth0).{0,40}\b(ey[a-zA-Z0-9._-]+)\b - - - pattern: - name: Auth0oauth - 1 - regex: (?:auth0).{0,40}\b([a-zA-Z0-9_-]{32,60})\b - - - pattern: - name: Autodesk - 1 - regex: (?:autodesk).{0,40}\b([0-9A-Za-z]{32})\b - - - pattern: - name: Autodesk - 2 - regex: (?:autodesk).{0,40}\b([0-9A-Za-z]{16})\b - - - pattern: - name: Autoklose - regex: (?:autoklose).{0,40}\b([a-zA-Z0-9-]{32})\b - - - pattern: - name: Autopilot - regex: (?:autopilot).{0,40}\b([0-9a-f]{32})\b - - - pattern: - name: Avazapersonalaccesstoken - regex: (?:avaza).{0,40}\b([0-9]+-[0-9a-f]{40})\b - - - pattern: - name: Aviationstack - regex: (?:aviationstack).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Aws - 1 - regex: \b((?:AKIA|ABIA|ACCA|ASIA)[0-9A-Z]{16})\b - - - pattern: - name: Axonaut - regex: (?:axonaut).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Aylien - 1 - regex: (?:aylien).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Aylien - 2 - regex: (?:aylien).{0,40}\b([a-z0-9]{8})\b - - - pattern: - name: Ayrshare - regex: (?:ayrshare).{0,40}\b([A-Z]{7}-[A-Z0-9]{7}-[A-Z0-9]{7}-[A-Z0-9]{7})\b - - - pattern: - name: Bannerbear - regex: (?:bannerbear).{0,40}\b([0-9a-zA-Z]{22}tt)\b - - - pattern: - name: Baremetrics - regex: (?:baremetrics).{0,40}\b([a-zA-Z0-9_]{25})\b - - - pattern: - name: Baseapiio - regex: (?:baseapi|base-api).{0,40}\b([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\b - - - pattern: - name: Beamer - regex: (?:beamer).{0,40}\b([a-zA-Z0-9_+/]{45}=) - - - pattern: - name: Bearer token - regex: (bearer).+ - - - pattern: - name: Beebole - regex: (?:beebole).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Besttime - regex: (?:besttime).{0,40}\b([0-9A-Za-z_]{36})\b - - - pattern: - name: Billomat - 1 - regex: (?:billomat).{0,40}\b([0-9a-z]{1,})\b - - - pattern: - name: Billomat - 2 - regex: (?:billomat).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Bitbar - regex: (?:bitbar).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Bitcoinaverage - regex: (?:bitcoinaverage).{0,40}\b([a-zA-Z0-9]{43})\b - - - pattern: - name: Bitfinex - regex: (?:bitfinex).{0,40}\b([A-Za-z0-9_-]{43})\b - - - pattern: - name: Bitly Secret Key - regex: R_[0-9a-f]{32} - - - pattern: - name: Bitlyaccesstoken - regex: (?:bitly).{0,40}\b([a-zA-Z-0-9]{40})\b - - - pattern: - name: Bitmex - 1 - regex: (?:bitmex).{0,40}([ \r\n]{1}[0-9a-zA-Z\-\_]{24}[ \r\n]{1}) - - - pattern: - name: Bitmex - 2 - regex: (?:bitmex).{0,40}([ \r\n]{1}[0-9a-zA-Z\-\_]{48}[ \r\n]{1}) - - - pattern: - name: Blablabus - regex: (?:blablabus).{0,40}\b([0-9A-Za-z]{22})\b - - - pattern: - name: Blazemeter - regex: (?:blazemeter|runscope).{0,40}\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\b - - - pattern: - name: Blitapp - regex: (?:blitapp).{0,40}\b([a-zA-Z0-9_-]{39})\b - - - pattern: - name: Blogger - regex: (?:blogger).{0,40}\b([0-9A-Za-z-]{39})\b - - - pattern: - name: Bombbomb - regex: (?:bombbomb).{0,40}\b([a-zA-Z0-9-._]{704})\b - - - pattern: - name: Boostnote - regex: (?:boostnote).{0,40}\b([0-9a-f]{64})\b - - - pattern: - name: Borgbase - regex: (?:borgbase).{0,40}\b([a-zA-Z0-9/_.-]{148,152})\b - - - pattern: - name: Braintree API Key - regex: access_token$production$[0-9a-z]{16}$[0-9a-f]{32} - - - pattern: - name: Brandfetch - regex: (?:brandfetch).{0,40}\b([0-9A-Za-z]{40})\b - - - pattern: - name: Browshot - regex: (?:browshot).{0,40}\b([a-zA-Z-0-9]{28})\b - - - pattern: - name: Buddyns - regex: (?:buddyns).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Bugherd - regex: (?:bugherd).{0,40}\b([0-9a-z]{22})\b - - - pattern: - name: Bugsnag - regex: (?:bugsnag).{0,40}\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\b - - - pattern: - name: Buildkite - regex: (?:buildkite).{0,40}\b([a-z0-9]{40})\b - - - pattern: - name: Bulbul - regex: (?:bulbul).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Buttercms - regex: (?:buttercms).{0,40}\b([a-z0-9]{40})\b - - - pattern: - name: Caflou - regex: (?:caflou).{0,40}\b([a-bA-Z0-9\S]{155})\b - - - pattern: - name: Calendarific - regex: (?:calendarific).{0,40}\b([a-z0-9]{40})\b - - - pattern: - name: Calendlyapikey - regex: (?:calendly).{0,40}\b([a-zA-Z-0-9]{20}.[a-zA-Z-0-9]{171}.[a-zA-Z-0-9_]{43})\b - - - pattern: - name: Calorieninja - regex: (?:calorieninja).{0,40}\b([0-9A-Za-z]{40})\b - - - pattern: - name: Campayn - regex: (?:campayn).{0,40}\b([a-z0-9]{64})\b - - - pattern: - name: Cannyio - regex: (?:canny).{0,40}\b([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[0-9]{4}-[a-z0-9]{12})\b - - - pattern: - name: Capsulecrm - regex: (?:capsulecrm).{0,40}\b([a-zA-Z0-9-._+=]{64})\b - - - pattern: - name: Captaindata - 1 - regex: (?:captaindata).{0,40}\b([0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12})\b - - - pattern: - name: Captaindata - 2 - regex: (?:captaindata).{0,40}\b([0-9a-f]{64})\b - - - pattern: - name: Carboninterface - regex: (?:carboninterface).{0,40}\b([a-zA-Z0-9]{21})\b - - - pattern: - name: Cashboard - 1 - regex: (?:cashboard).{0,40}\b([0-9A-Z]{3}-[0-9A-Z]{3}-[0-9A-Z]{3}-[0-9A-Z]{3})\b - - - pattern: - name: Cashboard - 2 - regex: (?:cashboard).{0,40}\b([0-9a-z]{1,})\b - - - pattern: - name: Caspio - 1 - regex: (?:caspio).{0,40}\b([a-z0-9]{8})\b - - - pattern: - name: Caspio - 2 - regex: (?:caspio).{0,40}\b([a-z0-9]{50})\b - - - pattern: - name: Censys - 1 - regex: (?:censys).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Censys - 2 - regex: (?:censys).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Centralstationcrm - regex: (?:centralstation).{0,40}\b([a-z0-9]{30})\b - - - pattern: - name: Cexio - 1 - regex: (?:cexio|cex.io).{0,40}\b([a-z]{2}[0-9]{9})\b - - - pattern: - name: Cexio - 2 - regex: (?:cexio|cex.io).{0,40}\b([0-9A-Za-z]{24,27})\b - - - pattern: - name: Chatbot - regex: (?:chatbot).{0,40}\b([a-zA-Z0-9_]{32})\b - - - pattern: - name: Chatfule - regex: (?:chatfuel).{0,40}\b([a-zA-Z0-9]{128})\b - - - pattern: - name: Checio - regex: (?:checio).{0,40}\b(pk_[a-z0-9]{45})\b - - - pattern: - name: Checklyhq - regex: (?:checklyhq).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Checkout - 1 - regex: (?:checkout).{0,40}\b((sk_|sk_test_)[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\b - - - pattern: - name: Checkout - 2 - regex: (?:checkout).{0,40}\b(cus_[0-9a-zA-Z]{26})\b - - - pattern: - name: Checkvist - 1 - regex: (?:checkvist).{0,40}\b([\w\.-]+@[\w-]+\.[\w\.-]{2,5})\b - - - pattern: - name: Checkvist - 2 - regex: (?:checkvist).{0,40}\b([0-9a-zA-Z]{14})\b - - - pattern: - name: Cicero - regex: (?:cicero).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Circleci - regex: (?:circle).{0,40}([a-fA-F0-9]{40}) - - - pattern: - name: Clearbit - regex: (?:clearbit).{0,40}\b([0-9a-z_]{35})\b - - - pattern: - name: Clickhelp - 1 - regex: \b([0-9A-Za-z]{3,20}.try.clickhelp.co)\b - - - pattern: - name: Clickhelp - 2 - regex: (?:clickhelp).{0,40}\b([0-9A-Za-z]{24})\b - - - pattern: - name: Clicksendsms - 2 - regex: (?:sms).{0,40}\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\b - - - pattern: - name: Clickuppersonaltoken - regex: (?:clickup).{0,40}\b(pk_[0-9]{8}_[0-9A-Z]{32})\b - - - pattern: - name: Cliengo - regex: (?:cliengo).{0,40}\b([0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12})\b - - - pattern: - name: Clinchpad - regex: (?:clinchpad).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Clockify - regex: (?:clockify).{0,40}\b([a-zA-Z0-9]{48})\b - - - pattern: - name: Clockworksms - 1 - regex: (?:clockwork|textanywhere).{0,40}\b([0-9a-zA-Z]{24})\b - - - pattern: - name: Clockworksms - 2 - regex: (?:clockwork|textanywhere).{0,40}\b([0-9]{5})\b - - - pattern: - name: Closecrm - regex: \b(api_[a-z0-9A-Z.]{45})\b - - - pattern: - name: Cloudelements - 1 - regex: (?:cloudelements).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Cloudelements - 2 - regex: (?:cloudelements).{0,40}\b([a-zA-Z0-9]{43})\b - - - pattern: - name: Cloudflareapitoken - regex: (?:cloudflare).{0,40}\b([A-Za-z0-9_-]{40})\b - - - pattern: - name: Cloudflarecakey - regex: (?:cloudflare).{0,40}\b(v[A-Za-z0-9._-]{173,})\b - - - pattern: - name: Cloudimage - regex: (?:cloudimage).{0,40}\b([a-z0-9_]{30})\b - - - pattern: - name: Cloudinary Credentials - regex: cloudinary://[0-9]+:[A-Za-z0-9\-_\.]+@[A-Za-z0-9\-_\.]+ - - - pattern: - name: Cloudmersive - regex: (?:cloudmersive).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Cloudplan - regex: (?:cloudplan).{0,40}\b([A-Z0-9-]{32})\b - - - pattern: - name: Cloverly - regex: (?:cloverly).{0,40}\b([a-z0-9:_]{28})\b - - - pattern: - name: Cloze - 1 - regex: (?:cloze).{0,40}\b([0-9a-f]{32})\b - - - pattern: - name: Cloze - 2 - regex: (?:cloze).{0,40}\b([\w\.-]+@[\w-]+\.[\w\.-]{2,5})\b - - - pattern: - name: Clustdoc - regex: (?:clustdoc).{0,40}\b([0-9a-zA-Z]{60})\b - - - pattern: - name: Codacy - regex: (?:codacy).{0,40}\b([0-9A-Za-z]{20})\b - - - pattern: - name: Coinapi - regex: (?:coinapi).{0,40}\b([A-Z0-9-]{36})\b - - - pattern: - name: Coinbase - regex: (?:coinbase).{0,40}\b([a-zA-Z-0-9]{64})\b - - - pattern: - name: Coinlayer - regex: (?:coinlayer).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Coinlib - regex: (?:coinlib).{0,40}\b([a-z0-9]{16})\b - - - pattern: - name: Column - regex: (?:column).{0,40}\b((?:test|live)_[a-zA-Z0-9]{27})\b - - - pattern: - name: Commercejs - regex: (?:commercejs).{0,40}\b([a-z0-9_]{48})\b - - - pattern: - name: Commodities - regex: (?:commodities).{0,40}\b([a-zA-Z0-9]{60})\b - - - pattern: - name: Companyhub - 1 - regex: (?:companyhub).{0,40}\b([0-9a-zA-Z]{20})\b - - - pattern: - name: Companyhub - 2 - regex: (?:companyhub).{0,40}\b([a-zA-Z0-9$%^=-]{4,32})\b - - - pattern: - name: Confluent - 1 - regex: (?:confluent).{0,40}\b([a-zA-Z-0-9]{16})\b - - - pattern: - name: Confluent - 2 - regex: (?:confluent).{0,40}\b([a-zA-Z-0-9]{64})\b - - - pattern: - name: Convertkit - regex: (?:convertkit).{0,40}\b([a-z0-9A-Z_]{22})\b - - - pattern: - name: Convier - regex: (?:convier).{0,40}\b([0-9]{2}\|[a-zA-Z0-9]{40})\b - - - pattern: - name: Copper - 2 - regex: (?:copper).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Countrylayer - regex: (?:countrylayer).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Courier - regex: (?:courier).{0,40}\b(pk\_[a-zA-Z0-9]{1,}\_[a-zA-Z0-9]{28})\b - - - pattern: - name: Coveralls - regex: (?:coveralls).{0,40}\b([a-zA-Z0-9-]{37})\b - - - pattern: - name: Crowdin - regex: (?:crowdin).{0,40}\b([0-9A-Za-z]{80})\b - - - pattern: - name: Cryptocompare - regex: (?:cryptocompare).{0,40}\b([a-z-0-9]{64})\b - - - pattern: - name: Currencycloud - 1 - regex: (?:currencycloud).{0,40}\b([0-9a-z]{64})\b - - - pattern: - name: Currencyfreaks - regex: (?:currencyfreaks).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Currencylayer - regex: (?:currencylayer).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Currencyscoop - regex: (?:currencyscoop).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Currentsapi - regex: (?:currentsapi).{0,40}\b([a-zA-Z0-9\S]{48})\b - - - pattern: - name: Customerguru - 1 - regex: (?:guru).{0,40}\b([a-z0-9A-Z]{50})\b - - - pattern: - name: Customerguru - 2 - regex: (?:guru).{0,40}\b([a-z0-9A-Z]{30})\b - - - pattern: - name: Customerio - regex: (?:customer).{0,40}\b([a-z0-9A-Z]{20})\b - - - pattern: - name: D7network - regex: (?:d7network).{0,40}\b([a-zA-Z0-9\W\S]{23}\=) - - - pattern: - name: Dailyco - regex: (?:daily).{0,40}\b([0-9a-f]{64})\b - - - pattern: - name: Dandelion - regex: (?:dandelion).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Databricks - regex: dapi[a-f0-9]{32}\b - - - pattern: - name: Datadogtoken - 1 - regex: (?:datadog).{0,40}\b([a-zA-Z-0-9]{32})\b - - - pattern: - name: Datadogtoken - 2 - regex: (?:datadog).{0,40}\b([a-zA-Z-0-9]{40})\b - - - pattern: - name: Datafire - regex: (?:datafire).{0,40}\b([a-z0-9\S]{175,190})\b - - - pattern: - name: Datagov - regex: (?:data.gov).{0,40}\b([a-zA-Z0-9]{40})\b - - - pattern: - name: Debounce - regex: (?:debounce).{0,40}\b([a-zA-Z0-9]{13})\b - - - pattern: - name: Deepai - regex: (?:deepai).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Deepgram - regex: (?:deepgram).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Delighted - regex: (?:delighted).{0,40}\b([a-z0-9A-Z]{32})\b - - - pattern: - name: Deputy - 1 - regex: \b([0-9a-z]{1,}.as.deputy.com)\b - - - pattern: - name: Deputy - 2 - regex: (?:deputy).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Detectlanguage - regex: (?:detectlanguage).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Dfuse - regex: \b(web\_[0-9a-z]{32})\b - - - pattern: - name: Diffbot - regex: (?:diffbot).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Digitaloceantoken - regex: (?:digitalocean).{0,40}\b([A-Za-z0-9_-]{64})\b - - - pattern: - name: Discord Webhook - regex: https://discordapp\.com/api/webhooks/[0-9]+/[A-Za-z0-9\-]+ - - - pattern: - name: Discordbottoken - 1 - regex: (?:discord).{0,40}\b([A-Za-z0-9_-]{24}\.[A-Za-z0-9_-]{6}\.[A-Za-z0-9_-]{27})\b - - - pattern: - name: Discordbottoken - 2 - regex: (?:discord).{0,40}\b([0-9]{17})\b - - - pattern: - name: Discordwebhook - regex: (https:\/\/discord.com\/api\/webhooks\/[0-9]{18}\/[0-9a-zA-Z-]{68}) - - - pattern: - name: Ditto - regex: (?:ditto).{0,40}\b([a-z0-9]{8}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{12}\.[a-z0-9]{40})\b - - - pattern: - name: Dnscheck - 1 - regex: (?:dnscheck).{0,40}\b([a-z0-9A-Z-]{36})\b - - - pattern: - name: Dnscheck - 2 - regex: (?:dnscheck).{0,40}\b([a-z0-9A-Z]{32})\b - - - pattern: - name: Documo - regex: \b(ey[a-zA-Z0-9]{34}.ey[a-zA-Z0-9]{154}.[a-zA-Z0-9_-]{43})\b - - - pattern: - name: Doppler - regex: \b(dp\.pt\.[a-zA-Z0-9]{43})\b - - - pattern: - name: Dotmailer - 1 - regex: (?:dotmailer).{0,40}\b(apiuser-[a-z0-9]{12}@apiconnector.com)\b - - - pattern: - name: Dotmailer - 2 - regex: (?:dotmailer).{0,40}\b([a-zA-Z0-9\S]{8,24})\b - - - pattern: - name: Dovico - regex: (?:dovico).{0,40}\b([0-9a-z]{32}\.[0-9a-z]{1,}\b) - - - pattern: - name: Dronahq - regex: (?:dronahq).{0,40}\b([a-z0-9]{50})\b - - - pattern: - name: Droneci - regex: (?:droneci).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Dropbox - regex: \b(sl\.[A-Za-z0-9\-\_]{130,140})\b - - - pattern: - name: Dwolla - regex: (?:dwolla).{0,40}\b([a-zA-Z-0-9]{50})\b - - - pattern: - name: Dynalist - regex: (?:dynalist).{0,40}\b([a-zA-Z0-9-_]{128})\b - - - pattern: - name: Dynatrace token - regex: dt0[a-zA-Z]{1}[0-9]{2}\.[A-Z0-9]{24}\.[A-Z0-9]{64} - - - pattern: - name: Dyspatch - regex: (?:dyspatch).{0,40}\b([A-Z0-9]{52})\b - - - pattern: - name: EC - regex: '-----BEGIN EC PRIVATE KEY-----' - - - pattern: - name: Eagleeyenetworks - 1 - regex: (?:eagleeyenetworks).{0,40}\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\b - - - pattern: - name: Eagleeyenetworks - 2 - regex: (?:eagleeyenetworks).{0,40}\b([a-zA-Z0-9]{15})\b - - - pattern: - name: Easyinsight - 1 - regex: (?:easyinsight|easy-insight).{0,40}\b([a-zA-Z0-9]{20})\b - - - pattern: - name: Easyinsight - 2 - regex: (?:easyinsight|easy-insight).{0,40}\b([0-9Aa-zA-Z]{20})\b - - - pattern: - name: Edamam - 1 - regex: (?:edamam).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Edamam - 2 - regex: (?:edamam).{0,40}\b([0-9a-z]{8})\b - - - pattern: - name: Edenai - regex: (?:edenai).{0,40}\b([a-zA-Z0-9]{36}.[a-zA-Z0-9]{92}.[a-zA-Z0-9_]{43})\b - - - pattern: - name: Eightxeight - 1 - regex: (?:8x8).{0,40}\b([a-zA-Z0-9_]{18,30})\b - - - pattern: - name: Eightxeight - 2 - regex: (?:8x8).{0,40}\b([a-zA-Z0-9]{43})\b - - - pattern: - name: Elasticemail - regex: (?:elastic).{0,40}\b([A-Za-z0-9_-]{96})\b - - - pattern: - name: Enablex - 1 - regex: (?:enablex).{0,40}\b([a-zA-Z0-9]{36})\b - - - pattern: - name: Enablex - 2 - regex: (?:enablex).{0,40}\b([a-z0-9]{24})\b - - - pattern: - name: Enigma - regex: (?:enigma).{0,40}\b([a-zA-Z0-9]{40})\b - - - pattern: - name: Ethplorer - regex: (?:ethplorer).{0,40}\b([a-z0-9A-Z-]{22})\b - - - pattern: - name: Etsyapikey - regex: (?:etsy).{0,40}\b([a-zA-Z-0-9]{24})\b - - - pattern: - name: Everhour - regex: (?:everhour).{0,40}\b([0-9Aa-f]{4}-[0-9a-f]{4}-[0-9a-f]{6}-[0-9a-f]{6}-[0-9a-f]{8})\b - - - pattern: - name: Exchangerateapi - regex: (?:exchangerate).{0,40}\b([a-z0-9]{24})\b - - - pattern: - name: Exchangeratesapi - regex: (?:exchangerates).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: FCM Server Key - regex: AAAA[a-zA-Z0-9_-]{7}:[a-zA-Z0-9_-]{140} - - - pattern: - name: FCM_server_key - regex: (AAAA[a-zA-Z0-9_-]{7}:[a-zA-Z0-9_-]{140}) - - - pattern: - name: Facebook Access Token - regex: EAACEdEose0cBA[0-9A-Za-z]+ - - - pattern: - name: Facebook OAuth - regex: '[fF][aA][cC][eE][bB][oO][oO][kK].*[''|"][0-9a-f]{32}[''|"]' - - - pattern: - name: Facebookoauth - regex: (?:facebook).{0,40}\b([A-Za-z0-9]{32})\b - - - pattern: - name: Faceplusplus - regex: (?:faceplusplus).{0,40}\b([0-9a-zA-Z_-]{32})\b - - - pattern: - name: Fakejson - regex: (?:fakejson).{0,40}\b([a-zA-Z0-9]{22})\b - - - pattern: - name: Fastforex - regex: (?:fastforex).{0,40}\b([a-z0-9-]{28})\b - - - pattern: - name: Fastlypersonaltoken - regex: (?:fastly).{0,40}\b([A-Za-z0-9_-]{32})\b - - - pattern: - name: Feedier - regex: (?:feedier).{0,40}\b([a-z0-9A-Z]{32})\b - - - pattern: - name: Fetchrss - regex: (?:fetchrss).{0,40}\b([0-9A-Za-z.]{40})\b - - - pattern: - name: Figmapersonalaccesstoken - regex: (?:figma).{0,40}\b([0-9]{6}-[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\b - - - pattern: - name: Fileio - regex: (?:fileio).{0,40}\b([A-Z0-9.-]{39})\b - - - pattern: - name: Finage - regex: \b(API_KEY[0-9A-Z]{32})\b - - - pattern: - name: Financialmodelingprep - regex: (?:financialmodelingprep).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Findl - regex: (?:findl).{0,40}\b([a-z0-9]{8}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{12})\b - - - pattern: - name: Finnhub - regex: (?:finnhub).{0,40}\b([0-9a-z]{20})\b - - - pattern: - name: Firebase Database Detect - 1 - regex: '[a-z0-9.-]+\.firebaseio\.com' - - - pattern: - name: Firebase Database Detect - 2 - regex: '[a-z0-9.-]+\.firebaseapp\.com' - - - pattern: - name: Fixerio - regex: (?:fixer).{0,40}\b([A-Za-z0-9]{32})\b - - - pattern: - name: Flatio - regex: (?:flat).{0,40}\b([0-9a-z]{128})\b - - - pattern: - name: Fleetbase - regex: \b(flb_live_[0-9a-zA-Z]{20})\b - - - pattern: - name: Flickr - regex: (?:flickr).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Flightapi - regex: (?:flightapi).{0,40}\b([a-z0-9]{24})\b - - - pattern: - name: Flightstats - 1 - regex: (?:flightstats).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Flightstats - 2 - regex: (?:flightstats).{0,40}\b([0-9a-z]{8})\b - - - pattern: - name: Float - regex: (?:float).{0,40}\b([a-zA-Z0-9-._+=]{59,60})\b - - - pattern: - name: Flowflu - 2 - regex: (?:flowflu).{0,40}\b([a-zA-Z0-9]{51})\b - - - pattern: - name: Flutterwave - regex: \b(FLWSECK-[0-9a-z]{32}-X)\b - - - pattern: - name: Fmfw - 1 - regex: (?:fmfw).{0,40}\b([a-zA-Z0-9-]{32})\b - - - pattern: - name: Fmfw - 2 - regex: (?:fmfw).{0,40}\b([a-zA-Z0-9_-]{32})\b - - - pattern: - name: Formbucket - regex: (?:formbucket).{0,40}\b([0-9A-Za-z]{1,}.[0-9A-Za-z]{1,}\.[0-9A-Z-a-z\-_]{1,}) - - - pattern: - name: Formio - regex: (?:formio).{0,40}\b(eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\.[0-9A-Za-z]{310}\.[0-9A-Z-a-z\-_]{43}[ - \r\n]{1}) - - - pattern: - name: Foursquare - regex: (?:foursquare).{0,40}\b([0-9A-Z]{48})\b - - - pattern: - name: Frameio - regex: \b(fio-u-[0-9a-zA-Z_-]{64})\b - - - pattern: - name: Freshbooks - 1 - regex: (?:freshbooks).{0,40}\b([0-9a-z]{64})\b - - - pattern: - name: Freshbooks - 2 - regex: (?:freshbooks).{0,40}\b(https://www.[0-9A-Za-z_-]{1,}.com)\b - - - pattern: - name: Freshdesk - 1 - regex: (?:freshdesk).{0,40}\b([0-9A-Za-z]{20})\b - - - pattern: - name: Freshdesk - 2 - regex: \b([0-9a-z-]{1,}.freshdesk.com)\b - - - pattern: - name: Front - regex: (?:front).{0,40}\b([0-9a-zA-Z]{36}.[0-9a-zA-Z\.\-\_]{188,244})\b - - - pattern: - name: Fulcrum - regex: (?:fulcrum).{0,40}\b([a-z0-9]{80})\b - - - pattern: - name: Fullstory - regex: (?:fullstory).{0,40}\b([a-zA-Z-0-9/+]{88})\b - - - pattern: - name: Fusebill - regex: (?:fusebill).{0,40}\b([a-zA-Z0-9]{88})\b - - - pattern: - name: Fxmarket - regex: (?:fxmarket).{0,40}\b([0-9Aa-zA-Z-_=]{20})\b - - - pattern: - name: Gcp - regex: \{[^{]+auth_provider_x509_cert_url[^}]+\} - - - pattern: - name: Geckoboard - regex: (?:geckoboard).{0,40}\b([a-zA-Z0-9]{44})\b - - - pattern: - name: Generic - 1376 - regex: jdbc:mysql(=| =|:| :) - - - pattern: - name: Generic - 1688 - regex: TOKEN[\\-|_|A-Z0-9]*(\'|\")?(:|=)(\'|\")?[\\-|_|A-Z0-9]{10} - - - pattern: - name: Generic - 1689 - regex: API[\\-|_|A-Z0-9]*(\'|\")?(:|=)(\'|\")?[\\-|_|A-Z0-9]{10} - - - pattern: - name: Generic - 1691 - regex: SECRET[\\-|_|A-Z0-9]*(\'|\")?(:|=)(\'|\")?[\\-|_|A-Z0-9]{10} - - - pattern: - name: Generic - 1692 - regex: AUTHORIZATION[\\-|_|A-Z0-9]*(\'|\")?(:|=)(\'|\")?[\\-|_|A-Z0-9]{10} - - - pattern: - name: Generic - 1693 - regex: PASSWORD[\\-|_|A-Z0-9]*(\'|\")?(:|=)(\'|\")?[\\-|_|A-Z0-9]{10} - - - pattern: - name: Generic - 1695 - regex: (A|a)(P|p)(Ii)[\-|_|A-Za-z0-9]*(\''|")?( )*(:|=)( )*(\''|")?[0-9A-Za-z\-_]+(\''|")? - - - pattern: - name: Generic - 1700 - regex: BEGIN OPENSSH PRIVATE KEY - - - pattern: - name: Generic - 1701 - regex: BEGIN PRIVATE KEY - - - pattern: - name: Generic - 1702 - regex: BEGIN RSA PRIVATE KEY - - - pattern: - name: Generic - 1703 - regex: BEGIN DSA PRIVATE KEY - - - pattern: - name: Generic - 1704 - regex: BEGIN EC PRIVATE KEY - - - pattern: - name: Generic - 1705 - regex: BEGIN PGP PRIVATE KEY BLOCK - - - pattern: - name: Generic - 1707 - regex: '[a-z0-9.-]+\.s3-[a-z0-9-]\.amazonaws\.com' - - - pattern: - name: Generic - 1708 - regex: '[a-z0-9.-]+\.s3-website[.-](eu|ap|us|ca|sa|cn)' - - - pattern: - name: Generic - 1710 - regex: algolia_api_key - - - pattern: - name: Generic - 1711 - regex: asana_access_token - - - pattern: - name: Generic - 1713 - regex: azure_tenant - - - pattern: - name: Generic - 1714 - regex: bitly_access_token - - - pattern: - name: Generic - 1715 - regex: branchio_secret - - - pattern: - name: Generic - 1716 - regex: browserstack_access_key - - - pattern: - name: Generic - 1717 - regex: buildkite_access_token - - - pattern: - name: Generic - 1718 - regex: comcast_access_token - - - pattern: - name: Generic - 1719 - regex: datadog_api_key - - - pattern: - name: Generic - 1720 - regex: deviantart_secret - - - pattern: - name: Generic - 1721 - regex: deviantart_access_token - - - pattern: - name: Generic - 1722 - regex: dropbox_api_token - - - pattern: - name: Generic - 1723 - regex: facebook_appsecret - - - pattern: - name: Generic - 1724 - regex: facebook_access_token - - - pattern: - name: Generic - 1725 - regex: firebase_custom_token - - - pattern: - name: Generic - 1726 - regex: firebase_id_token - - - pattern: - name: Generic - 1727 - regex: github_client - - - pattern: - name: Generic - 1728 - regex: github_ssh_key - - - pattern: - name: Generic - 1730 - regex: gitlab_private_token - - - pattern: - name: Generic - 1731 - regex: google_cm - - - pattern: - name: Generic - 1732 - regex: google_maps_key - - - pattern: - name: Generic - 1733 - regex: heroku_api_key - - - pattern: - name: Generic - 1734 - regex: instagram_access_token - - - pattern: - name: Generic - 1735 - regex: mailchimp_api_key - - - pattern: - name: Generic - 1736 - regex: mailgun_api_key - - - pattern: - name: Generic - 1737 - regex: mailjet - - - pattern: - name: Generic - 1738 - regex: mapbox_access_token - - - pattern: - name: Generic - 1739 - regex: pagerduty_api_token - - - pattern: - name: Generic - 1740 - regex: paypal_key_sb - - - pattern: - name: Generic - 1741 - regex: paypal_key_live - - - pattern: - name: Generic - 1742 - regex: paypal_token_sb - - - pattern: - name: Generic - 1743 - regex: paypal_token_live - - - pattern: - name: Generic - 1744 - regex: pendo_integration_key - - - pattern: - name: Generic - 1745 - regex: salesforce_access_token - - - pattern: - name: Generic - 1746 - regex: saucelabs_ukey - - - pattern: - name: Generic - 1747 - regex: sendgrid_api_key - - - pattern: - name: Generic - 1748 - regex: slack_api_token - - - pattern: - name: Generic - 1749 - regex: slack_webhook - - - pattern: - name: Generic - 1750 - regex: square_secret - - - pattern: - name: Generic - 1751 - regex: square_auth_token - - - pattern: - name: Generic - 1752 - regex: travisci_api_token - - - pattern: - name: Generic - 1753 - regex: twilio_sid_token - - - pattern: - name: Generic - 1754 - regex: twitter_api_secret - - - pattern: - name: Generic - 1755 - regex: twitter_bearer_token - - - pattern: - name: Generic - 1756 - regex: spotify_access_token - - - pattern: - name: Generic - 1757 - regex: stripe_key_live - - - pattern: - name: Generic - 1758 - regex: wakatime_api_key - - - pattern: - name: Generic - 1759 - regex: wompi_auth_bearer_sb - - - pattern: - name: Generic - 1760 - regex: wompi_auth_bearer_live - - - pattern: - name: Generic - 1761 - regex: wpengine_api_key - - - pattern: - name: Generic - 1762 - regex: zapier_webhook - - - pattern: - name: Generic - 1763 - regex: zendesk_access_token - - - pattern: - name: Generic - 1764 - regex: ssh-rsa - - - pattern: - name: Generic - 1765 - regex: s3-[a-z0-9-]+\.amazonaws\.com/[a-z0-9._-]+ - - - pattern: - name: Generic Secret - regex: '[sS][eE][cC][rR][eE][tT].*[''|"][0-9a-zA-Z]{32,45}[''|"]' - - - pattern: - name: Generic webhook secret - regex: (webhook).+(secret|token|key).+ - - - pattern: - name: Gengo - regex: (?:gengo).{0,40}([ ]{0,1}[0-9a-zA-Z\[\]\-\(\)\{\}|_^@$=~]{64}[ \r\n]{1}) - - - pattern: - name: Geoapify - regex: (?:geoapify).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Geocode - regex: (?:geocode).{0,40}\b([a-z0-9]{28})\b - - - pattern: - name: Geocodify - regex: (?:geocodify).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Geocodio - 2 - regex: (?:geocod).{0,40}\b([a-z0-9]{39})\b - - - pattern: - name: Geoipifi - regex: (?:ipifi).{0,40}\b([a-z0-9A-Z_]{32})\b - - - pattern: - name: Getemail - regex: (?:getemail).{0,40}\b([a-zA-Z0-9-]{20})\b - - - pattern: - name: Getemails - 1 - regex: (?:getemails).{0,40}\b([a-z0-9-]{26})\b - - - pattern: - name: Getemails - 2 - regex: (?:getemails).{0,40}\b([a-z0-9-]{18})\b - - - pattern: - name: Getgeoapi - regex: (?:getgeoapi).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Getgist - regex: (?:getgist).{0,40}\b([a-z0-9A-Z+=]{68}) - - - pattern: - name: Getsandbox - 1 - regex: (?:getsandbox).{0,40}\b([a-z0-9-]{40})\b - - - pattern: - name: Getsandbox - 2 - regex: (?:getsandbox).{0,40}\b([a-z0-9-]{15,30})\b - - - pattern: - name: GitHub - regex: '[gG][iI][tT][hH][uU][bB].*[''|"][0-9a-zA-Z]{35,40}[''|"]' - - - pattern: - name: Github - 2 - regex: \b((?:ghp|gho|ghu|ghs|ghr)_[a-zA-Z0-9]{36,255}\b) - - - pattern: - name: Github App Token - regex: (ghu|ghs)_[0-9a-zA-Z]{36} - - - pattern: - name: Github OAuth Access Token - regex: gho_[0-9a-zA-Z]{36} - - - pattern: - name: Github Personal Access Token - regex: ghp_[0-9a-zA-Z]{36} - - - pattern: - name: Github Refresh Token - regex: ghr_[0-9a-zA-Z]{76} - - - pattern: - name: Github_old - regex: (?:github)[^\.].{0,40}[ =:'"]+([a-f0-9]{40})\b - - - pattern: - name: Githubapp - 1 - regex: (?:github).{0,40}\b([0-9]{6})\b - - - pattern: - name: Githubapp - 2 - regex: (?:github).{0,40}(-----BEGIN RSA PRIVATE KEY-----\s[A-Za-z0-9+\/\s]*\s-----END - RSA PRIVATE KEY-----) - - - pattern: - name: Gitlab - regex: (?:gitlab).{0,40}\b([a-zA-Z0-9\-=_]{20,22})\b - - - pattern: - name: Gitlabv2 - regex: \b(glpat-[a-zA-Z0-9\-=_]{20,22})\b - - - pattern: - name: Gitter - regex: (?:gitter).{0,40}\b([a-z0-9-]{40})\b - - - pattern: - name: Glassnode - regex: (?:glassnode).{0,40}\b([0-9A-Za-z]{27})\b - - - pattern: - name: Gocanvas - 1 - regex: (?:gocanvas).{0,40}\b([0-9A-Za-z/+]{43}=[ \r\n]{1}) - - - pattern: - name: Gocanvas - 2 - regex: (?:gocanvas).{0,40}\b([\w\.-]+@[\w-]+\.[\w\.-]{2,5})\b - - - pattern: - name: Gocardless - regex: \b(live_[0-9A-Za-z\_\-]{40}[ "'\r\n]{1}) - - - pattern: - name: Goodday - regex: (?:goodday).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Google (GCP) Service Account - regex: '"type": "service_account"' - - - pattern: - name: Google API Key - regex: AIza[0-9a-z-_]{35} - - - pattern: - name: Google Calendar URI - regex: https://www\.google\.com/calendar/embed\?src=[A-Za-z0-9%@&;=\-_\./]+ - - - pattern: - name: Google OAuth Access Token - regex: ya29\.[0-9A-Za-z\-_]+ - - - pattern: - name: Graphcms - 1 - regex: (?:graph).{0,40}\b([a-z0-9]{25})\b - - - pattern: - name: Graphcms - 2 - regex: \b(ey[a-zA-Z0-9]{73}.ey[a-zA-Z0-9]{365}.[a-zA-Z0-9_-]{683})\b - - - pattern: - name: Graphhopper - regex: (?:graphhopper).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Groovehq - regex: (?:groove).{0,40}\b([a-z0-9A-Z]{64}) - - - pattern: - name: Guru - 1 - regex: (?:guru).{0,40}\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\b - - - pattern: - name: Guru - 2 - regex: (?:guru).{0,40}\b([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\b - - - pattern: - name: Gyazo - regex: (?:gyazo).{0,40}\b([0-9A-Za-z-]{43})\b - - - pattern: - name: Happi - regex: (?:happi).{0,40}\b([a-zA-Z0-9]{56}) - - - pattern: - name: Happyscribe - regex: (?:happyscribe).{0,40}\b([0-9a-zA-Z]{24})\b - - - pattern: - name: Harvest - 1 - regex: (?:harvest).{0,40}\b([a-z0-9A-Z._]{97})\b - - - pattern: - name: Harvest - 2 - regex: (?:harvest).{0,40}\b([0-9]{4,9})\b - - - pattern: - name: Hellosign - regex: (?:hellosign).{0,40}\b([a-zA-Z-0-9/+]{64})\b - - - pattern: - name: Helpcrunch - regex: (?:helpcrunch).{0,40}\b([a-zA-Z-0-9+/=]{328}) - - - pattern: - name: Helpscout - regex: (?:helpscout).{0,40}\b([A-Za-z0-9]{56})\b - - - pattern: - name: Hereapi - regex: (?:hereapi).{0,40}\b([a-zA-Z0-9\S]{43})\b - - - pattern: - name: Heroku - regex: (?:heroku).{0,40}\b([0-9Aa-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\b - - - pattern: - name: Hive - 1 - regex: (?:hive).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Hive - 2 - regex: (?:hive).{0,40}\b([0-9A-Za-z]{17})\b - - - pattern: - name: Hiveage - regex: (?:hiveage).{0,40}\b([0-9A-Za-z\_\-]{20})\b - - - pattern: - name: Holidayapi - regex: (?:holidayapi).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Host - regex: (?:host).{0,40}\b([a-z0-9]{14})\b - - - pattern: - name: Html2pdf - regex: (?:html2pdf).{0,40}\b([a-zA-Z0-9]{64})\b - - - pattern: - name: Hubspotapikey - regex: (?:hubspot).{0,40}\b([A-Za-z0-9]{8}\-[A-Za-z0-9]{4}\-[A-Za-z0-9]{4}\-[A-Za-z0-9]{4}\-[A-Za-z0-9]{12})\b - - - pattern: - name: Humanity - regex: (?:humanity).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Hunter - regex: (?:hunter).{0,40}\b([a-z0-9_-]{40})\b - - - pattern: - name: Hypertrack - 1 - regex: (?:hypertrack).{0,40}\b([0-9a-zA-Z\_\-]{54})\b - - - pattern: - name: Hypertrack - 2 - regex: (?:hypertrack).{0,40}\b([0-9a-zA-Z\_\-]{27})\b - - - pattern: - name: Ibmclouduserkey - regex: (?:ibm).{0,40}\b([A-Za-z0-9_-]{44})\b - - - pattern: - name: Iconfinder - regex: (?:iconfinder).{0,40}\b([a-zA-Z0-9]{64})\b - - - pattern: - name: Iexcloud - regex: (?:iexcloud).{0,40}\b([a-z0-9_]{35})\b - - - pattern: - name: Imagekit - regex: (?:imagekit).{0,40}\b([a-zA-Z0-9_=]{36}) - - - pattern: - name: Imagga - regex: (?:imagga).{0,40}\b([a-z0-9A-Z=]{72}) - - - pattern: - name: Impala - regex: (?:impala).{0,40}\b([0-9A-Za-z_]{46})\b - - - pattern: - name: Insightly - regex: (?:insightly).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Integromat - regex: (?:integromat).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Intercom - regex: (?:intercom).{0,40}\b([a-zA-Z0-9\W\S]{59}\=) - - - pattern: - name: Intrinio - regex: (?:intrinio).{0,40}\b([a-zA-Z0-9]{44})\b - - - pattern: - name: Invoiceocean - 1 - regex: (?:invoiceocean).{0,40}\b([0-9A-Za-z]{20})\b - - - pattern: - name: Invoiceocean - 2 - regex: \b([0-9a-z]{1,}.invoiceocean.com)\b - - - pattern: - name: Ipapi - regex: (?:ipapi).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Ipgeolocation - regex: (?:ipgeolocation).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Ipify - regex: (?:ipify).{0,40}\b([a-zA-Z0-9_-]{32})\b - - - pattern: - name: Ipinfodb - regex: (?:ipinfodb).{0,40}\b([a-z0-9]{64})\b - - - pattern: - name: Ipquality - regex: (?:ipquality).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Ipstack - regex: (?:ipstack).{0,40}\b([a-fA-f0-9]{32})\b - - - pattern: - name: JDBC Connection String - regex: jdbc:[a-z:]+://[A-Za-z0-9\.\-_:;=/@?,&]+ - - - pattern: - name: Jiratoken - 1 - regex: (?:jira).{0,40}\b([a-zA-Z-0-9]{24})\b - - - pattern: - name: Jiratoken - 2 - regex: (?:jira).{0,40}\b([a-zA-Z-0-9]{5,24}\@[a-zA-Z-0-9]{3,16}\.com)\b - - - pattern: - name: Jiratoken - 3 - regex: (?:jira).{0,40}\b([a-zA-Z-0-9]{5,24}\.[a-zA-Z-0-9]{3,16}\.[a-zA-Z-0-9]{3,16})\b - - - pattern: - name: Jotform - regex: (?:jotform).{0,40}\b([0-9Aa-z]{32})\b - - - pattern: - name: Jumpcloud - regex: (?:jumpcloud).{0,40}\b([a-zA-Z0-9]{40})\b - - - pattern: - name: Juro - regex: (?:juro).{0,40}\b([a-zA-Z0-9]{40})\b - - - pattern: - name: Kanban - 1 - regex: (?:kanban).{0,40}\b([0-9A-Z]{12})\b - - - pattern: - name: Kanban - 2 - regex: \b([0-9a-z]{1,}.kanbantool.com)\b - - - pattern: - name: Karmacrm - regex: (?:karma).{0,40}\b([a-zA-Z0-9]{20})\b - - - pattern: - name: Keenio - 1 - regex: (?:keen).{0,40}\b([0-9a-z]{24})\b - - - pattern: - name: Keenio - 2 - regex: (?:keen).{0,40}\b([0-9A-Z]{64})\b - - - pattern: - name: Kickbox - regex: (?:kickbox).{0,40}\b([a-zA-Z0-9_]+[a-zA-Z0-9]{64})\b - - - pattern: - name: Klipfolio - regex: (?:klipfolio).{0,40}\b([0-9a-f]{40})\b - - - pattern: - name: Kontent - regex: (?:kontent).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Kraken - 1 - regex: (?:kraken).{0,40}\b([0-9A-Za-z\/\+=]{56}[ "'\r\n]{1}) - - - pattern: - name: Kraken - 2 - regex: (?:kraken).{0,40}\b([0-9A-Za-z\/\+=]{86,88}[ "'\r\n]{1}) - - - pattern: - name: Kucoin - 1 - regex: (?:kucoin).{0,40}([ \r\n]{1}[!-~]{7,32}[ \r\n]{1}) - - - pattern: - name: Kucoin - 2 - regex: (?:kucoin).{0,40}\b([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\b - - - pattern: - name: Kucoin - 3 - regex: (?:kucoin).{0,40}\b([0-9a-f]{24})\b - - - pattern: - name: Kylas - regex: (?:kylas).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Languagelayer - regex: (?:languagelayer).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Lastfm - regex: (?:lastfm).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Launchdarkly - regex: (?:launchdarkly).{0,40}\b([a-z0-9-]{40})\b - - - pattern: - name: Leadfeeder - regex: (?:leadfeeder).{0,40}\b([a-zA-Z0-9-]{43})\b - - - pattern: - name: Lendflow - regex: (?:lendflow).{0,40}\b([a-zA-Z0-9]{36}\.[a-zA-Z0-9]{235}\.[a-zA-Z0-9]{32}\-[a-zA-Z0-9]{47}\-[a-zA-Z0-9_]{162}\-[a-zA-Z0-9]{42}\-[a-zA-Z0-9_]{40}\-[a-zA-Z0-9_]{66}\-[a-zA-Z0-9_]{59}\-[a-zA-Z0-9]{7}\-[a-zA-Z0-9_]{220})\b - - - pattern: - name: Lessannoyingcrm - regex: (?:less).{0,40}\b([a-zA-Z0-9-]{57})\b - - - pattern: - name: Lexigram - regex: (?:lexigram).{0,40}\b([a-zA-Z0-9\S]{301})\b - - - pattern: - name: Linearapi - regex: \b(lin_api_[0-9A-Za-z]{40})\b - - - pattern: - name: Linemessaging - regex: (?:line).{0,40}\b([A-Za-z0-9+/]{171,172})\b - - - pattern: - name: Linenotify - regex: (?:linenotify).{0,40}\b([0-9A-Za-z]{43})\b - - - pattern: - name: Linkpreview - regex: (?:linkpreview).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Liveagent - regex: (?:liveagent).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Livestorm - regex: (?:livestorm).{0,40}\b(eyJhbGciOiJIUzI1NiJ9\.eyJhdWQiOiJhcGkubGl2ZXN0b3JtLmNvIiwianRpIjoi[0-9A-Z-a-z]{134}\.[0-9A-Za-z\-\_]{43}[ - \r\n]{1}) - - - pattern: - name: Locationiq - regex: \b(pk\.[a-zA-Z-0-9]{32})\b - - - pattern: - name: Loginradius - regex: (?:loginradius).{0,40}\b([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\b - - - pattern: - name: Lokalisetoken - regex: (?:lokalise).{0,40}\b([a-z0-9]{40})\b - - - pattern: - name: Loyverse - regex: (?:loyverse).{0,40}\b([0-9-a-z]{32})\b - - - pattern: - name: Luno - 1 - regex: (?:luno).{0,40}\b([a-z0-9]{13})\b - - - pattern: - name: Luno - 2 - regex: (?:luno).{0,40}\b([a-zA-Z0-9_-]{43})\b - - - pattern: - name: M3o - regex: (?:m3o).{0,40}\b([0-9A-Za-z]{48})\b - - - pattern: - name: Macaddress - regex: (?:macaddress).{0,40}\b([a-zA-Z0-9_]{32})\b - - - pattern: - name: Madkudu - regex: (?:madkudu).{0,40}\b([0-9a-f]{32})\b - - - pattern: - name: Magnetic - regex: (?:magnetic).{0,40}\b([0-9Aa-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\b - - - pattern: - name: MailChimp API Key - regex: '[0-9a-f]{32}-us[0-9]{1,2}' - - - pattern: - name: Mailboxlayer - regex: (?:mailboxlayer).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Mailerlite - regex: (?:mailerlite).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Mailgun - 2 - regex: (?:mailgun).{0,40}\b([a-zA-Z-0-9]{72})\b - - - pattern: - name: Mailgun API Key - 1 - regex: key-[0-9a-zA-Z]{32} - - - pattern: - name: Mailgun API key - 2 - regex: (mailgun|mg)[0-9a-z]{32} - - - pattern: - name: Mailjetbasicauth - regex: (?:mailjet).{0,40}\b([A-Za-z0-9]{87}\=) - - - pattern: - name: Mailjetsms - regex: (?:mailjet).{0,40}\b([A-Za-z0-9]{32})\b - - - pattern: - name: Mailmodo - regex: (?:mailmodo).{0,40}\b([A-Z0-9]{7}-[A-Z0-9]{7}-[A-Z0-9]{7}-[A-Z0-9]{7})\b - - - pattern: - name: Mailsac - regex: (?:mailsac).{0,40}\b(k_[0-9A-Za-z]{36,})\b - - - pattern: - name: Mandrill - regex: (?:mandrill).{0,40}\b([A-Za-z0-9_-]{22})\b - - - pattern: - name: Manifest - regex: (?:manifest).{0,40}\b([a-zA-z0-9]{32})\b - - - pattern: - name: Mapbox - 2 - regex: \b(sk\.[a-zA-Z-0-9\.]{80,240})\b - - - pattern: - name: Mapquest - regex: (?:mapquest).{0,40}\b([0-9A-Za-z]{32})\b - - - pattern: - name: Marketstack - regex: (?:marketstack).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Mattermostpersonaltoken - 1 - regex: (?:mattermost).{0,40}\b([A-Za-z0-9-_]{1,}.cloud.mattermost.com)\b - - - pattern: - name: Mattermostpersonaltoken - 2 - regex: (?:mattermost).{0,40}\b([a-z0-9]{26})\b - - - pattern: - name: Mavenlink - regex: (?:mavenlink).{0,40}\b([0-9a-z]{64})\b - - - pattern: - name: Maxmindlicense - 1 - regex: (?:maxmind|geoip).{0,40}\b([0-9A-Za-z]{16})\b - - - pattern: - name: Maxmindlicense - 2 - regex: (?:maxmind|geoip).{0,40}\b([0-9]{2,7})\b - - - pattern: - name: Meaningcloud - regex: (?:meaningcloud).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Mediastack - regex: (?:mediastack).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Meistertask - regex: (?:meistertask).{0,40}\b([a-zA-Z0-9]{43})\b - - - pattern: - name: Mesibo - regex: (?:mesibo).{0,40}\b([0-9A-Za-z]{64})\b - - - pattern: - name: Messagebird - regex: (?:messagebird).{0,40}\b([A-Za-z0-9_-]{25})\b - - - pattern: - name: Metaapi - 1 - regex: (?:metaapi|meta-api).{0,40}\b([0-9a-f]{64})\b - - - pattern: - name: Metaapi - 2 - regex: (?:metaapi|meta-api).{0,40}\b([0-9a-f]{24})\b - - - pattern: - name: Metrilo - regex: (?:metrilo).{0,40}\b([a-z0-9]{16})\b - - - pattern: - name: Microsoft Teams Webhook - regex: https://outlook\.office\.com/webhook/[A-Za-z0-9\-@]+/IncomingWebhook/[A-Za-z0-9\-]+/[A-Za-z0-9\-]+ - - - pattern: - name: Microsoftteamswebhook - regex: (https:\/\/[a-zA-Z-0-9]+\.webhook\.office\.com\/webhookb2\/[a-zA-Z-0-9]{8}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{12}\@[a-zA-Z-0-9]{8}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{12}\/IncomingWebhook\/[a-zA-Z-0-9]{32}\/[a-zA-Z-0-9]{8}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{12}) - - - pattern: - name: Midise - regex: midi-662b69edd2[a-zA-Z0-9]{54} - - - pattern: - name: Mindmeister - regex: (?:mindmeister).{0,40}\b([a-zA-Z0-9]{43})\b - - - pattern: - name: Mite - 1 - regex: (?:mite).{0,40}\b([0-9a-z]{16})\b - - - pattern: - name: Mite - 2 - regex: \b([0-9a-z-]{1,}.mite.yo.lk)\b - - - pattern: - name: Mixmax - regex: (?:mixmax).{0,40}\b([a-zA-Z0-9_-]{36})\b - - - pattern: - name: Mixpanel - 1 - regex: (?:mixpanel).{0,40}\b([a-zA-Z0-9.-]{30,40})\b - - - pattern: - name: Mixpanel - 2 - regex: (?:mixpanel).{0,40}\b([a-zA-Z0-9-]{32})\b - - - pattern: - name: Moderation - regex: (?:moderation).{0,40}\b([a-zA-Z0-9]{36}\.[a-zA-Z0-9]{115}\.[a-zA-Z0-9_]{43})\b - - - pattern: - name: Monday - regex: (?:monday).{0,40}\b(ey[a-zA-Z0-9_.]{210,225})\b - - - pattern: - name: Moonclerck - regex: (?:moonclerck).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Moonclerk - regex: (?:moonclerk).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Moosend - regex: (?:moosend).{0,40}\b([0-9Aa-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\b - - - pattern: - name: Mrticktock - 1 - regex: (?:mrticktock).{0,40}\b([a-zA-Z0-9!=@#$%()_^]{1,50}) - - - pattern: - name: Myfreshworks - 2 - regex: (?:freshworks).{0,40}\b([a-z0-9A-Z-]{22})\b - - - pattern: - name: Myintervals - regex: (?:myintervals).{0,40}\b([0-9a-z]{11})\b - - - pattern: - name: Nasdaqdatalink - regex: (?:nasdaq).{0,40}\b([a-zA-Z0-9_-]{20})\b - - - pattern: - name: Nethunt - 1 - regex: (?:nethunt).{0,40}\b([a-zA-Z0-9.-@]{25,30})\b - - - pattern: - name: Nethunt - 2 - regex: (?:nethunt).{0,40}\b([a-z0-9-\S]{36})\b - - - pattern: - name: Netlify - regex: (?:netlify).{0,40}\b([A-Za-z0-9_-]{43,45})\b - - - pattern: - name: Neutrinoapi - 1 - regex: (?:neutrinoapi).{0,40}\b([a-zA-Z0-9]{48})\b - - - pattern: - name: Neutrinoapi - 2 - regex: (?:neutrinoapi).{0,40}\b([a-zA-Z0-9]{6,24})\b - - - pattern: - name: Newrelic Admin API Key - regex: NRAA-[a-f0-9]{27} - - - pattern: - name: Newrelic Insights API Key - regex: NRI(?:I|Q)-[A-Za-z0-9\-_]{32} - - - pattern: - name: Newrelic REST API Key - regex: NRRA-[a-f0-9]{42} - - - pattern: - name: Newrelic Synthetics Location Key - regex: NRSP-[a-z]{2}[0-9]{2}[a-f0-9]{31} - - - pattern: - name: Newrelicpersonalapikey - regex: (?:newrelic).{0,40}\b([A-Za-z0-9_\.]{4}-[A-Za-z0-9_\.]{42})\b - - - pattern: - name: Newsapi - regex: (?:newsapi).{0,40}\b([a-z0-9]{32}) - - - pattern: - name: Newscatcher - regex: (?:newscatcher).{0,40}\b([0-9A-Za-z_]{43})\b - - - pattern: - name: Nexmoapikey - 1 - regex: (?:nexmo).{0,40}\b([A-Za-z0-9_-]{8})\b - - - pattern: - name: Nexmoapikey - 2 - regex: (?:nexmo).{0,40}\b([A-Za-z0-9_-]{16})\b - - - pattern: - name: Nftport - regex: (?:nftport).{0,40}\b([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\b - - - pattern: - name: Nicereply - regex: (?:nicereply).{0,40}\b([0-9a-f]{40})\b - - - pattern: - name: Nimble - regex: (?:nimble).{0,40}\b([a-zA-Z0-9]{30})\b - - - pattern: - name: Nitro - regex: (?:nitro).{0,40}\b([0-9a-f]{32})\b - - - pattern: - name: Noticeable - regex: (?:noticeable).{0,40}\b([0-9a-zA-Z]{20})\b - - - pattern: - name: Notion - regex: \b(secret_[A-Za-z0-9]{43})\b - - - pattern: - name: Nozbeteams - regex: (?:nozbe|nozbeteams).{0,40}\b([0-9A-Za-z]{16}_[0-9A-Za-z\-_]{64}[ \r\n]{1}) - - - pattern: - name: Numverify - regex: (?:numverify).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Nutritionix - 1 - regex: (?:nutritionix).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Nutritionix - 2 - regex: (?:nutritionix).{0,40}\b([a-z0-9]{8})\b - - - pattern: - name: Nylas - regex: (?:nylas).{0,40}\b([0-9A-Za-z]{30})\b - - - pattern: - name: Nytimes - regex: (?:nytimes).{0,40}\b([a-z0-9A-Z-]{32})\b - - - pattern: - name: Oanda - regex: (?:oanda).{0,40}\b([a-zA-Z0-9]{24})\b - - - pattern: - name: Omnisend - regex: (?:omnisend).{0,40}\b([a-z0-9A-Z-]{75})\b - - - pattern: - name: Onedesk - 1 - regex: (?:onedesk).{0,40}\b([a-zA-Z0-9!=@#$%^]{8,64}) - - - pattern: - name: Onelogin - 2 - regex: secret[a-zA-Z0-9_' "=]{0,20}([a-z0-9]{64}) - - - pattern: - name: Onepagecrm - 1 - regex: (?:onepagecrm).{0,40}\b([a-zA-Z0-9=]{44}) - - - pattern: - name: Onepagecrm - 2 - regex: (?:onepagecrm).{0,40}\b([a-z0-9]{24})\b - - - pattern: - name: Onwaterio - regex: (?:onwater).{0,40}\b([a-zA-Z0-9_-]{20})\b - - - pattern: - name: Oopspam - regex: (?:oopspam).{0,40}\b([a-zA-Z0-9]{40})\b - - - pattern: - name: Opencagedata - regex: (?:opencagedata).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Opengraphr - regex: (?:opengraphr).{0,40}\b([0-9Aa-zA-Z]{80})\b - - - pattern: - name: Openuv - regex: (?:openuv).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Openweather - regex: (?:openweather).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Optimizely - regex: (?:optimizely).{0,40}\b([0-9A-Za-z-:]{54})\b - - - pattern: - name: Owlbot - regex: (?:owlbot).{0,40}\b([a-z0-9]{40})\b - - - pattern: - name: PGP private key block - regex: '-----BEGIN PGP PRIVATE KEY BLOCK-----' - - - pattern: - name: Pagerdutyapikey - regex: (?:pagerduty).{0,40}\b([a-z]{1}\+[a-zA-Z]{9}\-[a-z]{2}\-[a-z0-9]{5})\b - - - pattern: - name: Pandadoc - regex: (?:pandadoc).{0,40}\b([a-zA-Z0-9]{40})\b - - - pattern: - name: Pandascore - regex: (?:pandascore).{0,40}([ \r\n]{0,1}[0-9A-Za-z\-\_]{51}[ \r\n]{1}) - - - pattern: - name: Paralleldots - regex: (?:paralleldots).{0,40}\b([0-9A-Za-z]{43})\b - - - pattern: - name: Partnerstack - regex: (?:partnerstack).{0,40}\b([0-9A-Za-z]{64})\b - - - pattern: - name: Passbase - regex: (?:passbase).{0,40}\b([a-zA-Z0-9]{128})\b - - - pattern: - name: Password in URL - regex: '[a-zA-Z]{3,10}://[^/\s:@]{3,20}:[^/\s:@]{3,20}@.{1,100}["''\s]' - - - pattern: - name: Pastebin - regex: (?:pastebin).{0,40}\b([a-zA-Z0-9_]{32})\b - - - pattern: - name: PayPal Braintree access token - regex: access_token\$production\$[0-9a-z]{16}\$[0-9a-f]{32} - - - pattern: - name: Paymoapp - regex: (?:paymoapp).{0,40}\b([a-zA-Z0-9]{44})\b - - - pattern: - name: Paymongo - regex: (?:paymongo).{0,40}\b([a-zA-Z0-9_]{32})\b - - - pattern: - name: Paypaloauth - 1 - regex: \b([A-Za-z0-9_\.]{7}-[A-Za-z0-9_\.]{72})\b - - - pattern: - name: Paypaloauth - 2 - regex: \b([A-Za-z0-9_\.]{69}-[A-Za-z0-9_\.]{10})\b - - - pattern: - name: Paystack - regex: \b(sk\_[a-z]{1,}\_[A-Za-z0-9]{40})\b - - - pattern: - name: Pdflayer - regex: (?:pdflayer).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Pdfshift - regex: (?:pdfshift).{0,40}\b([0-9a-f]{32})\b - - - pattern: - name: Peopledatalabs - regex: (?:peopledatalabs).{0,40}\b([a-z0-9]{64})\b - - - pattern: - name: Pepipost - regex: (?:pepipost|netcore).{0,40}\b([a-zA-Z-0-9]{32})\b - - - pattern: - name: Picatic API key - regex: sk_live_[0-9a-z]{32} - - - pattern: - name: Pipedream - regex: (?:pipedream).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Pipedrive - regex: (?:pipedrive).{0,40}\b([a-zA-Z0-9]{40})\b - - - pattern: - name: Pivotaltracker - regex: (?:pivotal).{0,40}([a-z0-9]{32}) - - - pattern: - name: Pixabay - regex: (?:pixabay).{0,40}\b([a-z0-9-]{34})\b - - - pattern: - name: Plaidkey - 1 - regex: (?:plaid).{0,40}\b([a-z0-9]{24})\b - - - pattern: - name: Plaidkey - 2 - regex: (?:plaid).{0,40}\b([a-z0-9]{30})\b - - - pattern: - name: Planviewleankit - 1 - regex: (?:planviewleankit|planview).{0,40}\b([0-9a-f]{128})\b - - - pattern: - name: Planviewleankit - 2 - regex: (?:planviewleankit|planview).{0,40}(?:subdomain).\b([a-zA-Z][a-zA-Z0-9.-]{1,23}[a-zA-Z0-9])\b - - - pattern: - name: Planyo - regex: (?:planyo).{0,40}\b([0-9a-z]{62})\b - - - pattern: - name: Plivo - 1 - regex: (?:plivo).{0,40}\b([A-Za-z0-9_-]{40})\b - - - pattern: - name: Plivo - 2 - regex: (?:plivo).{0,40}\b([A-Z]{20})\b - - - pattern: - name: Poloniex - 1 - regex: (?:poloniex).{0,40}\b([0-9a-f]{128})\b - - - pattern: - name: Poloniex - 2 - regex: (?:poloniex).{0,40}\b([0-9A-Z]{8}-[0-9A-Z]{8}-[0-9A-Z]{8}-[0-9A-Z]{8})\b - - - pattern: - name: Polygon - regex: (?:polygon).{0,40}\b([a-z0-9A-Z]{32})\b - - - pattern: - name: Positionstack - regex: (?:positionstack).{0,40}\b([a-zA-Z0-9_]{32})\b - - - pattern: - name: Postageapp - regex: (?:postageapp).{0,40}\b([0-9A-Za-z]{32})\b - - - pattern: - name: Posthog - regex: \b(phc_[a-zA-Z0-9_]{43})\b - - - pattern: - name: Postman - regex: \b(PMAK-[a-zA-Z-0-9]{59})\b - - - pattern: - name: Postmark - regex: (?:postmark).{0,40}\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\b - - - pattern: - name: Powrbot - regex: (?:powrbot).{0,40}\b([a-z0-9A-Z]{40})\b - - - pattern: - name: Privatekey - regex: '-----\s*?BEGIN[ A-Z0-9_-]*?PRIVATE KEY\s*?-----[\s\S]*?----\s*?END[ - A-Z0-9_-]*? PRIVATE KEY\s*?-----' - - - pattern: - name: Prospectcrm - regex: (?:prospect).{0,40}\b([a-z0-9-]{32})\b - - - pattern: - name: Prospectio - regex: (?:prospect).{0,40}\b([a-z0-9A-Z-]{50})\b - - - pattern: - name: Protocolsio - regex: (?:protocols).{0,40}\b([a-z0-9]{64})\b - - - pattern: - name: Proxycrawl - regex: (?:proxycrawl).{0,40}\b([a-zA-Z0-9_]{22})\b - - - pattern: - name: Pubnubpublishkey - 1 - regex: \b(sub-c-[0-9a-z]{8}-[a-z]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\b - - - pattern: - name: Pubnubpublishkey - 2 - regex: \b(pub-c-[0-9a-z]{8}-[0-9a-z]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\b - - - pattern: - name: Purestake - regex: (?:purestake).{0,40}\b([a-zA-Z0-9]{40})\b - - - pattern: - name: Pushbulletapikey - regex: (?:pushbullet).{0,40}\b([A-Za-z0-9_\.]{34})\b - - - pattern: - name: Pusherchannelkey - 1 - regex: (?:key).{0,40}\b([a-z0-9]{20})\b - - - pattern: - name: Pusherchannelkey - 2 - regex: (?:pusher).{0,40}\b([a-z0-9]{20})\b - - - pattern: - name: Pusherchannelkey - 3 - regex: (?:pusher).{0,40}\b([0-9]{7})\b - - - pattern: - name: PyPI upload token - regex: pypi-AgEIcHlwaS5vcmc[A-Za-z0-9-_]{50,1000} - - - pattern: - name: Qualaroo - regex: (?:qualaroo).{0,40}\b([a-z0-9A-Z=]{64}) - - - pattern: - name: Qubole - regex: (?:qubole).{0,40}\b([0-9a-z]{64})\b - - - pattern: - name: Quickmetrics - regex: (?:quickmetrics).{0,40}\b([a-zA-Z0-9_-]{22})\b - - - pattern: - name: REDIS_URL - regex: (REDIS_URL).+ - - - pattern: - name: RKCS8 - regex: '-----BEGIN PRIVATE KEY-----' - - - pattern: - name: RSA private key - regex: '-----BEGIN RSA PRIVATE KEY-----' - - - pattern: - name: Rapidapi - regex: (?:rapidapi).{0,40}\b([A-Za-z0-9_-]{50})\b - - - pattern: - name: Raven - regex: (?:raven).{0,40}\b([A-Z0-9-]{16})\b - - - pattern: - name: Rawg - regex: (?:rawg).{0,40}\b([0-9Aa-z]{32})\b - - - pattern: - name: Razorpay - 1 - regex: \brzp_\w{2,6}_\w{10,20}\b - - - pattern: - name: Readme - regex: (?:readme).{0,40}\b([a-zA-Z0-9_]{32})\b - - - pattern: - name: Reallysimplesystems - regex: \b(ey[a-zA-Z0-9-._]{153}.ey[a-zA-Z0-9-._]{916,1000})\b - - - pattern: - name: Rebrandly - regex: (?:rebrandly).{0,40}\b([a-zA-Z0-9_]{32})\b - - - pattern: - name: Refiner - regex: (?:refiner).{0,40}\b([0-9Aa-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\b - - - pattern: - name: Repairshopr - 1 - regex: (?:repairshopr).{0,40}\b([a-zA-Z0-9_.!+$#^*]{3,32})\b - - - pattern: - name: Repairshopr - 2 - regex: (?:repairshopr).{0,40}\b([a-zA-Z0-9-]{51})\b - - - pattern: - name: Restpack - regex: (?:restpack).{0,40}\b([a-zA-Z0-9]{48})\b - - - pattern: - name: Restpackhtmltopdfapi - regex: (?:restpack).{0,40}\b([0-9A-Za-z]{48})\b - - - pattern: - name: Rev - 1 - regex: (?:rev).{0,40}\b([0-9a-zA-Z\/\+]{27}\=[ \r\n]{1}) - - - pattern: - name: Rev - 2 - regex: (?:rev).{0,40}\b([0-9a-zA-Z\-]{27}[ \r\n]{1}) - - - pattern: - name: Revampcrm - 1 - regex: (?:revamp).{0,40}\b([a-zA-Z0-9]{40}\b) - - - pattern: - name: Revampcrm - 2 - regex: (?:revamp).{0,40}\b([a-zA-Z0-9.-@]{25,30})\b - - - pattern: - name: Ringcentral - 1 - regex: (?:ringcentral).{0,40}\b(https://www.[0-9A-Za-z_-]{1,}.com)\b - - - pattern: - name: Ringcentral - 2 - regex: (?:ringcentral).{0,40}\b([0-9A-Za-z_-]{22})\b - - - pattern: - name: Ritekit - regex: (?:ritekit).{0,40}\b([0-9a-f]{44})\b - - - pattern: - name: Roaring - regex: (?:roaring).{0,40}\b([0-9A-Za-z_-]{28})\b - - - pattern: - name: Rocketreach - regex: (?:rocketreach).{0,40}\b([a-z0-9-]{39})\b - - - pattern: - name: Roninapp - 1 - regex: (?:ronin).{0,40}\b([0-9Aa-zA-Z]{3,32})\b - - - pattern: - name: Roninapp - 2 - regex: (?:ronin).{0,40}\b([0-9a-zA-Z]{26})\b - - - pattern: - name: Route4me - regex: (?:route4me).{0,40}\b([0-9A-Z]{32})\b - - - pattern: - name: Rownd - 1 - regex: (?:rownd).{0,40}\b([a-z0-9]{8}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{12})\b - - - pattern: - name: Rownd - 2 - regex: (?:rownd).{0,40}\b([a-z0-9]{48})\b - - - pattern: - name: Rownd - 3 - regex: (?:rownd).{0,40}\b([0-9]{18})\b - - - pattern: - name: Rubygems - regex: \b(rubygems_[a-zA0-9]{48})\b - - - pattern: - name: Runrunit - 1 - regex: (?:runrunit).{0,40}\b([0-9a-f]{32})\b - - - pattern: - name: Runrunit - 2 - regex: (?:runrunit).{0,40}\b([0-9A-Za-z]{18,20})\b - - - pattern: - name: SSH - regex: '-----BEGIN OPENSSH PRIVATE KEY-----' - - - pattern: - name: SSH (DSA) private key - regex: '-----BEGIN DSA PRIVATE KEY-----' - - - pattern: - name: Salesblink - regex: (?:salesblink).{0,40}\b([a-zA-Z]{16})\b - - - pattern: - name: Salescookie - regex: (?:salescookie).{0,40}\b([a-zA-z0-9]{32})\b - - - pattern: - name: Salesflare - regex: (?:salesflare).{0,40}\b([a-zA-Z0-9_]{45})\b - - - pattern: - name: Satismeterprojectkey - 1 - regex: (?:satismeter).{0,40}\b([a-zA-Z0-9]{4,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,12})\b - - - pattern: - name: Satismeterprojectkey - 2 - regex: (?:satismeter).{0,40}\b([a-zA-Z0-9]{24})\b - - - pattern: - name: Satismeterprojectkey - 3 - regex: (?:satismeter).{0,40}\b([a-zA-Z0-9!=@#$%^]{6,32}) - - - pattern: - name: Satismeterwritekey - regex: (?:satismeter).{0,40}\b([a-z0-9A-Z]{16})\b - - - pattern: - name: Saucelabs - 1 - regex: \b(oauth\-[a-z0-9]{8,}\-[a-z0-9]{5})\b - - - pattern: - name: Saucelabs - 2 - regex: (?:saucelabs).{0,40}\b([a-z0-9]{8}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{12})\b - - - pattern: - name: Scalewaykey - regex: (?:scaleway).{0,40}\b([0-9a-z]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[0-9a-z]{4}-[0-9a-z]{12})\b - - - pattern: - name: Scrapeowl - regex: (?:scrapeowl).{0,40}\b([0-9a-z]{30})\b - - - pattern: - name: Scraperapi - regex: (?:scraperapi).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Scraperbox - regex: (?:scraperbox).{0,40}\b([A-Z0-9]{32})\b - - - pattern: - name: Scrapersite - regex: (?:scrapersite).{0,40}\b([a-zA-Z0-9]{45})\b - - - pattern: - name: Scrapestack - regex: (?:scrapestack).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Scrapfly - regex: (?:scrapfly).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Scrapingant - regex: (?:scrapingant).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Scrapingbee - regex: (?:scrapingbee).{0,40}\b([A-Z0-9]{80})\b - - - pattern: - name: Screenshotapi - regex: (?:screenshotapi).{0,40}\b([0-9A-Z]{7}\-[0-9A-Z]{7}\-[0-9A-Z]{7}\-[0-9A-Z]{7})\b - - - pattern: - name: Screenshotlayer - regex: (?:screenshotlayer).{0,40}\b([a-zA-Z0-9_]{32})\b - - - pattern: - name: Securitytrails - regex: (?:securitytrails).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Segmentapikey - regex: (?:segment).{0,40}\b([A-Za-z0-9_\-a-zA-Z]{43}\.[A-Za-z0-9_\-a-zA-Z]{43})\b - - - pattern: - name: Selectpdf - regex: (?:selectpdf).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Semaphore - regex: (?:semaphore).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: SendGrid API Key - regex: SG\.[\w_]{16,32}\.[\w_]{16,64} - - - pattern: - name: Sendbird - 1 - regex: (?:sendbird).{0,40}\b([0-9a-f]{40})\b - - - pattern: - name: Sendbird - 2 - regex: (?:sendbird).{0,40}\b([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})\b - - - pattern: - name: Sendbirdorganizationapi - regex: (?:sendbird).{0,40}\b([0-9a-f]{24})\b - - - pattern: - name: Sendgrid - regex: (?:sendgrid).{0,40}(SG\.[\w\-_]{20,24}\.[\w\-_]{39,50})\b - - - pattern: - name: Sendinbluev2 - regex: \b(xkeysib\-[A-Za-z0-9_-]{81})\b - - - pattern: - name: Sentiment - 1 - regex: (?:sentiment).{0,40}\b([0-9]{17})\b - - - pattern: - name: Sentiment - 2 - regex: (?:sentiment).{0,40}\b([a-zA-Z0-9]{20})\b - - - pattern: - name: Sentrytoken - regex: (?:sentry).{0,40}\b([a-f0-9]{64})\b - - - pattern: - name: Serphouse - regex: (?:serphouse).{0,40}\b([0-9A-Za-z]{60})\b - - - pattern: - name: Serpstack - regex: (?:serpstack).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Sheety - 1 - regex: (?:sheety).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Sheety - 2 - regex: (?:sheety).{0,40}\b([0-9a-z]{64})\b - - - pattern: - name: Sherpadesk - regex: (?:sherpadesk).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Shipday - regex: (?:shipday).{0,40}\b([a-zA-Z0-9.]{11}[a-zA-Z0-9]{20})\b - - - pattern: - name: Shodankey - regex: (?:shodan).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Shopify access token - regex: shpat_[a-fA-F0-9]{32} - - - pattern: - name: Shopify custom app access token - regex: shpca_[a-fA-F0-9]{32} - - - pattern: - name: Shopify private app access token - regex: shppa_[a-fA-F0-9]{32} - - - pattern: - name: Shopify shared secret - regex: shpss_[a-fA-F0-9]{32} - - - pattern: - name: Shoppable Service Auth - regex: data-shoppable-auth-token.+ - - - pattern: - name: Shortcut - regex: (?:shortcut).{0,40}\b([0-9a-f-]{36})\b - - - pattern: - name: Shotstack - regex: (?:shotstack).{0,40}\b([a-zA-Z0-9]{40})\b - - - pattern: - name: Shutterstock - 1 - regex: (?:shutterstock).{0,40}\b([0-9a-zA-Z]{32})\b - - - pattern: - name: Shutterstock - 2 - regex: (?:shutterstock).{0,40}\b([0-9a-zA-Z]{16})\b - - - pattern: - name: Shutterstockoauth - regex: (?:shutterstock).{0,40}\b(v2/[0-9A-Za-z]{388})\b - - - pattern: - name: Signalwire - 1 - regex: \b([0-9a-z-]{3,64}.signalwire.com)\b - - - pattern: - name: Signalwire - 2 - regex: (?:signalwire).{0,40}\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\b - - - pattern: - name: Signalwire - 3 - regex: (?:signalwire).{0,40}\b([0-9A-Za-z]{50})\b - - - pattern: - name: Signaturit - regex: (?:signaturit).{0,40}\b([0-9A-Za-z]{86})\b - - - pattern: - name: Signupgenius - regex: (?:signupgenius).{0,40}\b([0-9A-Za-z]{32})\b - - - pattern: - name: Sigopt - regex: (?:sigopt).{0,40}\b([A-Z0-9]{48})\b - - - pattern: - name: Simplesat - regex: (?:simplesat).{0,40}\b([a-z0-9]{40}) - - - pattern: - name: Simplynoted - regex: (?:simplynoted).{0,40}\b([a-zA-Z0-9\S]{340,360})\b - - - pattern: - name: Simvoly - regex: (?:simvoly).{0,40}\b([a-z0-9]{33})\b - - - pattern: - name: Sinchmessage - regex: (?:sinch).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Sirv - 1 - regex: (?:sirv).{0,40}\b([a-zA-Z0-9\S]{88}) - - - pattern: - name: Sirv - 2 - regex: (?:sirv).{0,40}\b([a-zA-Z0-9]{26})\b - - - pattern: - name: Siteleaf - regex: (?:siteleaf).{0,40}\b([0-9Aa-z]{32})\b - - - pattern: - name: Skrappio - regex: (?:skrapp).{0,40}\b([a-z0-9A-Z]{42})\b - - - pattern: - name: Skybiometry - regex: (?:skybiometry).{0,40}\b([0-9a-z]{25,26})\b - - - pattern: - name: Slack - regex: xox[baprs]-[0-9a-zA-Z]{10,48} - - - pattern: - name: Slack Token - regex: (xox[pborsa]-[0-9]{12}-[0-9]{12}-[0-9]{12}-[a-z0-9]{32}) - - - pattern: - name: Slack User token - regex: xoxp-[0-9A-Za-z\-]{72} - - - pattern: - name: Slack Webhook - regex: https://hooks.slack.com/services/T[a-zA-Z0-9_]{8,10}/B[a-zA-Z0-9_]{8,12}/[a-zA-Z0-9_]{23,24} - - - pattern: - name: Slack access token - regex: xoxb-[0-9A-Za-z\-]{51} - - - pattern: - name: Slackwebhook - regex: (https:\/\/hooks.slack.com\/services\/[A-Za-z0-9+\/]{44,46}) - - - pattern: - name: Smartsheets - regex: (?:smartsheets).{0,40}\b([a-zA-Z0-9]{37})\b - - - pattern: - name: Smartystreets - 1 - regex: (?:smartystreets).{0,40}\b([a-zA-Z0-9]{20})\b - - - pattern: - name: Smartystreets - 2 - regex: (?:smartystreets).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Smooch - 1 - regex: (?:smooch).{0,40}\b(act_[0-9a-z]{24})\b - - - pattern: - name: Smooch - 2 - regex: (?:smooch).{0,40}\b([0-9a-zA-Z_-]{86})\b - - - pattern: - name: Snipcart - regex: (?:snipcart).{0,40}\b([0-9A-Za-z_]{75})\b - - - pattern: - name: Snykkey - regex: (?:snyk).{0,40}\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\b - - - pattern: - name: SonarQube Token - regex: sonar.{0,50}(?:"|'|`)?[0-9a-f]{40}(?:"|'|`)? - - - pattern: - name: Splunkobservabilitytoken - regex: (?:splunk).{0,40}\b([a-z0-9A-Z]{22})\b - - - pattern: - name: Spoonacular - regex: (?:spoonacular).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Sportsmonk - regex: (?:sportsmonk).{0,40}\b([0-9a-zA-Z]{60})\b - - - pattern: - name: Square - regex: (?:square).{0,40}(EAAA[a-zA-Z0-9\-\+\=]{60}) - - - pattern: - name: Square API Key - regex: sq0(atp|csp)-[0-9a-z-_]{22,43} - - - pattern: - name: Square OAuth Secret - regex: sq0csp-[0-9A-Za-z\-_]{43} - - - pattern: - name: Square access token - regex: sq0atp-[0-9A-Za-z\-_]{22} - - - pattern: - name: Squareapp - 1 - regex: '[\w\-]*sq0i[a-z]{2}-[0-9A-Za-z\-_]{22,43}' - - - pattern: - name: Squareapp - 2 - regex: '[\w\-]*sq0c[a-z]{2}-[0-9A-Za-z\-_]{40,50}' - - - pattern: - name: Squarespace - regex: (?:squarespace).{0,40}\b([0-9Aa-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\b - - - pattern: - name: Squareup - regex: \b(sq0idp-[0-9A-Za-z]{22})\b - - - pattern: - name: Sslmate - regex: (?:sslmate).{0,40}\b([a-zA-Z0-9]{36})\b - - - pattern: - name: Stitchdata - regex: (?:stitchdata).{0,40}\b([0-9a-z_]{35})\b - - - pattern: - name: Stockdata - regex: (?:stockdata).{0,40}\b([0-9A-Za-z]{40})\b - - - pattern: - name: Storecove - regex: (?:storecove).{0,40}\b([a-zA-Z0-9_-]{43})\b - - - pattern: - name: Stormglass - regex: (?:stormglass).{0,40}\b([0-9Aa-z-]{73})\b - - - pattern: - name: Storyblok - regex: (?:storyblok).{0,40}\b([0-9A-Za-z]{22}t{2})\b - - - pattern: - name: Storychief - regex: (?:storychief).{0,40}\b([a-zA-Z0-9_\-.]{940,1000}) - - - pattern: - name: Strava - 1 - regex: (?:strava).{0,40}\b([0-9]{5})\b - - - pattern: - name: Strava - 2 - regex: (?:strava).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Streak - regex: (?:streak).{0,40}\b([0-9Aa-f]{32})\b - - - pattern: - name: Stripe - regex: '[rs]k_live_[a-zA-Z0-9]{20,30}' - - - pattern: - name: Stripe API Key - 1 - regex: sk_live_[0-9a-zA-Z]{24} - - - pattern: - name: Stripe API key - 2 - regex: stripe[sr]k_live_[0-9a-zA-Z]{24} - - - pattern: - name: Stripe API key - 3 - regex: stripe[sk|rk]_live_[0-9a-zA-Z]{24} - - - pattern: - name: Stripe Public Live Key - regex: pk_live_[0-9a-z]{24} - - - pattern: - name: Stripe Public Test Key - regex: pk_test_[0-9a-z]{24} - - - pattern: - name: Stripe Restriced Key - regex: rk_(?:live|test)_[0-9a-zA-Z]{24} - - - pattern: - name: Stripe Restricted API Key - regex: rk_live_[0-9a-zA-Z]{24} - - - pattern: - name: Stripe Secret Key - regex: sk_(?:live|test)_[0-9a-zA-Z]{24} - - - pattern: - name: Stripe Secret Live Key - regex: (sk|rk)_live_[0-9a-z]{24} - - - pattern: - name: Stripe Secret Test Key - regex: (sk|rk)_test_[0-9a-z]{24} - - - pattern: - name: Stytch - 1 - regex: (?:stytch).{0,40}\b([a-zA-Z0-9-_]{47}=) - - - pattern: - name: Stytch - 2 - regex: (?:stytch).{0,40}\b([a-z0-9-]{49})\b - - - pattern: - name: Sugester - 1 - regex: (?:sugester).{0,40}\b([a-zA-Z0-9_.!+$#^*%]{3,32})\b - - - pattern: - name: Sugester - 2 - regex: (?:sugester).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Sumologickey - 1 - regex: (?:sumo).{0,40}\b([A-Za-z0-9]{14})\b - - - pattern: - name: Sumologickey - 2 - regex: (?:sumo).{0,40}\b([A-Za-z0-9]{64})\b - - - pattern: - name: Supernotesapi - regex: (?:supernotes).{0,40}([ \r\n]{0,1}[0-9A-Za-z\-_]{43}[ \r\n]{1}) - - - pattern: - name: Surveyanyplace - 1 - regex: (?:survey).{0,40}\b([a-z0-9A-Z-]{36})\b - - - pattern: - name: Surveyanyplace - 2 - regex: (?:survey).{0,40}\b([a-z0-9A-Z]{32})\b - - - pattern: - name: Surveybot - regex: (?:surveybot).{0,40}\b([A-Za-z0-9-]{80})\b - - - pattern: - name: Surveysparrow - regex: (?:surveysparrow).{0,40}\b([a-zA-Z0-9-_]{88})\b - - - pattern: - name: Survicate - regex: (?:survicate).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Swell - 1 - regex: (?:swell).{0,40}\b([a-zA-Z0-9]{6,24})\b - - - pattern: - name: Swell - 2 - regex: (?:swell).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Swiftype - regex: (?:swiftype).{0,40}\b([a-zA-z-0-9]{6}\_[a-zA-z-0-9]{6}\-[a-zA-z-0-9]{6})\b - - - pattern: - name: Tallyfy - regex: (?:tallyfy).{0,40}\b([0-9A-Za-z]{36}\.[0-9A-Za-z]{264}\.[0-9A-Za-z\-\_]{683})\b - - - pattern: - name: Tatumio - regex: (?:tatum).{0,40}\b([0-9a-z-]{36})\b - - - pattern: - name: Taxjar - regex: (?:taxjar).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Teamgate - 1 - regex: (?:teamgate).{0,40}\b([a-z0-9]{40})\b - - - pattern: - name: Teamgate - 2 - regex: (?:teamgate).{0,40}\b([a-zA-Z0-9]{80})\b - - - pattern: - name: Teamworkcrm - regex: (?:teamwork|teamworkcrm).{0,40}\b(tkn\.v1_[0-9A-Za-z]{71}=[ \r\n]{1}) - - - pattern: - name: Teamworkdesk - regex: (?:teamwork|teamworkdesk).{0,40}\b(tkn\.v1_[0-9A-Za-z]{71}=[ \r\n]{1}) - - - pattern: - name: Teamworkspaces - regex: (?:teamwork|teamworkspaces).{0,40}\b(tkn\.v1_[0-9A-Za-z]{71}=[ \r\n]{1}) - - - pattern: - name: Technicalanalysisapi - regex: (?:technicalanalysisapi).{0,40}\b([A-Z0-9]{48})\b - - - pattern: - name: Telegram Bot API Key - regex: '[0-9]+:AA[0-9A-Za-z\-_]{33}' - - - pattern: - name: Telegram Secret - regex: d{5,}:A[0-9a-z_-]{34,34} - - - pattern: - name: Telegrambottoken - regex: (?:telegram).{0,40}\b([0-9]{8,10}:[a-zA-Z0-9_-]{35})\b - - - pattern: - name: Telnyx - regex: (?:telnyx).{0,40}\b(KEY[0-9A-Za-z_-]{55})\b - - - pattern: - name: Terraformcloudpersonaltoken - regex: \b([A-Za-z0-9]{14}.atlasv1.[A-Za-z0-9]{67})\b - - - pattern: - name: Text2data - regex: (?:text2data).{0,40}\b([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})\b - - - pattern: - name: Textmagic - 1 - regex: (?:textmagic).{0,40}\b([0-9A-Za-z]{30})\b - - - pattern: - name: Textmagic - 2 - regex: (?:textmagic).{0,40}\b([0-9A-Za-z]{1,25})\b - - - pattern: - name: Theoddsapi - regex: (?:theoddsapi|the-odds-api).{0,40}\b([0-9a-f]{32})\b - - - pattern: - name: Thinkific - 1 - regex: (?:thinkific).{0,40}\b([0-9a-f]{32})\b - - - pattern: - name: Thinkific - 2 - regex: (?:thinkific).{0,40}\b([0-9A-Za-z]{4,40})\b - - - pattern: - name: Thousandeyes - 1 - regex: (?:thousandeyes).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Thousandeyes - 2 - regex: (?:thousandeyes).{0,40}\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\b - - - pattern: - name: Ticketmaster - regex: (?:ticketmaster).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Tiingo - regex: (?:tiingo).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Timezoneapi - regex: (?:timezoneapi).{0,40}\b([a-zA-Z0-9]{20})\b - - - pattern: - name: Tly - regex: (?:tly).{0,40}\b([0-9A-Za-z]{60})\b - - - pattern: - name: Tmetric - regex: (?:tmetric).{0,40}\b([0-9A-Z]{64})\b - - - pattern: - name: Todoist - regex: (?:todoist).{0,40}\b([0-9a-z]{40})\b - - - pattern: - name: Toggltrack - regex: (?:toggl).{0,40}\b([0-9Aa-z]{32})\b - - - pattern: - name: Tomorrowio - regex: (?:tomorrow).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Tomtom - regex: (?:tomtom).{0,40}\b([0-9Aa-zA-Z]{32})\b - - - pattern: - name: Tradier - regex: (?:tradier).{0,40}\b([a-zA-Z0-9]{28})\b - - - pattern: - name: Travelpayouts - regex: (?:travelpayouts).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Travisci - regex: (?:travis).{0,40}\b([a-zA-Z0-9A-Z_]{22})\b - - - pattern: - name: Trello URL - regex: https://trello.com/b/[0-9a-z]/[0-9a-z_-]+ - - - pattern: - name: Trelloapikey - 2 - regex: (?:trello).{0,40}\b([a-zA-Z-0-9]{32})\b - - - pattern: - name: Twelvedata - regex: (?:twelvedata).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Twilio - 1 - regex: \bAC[0-9a-f]{32}\b - - - pattern: - name: Twilio API Key - regex: SK[0-9a-fA-F]{32} - - - pattern: - name: Twitter Access Token - regex: '[tT][wW][iI][tT][tT][eE][rR].*[1-9][0-9]+-[0-9a-zA-Z]{40}' - - - pattern: - name: Twitter Client ID - regex: twitter[0-9a-z]{18,25} - - - pattern: - name: Twitter OAuth - regex: '[tT][wW][iI][tT][tT][eE][rR].*[''|"][0-9a-zA-Z]{35,44}[''|"]' - - - pattern: - name: Twitter Secret Key - regex: twitter[0-9a-z]{35,44} - - - pattern: - name: Tyntec - regex: (?:tyntec).{0,40}\b([a-zA-Z0-9]{32})\b - - - pattern: - name: Typeform - regex: (?:typeform).{0,40}\b([0-9A-Za-z]{44})\b - - - pattern: - name: Ubidots - regex: \b(BBFF-[0-9a-zA-Z]{30})\b - - - pattern: - name: Unifyid - regex: (?:unify).{0,40}\b([0-9A-Za-z_=-]{44}) - - - pattern: - name: Unplugg - regex: (?:unplu).{0,40}\b([a-z0-9]{64})\b - - - pattern: - name: Unsplash - regex: (?:unsplash).{0,40}\b([0-9A-Za-z_]{43})\b - - - pattern: - name: Upcdatabase - regex: (?:upcdatabase).{0,40}\b([A-Z0-9]{32})\b - - - pattern: - name: Uplead - regex: (?:uplead).{0,40}\b([a-z0-9-]{32})\b - - - pattern: - name: Uploadcare - regex: (?:uploadcare).{0,40}\b([a-z0-9]{20})\b - - - pattern: - name: Upwave - regex: (?:upwave).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Uri - regex: \b[a-zA-Z]{1,10}:?\/\/[-.%\w{}]{1,50}:([-.%\S]{3,50})@[-.%\w\/:]+\b - - - pattern: - name: Urlscan - regex: (?:urlscan).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Userstack - regex: (?:userstack).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Vatlayer - regex: (?:vatlayer).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Vercel - regex: (?:vercel).{0,40}\b([a-zA-Z0-9]{24})\b - - - pattern: - name: Verifier - 1 - regex: (?:verifier).{0,40}\b([a-zA-Z-0-9-]{5,16}\@[a-zA-Z-0-9]{4,16}\.[a-zA-Z-0-9]{3,6})\b - - - pattern: - name: Verifier - 2 - regex: (?:verifier).{0,40}\b([a-z0-9]{96})\b - - - pattern: - name: Verimail - regex: (?:verimail).{0,40}\b([A-Z0-9]{32})\b - - - pattern: - name: Veriphone - regex: (?:veriphone).{0,40}\b([0-9A-Z]{32})\b - - - pattern: - name: Versioneye - regex: (?:versioneye).{0,40}\b([a-zA-Z0-9-]{40})\b - - - pattern: - name: Viewneo - regex: (?:viewneo).{0,40}\b([a-z0-9A-Z]{120,300}.[a-z0-9A-Z]{150,300}.[a-z0-9A-Z-_]{600,800}) - - - pattern: - name: Virustotal - regex: (?:virustotal).{0,40}\b([a-f0-9]{64})\b - - - pattern: - name: Visualcrossing - regex: (?:visualcrossing).{0,40}\b([0-9A-Z]{25})\b - - - pattern: - name: Voicegain - regex: (?:voicegain).{0,40}\b(ey[0-9a-zA-Z_-]{34}.ey[0-9a-zA-Z_-]{108}.[0-9a-zA-Z_-]{43})\b - - - pattern: - name: Vouchery - 1 - regex: (?:vouchery).{0,40}\b([a-z0-9-]{36})\b - - - pattern: - name: Vouchery - 2 - regex: (?:vouchery).{0,40}\b([a-zA-Z0-9-\S]{2,20})\b - - - pattern: - name: Vpnapi - regex: (?:vpnapi).{0,40}\b([a-z0-9A-Z]{32})\b - - - pattern: - name: Vultrapikey - regex: (?:vultr).{0,40} \b([A-Z0-9]{36})\b - - - pattern: - name: Vyte - regex: (?:vyte).{0,40}\b([0-9a-z]{50})\b - - - pattern: - name: Walkscore - regex: (?:walkscore).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Weatherbit - regex: (?:weatherbit).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Weatherstack - regex: (?:weatherstack).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Webex - 1 - regex: (?:error).{0,40}(redirect_uri_mismatch) - - - pattern: - name: Webex - 2 - regex: (?:webex).{0,40}\b([A-Za-z0-9_-]{65})\b - - - pattern: - name: Webex - 3 - regex: (?:webex).{0,40}\b([A-Za-z0-9_-]{64})\b - - - pattern: - name: Webflow - regex: (?:webflow).{0,40}\b([a-zA0-9]{64})\b - - - pattern: - name: Webscraper - regex: (?:webscraper).{0,40}\b([a-zA-Z0-9]{60})\b - - - pattern: - name: Webscraping - regex: (?:webscraping).{0,40}\b([0-9A-Za-z]{32})\b - - - pattern: - name: Wepay - 2 - regex: (?:wepay).{0,40}\b([a-zA-Z0-9_?]{62})\b - - - pattern: - name: Whoxy - regex: (?:whoxy).{0,40}\b([0-9a-z]{33})\b - - - pattern: - name: Worksnaps - regex: (?:worksnaps).{0,40}\b([0-9A-Za-z]{40})\b - - - pattern: - name: Workstack - regex: (?:workstack).{0,40}\b([0-9Aa-zA-Z]{60})\b - - - pattern: - name: Worldcoinindex - regex: (?:worldcoinindex).{0,40}\b([a-zA-Z0-9]{35})\b - - - pattern: - name: Worldweather - regex: (?:worldweather).{0,40}\b([0-9a-z]{31})\b - - - pattern: - name: Wrike - regex: (?:wrike).{0,40}\b(ey[a-zA-Z0-9-._]{333})\b - - - pattern: - name: Yandex - regex: (?:yandex).{0,40}\b([a-z0-9A-Z.]{83})\b - - - pattern: - name: Youneedabudget - regex: (?:youneedabudget).{0,40}\b([0-9a-f]{64})\b - - - pattern: - name: Yousign - regex: (?:yousign).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Youtubeapikey - 1 - regex: (?:youtube).{0,40}\b([a-zA-Z-0-9_]{39})\b - - - pattern: - name: Zapier Webhook - regex: https://(?:www.)?hooks\.zapier\.com/hooks/catch/[A-Za-z0-9]+/[A-Za-z0-9]+/ - - - pattern: - name: Zapierwebhook - regex: (https:\/\/hooks.zapier.com\/hooks\/catch\/[A-Za-z0-9\/]{16}) - - - pattern: - name: Zendeskapi - 3 - regex: (?:zendesk).{0,40}([A-Za-z0-9_-]{40}) - - - pattern: - name: Zenkitapi - regex: (?:zenkit).{0,40}\b([0-9a-z]{8}\-[0-9A-Za-z]{32})\b - - - pattern: - name: Zenscrape - regex: (?:zenscrape).{0,40}\b([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\b - - - pattern: - name: Zenserp - regex: (?:zenserp).{0,40}\b([0-9a-z-]{36})\b - - - pattern: - name: Zeplin - regex: (?:zeplin).{0,40}\b([a-zA-Z0-9-.]{350,400})\b - - - pattern: - name: Zerobounce - regex: (?:zerobounce).{0,40}\b([a-z0-9]{32})\b - - - pattern: - name: Zipapi - 1 - regex: (?:zipapi).{0,40}\b([a-zA-Z0-9!=@#$%^]{7,}) - - - pattern: - name: Zipapi - 3 - regex: (?:zipapi).{0,40}\b([0-9a-z]{32})\b - - - pattern: - name: Zipcodeapi - regex: (?:zipcodeapi).{0,40}\b([a-zA-Z0-9]{64})\b - - - pattern: - name: Zoho Webhook - regex: https://creator\.zoho\.com/api/[A-Za-z0-9/\-_\.]+\?authtoken=[A-Za-z0-9]+ - - - pattern: - name: Zonkafeedback - regex: (?:zonka).{0,40}\b([A-Za-z0-9]{36})\b - - - pattern: - name: access_key_secret - regex: access[_-]?key[_-]?secret(=| =|:| :) - - - pattern: - name: access_secret - regex: access[_-]?secret(=| =|:| :) - - - pattern: - name: access_token - regex: access[_-]?token(=| =|:| :) - - - pattern: - name: account_sid - regex: account[_-]?sid(=| =|:| :) - - - pattern: - name: admin_email - regex: admin[_-]?email(=| =|:| :) - - - pattern: - name: adzerk_api_key - regex: adzerk[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: algolia_admin_key_1 - regex: algolia[_-]?admin[_-]?key[_-]?1(=| =|:| :) - - - pattern: - name: algolia_admin_key_2 - regex: algolia[_-]?admin[_-]?key[_-]?2(=| =|:| :) - - - pattern: - name: algolia_admin_key_mcm - regex: algolia[_-]?admin[_-]?key[_-]?mcm(=| =|:| :) - - - pattern: - name: algolia_api_key - regex: algolia[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: algolia_api_key_mcm - regex: algolia[_-]?api[_-]?key[_-]?mcm(=| =|:| :) - - - pattern: - name: algolia_api_key_search - regex: algolia[_-]?api[_-]?key[_-]?search(=| =|:| :) - - - pattern: - name: algolia_search_api_key - regex: algolia[_-]?search[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: algolia_search_key - regex: algolia[_-]?search[_-]?key(=| =|:| :) - - - pattern: - name: algolia_search_key_1 - regex: algolia[_-]?search[_-]?key[_-]?1(=| =|:| :) - - - pattern: - name: alias_pass - regex: alias[_-]?pass(=| =|:| :) - - - pattern: - name: alicloud_access_key - regex: alicloud[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: alicloud_secret_key - regex: alicloud[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: amazon_bucket_name - regex: amazon[_-]?bucket[_-]?name(=| =|:| :) - - - pattern: - name: amazon_secret_access_key - regex: amazon[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: anaconda_token - regex: anaconda[_-]?token(=| =|:| :) - - - pattern: - name: android_docs_deploy_token - regex: android[_-]?docs[_-]?deploy[_-]?token(=| =|:| :) - - - pattern: - name: ansible_vault_password - regex: ansible[_-]?vault[_-]?password(=| =|:| :) - - - pattern: - name: aos_key - regex: aos[_-]?key(=| =|:| :) - - - pattern: - name: aos_sec - regex: aos[_-]?sec(=| =|:| :) - - - pattern: - name: api_key - regex: api[_-]?key(=| =|:| :) - - - pattern: - name: api_key_secret - regex: api[_-]?key[_-]?secret(=| =|:| :) - - - pattern: - name: api_key_sid - regex: api[_-]?key[_-]?sid(=| =|:| :) - - - pattern: - name: api_secret - regex: api[_-]?secret(=| =|:| :) - - - pattern: - name: apiary_api_key - regex: apiary[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: apigw_access_token - regex: apigw[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: apikey_patterns - regex: apikey[:](?:['"]?[a-zA-Z0-9-_|]+['"]?) - - - pattern: - name: app_bucket_perm - regex: app[_-]?bucket[_-]?perm(=| =|:| :) - - - pattern: - name: app_report_token_key - regex: app[_-]?report[_-]?token[_-]?key(=| =|:| :) - - - pattern: - name: app_secrete - regex: app[_-]?secrete(=| =|:| :) - - - pattern: - name: app_token - regex: app[_-]?token(=| =|:| :) - - - pattern: - name: appclientsecret - regex: appclientsecret(=| =|:| :) - - - pattern: - name: apple_id_password - regex: apple[_-]?id[_-]?password(=| =|:| :) - - - pattern: - name: argos_token - regex: argos[_-]?token(=| =|:| :) - - - pattern: - name: artifactory - regex: (artifactory.{0,50}("|')?[a-zA-Z0-9=]{112}("|')?) - - - pattern: - name: artifactory_key - regex: artifactory[_-]?key(=| =|:| :) - - - pattern: - name: artifacts_aws_access_key_id - regex: artifacts[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: artifacts_aws_secret_access_key - regex: artifacts[_-]?aws[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: artifacts_bucket - regex: artifacts[_-]?bucket(=| =|:| :) - - - pattern: - name: artifacts_key - regex: artifacts[_-]?key(=| =|:| :) - - - pattern: - name: artifacts_secret - regex: artifacts[_-]?secret(=| =|:| :) - - - pattern: - name: assistant_iam_apikey - regex: assistant[_-]?iam[_-]?apikey(=| =|:| :) - - - pattern: - name: auth0_api_clientsecret - regex: auth0[_-]?api[_-]?clientsecret(=| =|:| :) - - - pattern: - name: auth0_client_secret - regex: auth0[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: auth_token - regex: auth[_-]?token(=| =|:| :) - - - pattern: - name: author_email_addr - regex: author[_-]?email[_-]?addr(=| =|:| :) - - - pattern: - name: author_npm_api_key - regex: author[_-]?npm[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: aws_access - regex: aws[_-]?access(=| =|:| :) - - - pattern: - name: aws_access_key - regex: aws[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: aws_access_key_id - 1 - regex: aws[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: aws_config_accesskeyid - regex: aws[_-]?config[_-]?accesskeyid(=| =|:| :) - - - pattern: - name: aws_config_secretaccesskey - regex: aws[_-]?config[_-]?secretaccesskey(=| =|:| :) - - - pattern: - name: aws_key - regex: aws[_-]?key(=| =|:| :) - - - pattern: - name: aws_patterns - regex: (?:accesskeyid|secretaccesskey|aws_access_key_id|aws_secret_access_key) - - - pattern: - name: aws_secret - regex: aws[_-]?secret(=| =|:| :) - - - pattern: - name: aws_secret_access_key - regex: aws[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: aws_secret_key - regex: aws[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: aws_secrets - regex: aws[_-]?secrets(=| =|:| :) - - - pattern: - name: aws_ses_access_key_id - regex: aws[_-]?ses[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: aws_ses_secret_access_key - regex: aws[_-]?ses[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: awsaccesskeyid - regex: awsaccesskeyid(=| =|:| :) - - - pattern: - name: awscn_access_key_id - regex: awscn[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: awscn_secret_access_key - regex: awscn[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: awssecretkey - regex: awssecretkey(=| =|:| :) - - - pattern: - name: b2_app_key - regex: b2[_-]?app[_-]?key(=| =|:| :) - - - pattern: - name: b2_bucket - regex: b2[_-]?bucket(=| =|:| :) - - - pattern: - name: bintray_api_key - regex: bintray[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: bintray_apikey - regex: bintray[_-]?apikey(=| =|:| :) - - - pattern: - name: bintray_gpg_password - regex: bintray[_-]?gpg[_-]?password(=| =|:| :) - - - pattern: - name: bintray_key - regex: bintray[_-]?key(=| =|:| :) - - - pattern: - name: bintray_token - regex: bintray[_-]?token(=| =|:| :) - - - pattern: - name: bintraykey - regex: bintraykey(=| =|:| :) - - - pattern: - name: bluemix_api_key - regex: bluemix[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: bluemix_auth - regex: bluemix[_-]?auth(=| =|:| :) - - - pattern: - name: bluemix_pass - regex: bluemix[_-]?pass(=| =|:| :) - - - pattern: - name: bluemix_pass_prod - regex: bluemix[_-]?pass[_-]?prod(=| =|:| :) - - - pattern: - name: bluemix_password - regex: bluemix[_-]?password(=| =|:| :) - - - pattern: - name: bluemix_pwd - regex: bluemix[_-]?pwd(=| =|:| :) - - - pattern: - name: bluemix_username - regex: bluemix[_-]?username(=| =|:| :) - - - pattern: - name: brackets_repo_oauth_token - regex: brackets[_-]?repo[_-]?oauth[_-]?token(=| =|:| :) - - - pattern: - name: browser_stack_access_key - regex: browser[_-]?stack[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: browserstack_access_key - regex: browserstack[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: bucketeer_aws_access_key_id - regex: bucketeer[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: bucketeer_aws_secret_access_key - regex: bucketeer[_-]?aws[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: built_branch_deploy_key - regex: built[_-]?branch[_-]?deploy[_-]?key(=| =|:| :) - - - pattern: - name: bundlesize_github_token - regex: bundlesize[_-]?github[_-]?token(=| =|:| :) - - - pattern: - name: bx_password - regex: bx[_-]?password(=| =|:| :) - - - pattern: - name: bx_username - regex: bx[_-]?username(=| =|:| :) - - - pattern: - name: cache_s3_secret_key - regex: cache[_-]?s3[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: cargo_token - regex: cargo[_-]?token(=| =|:| :) - - - pattern: - name: cattle_access_key - regex: cattle[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: cattle_agent_instance_auth - regex: cattle[_-]?agent[_-]?instance[_-]?auth(=| =|:| :) - - - pattern: - name: cattle_secret_key - regex: cattle[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: censys_secret - regex: censys[_-]?secret(=| =|:| :) - - - pattern: - name: certificate_password - regex: certificate[_-]?password(=| =|:| :) - - - pattern: - name: cf_password - regex: cf[_-]?password(=| =|:| :) - - - pattern: - name: cheverny_token - regex: cheverny[_-]?token(=| =|:| :) - - - pattern: - name: chrome_client_secret - regex: chrome[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: chrome_refresh_token - regex: chrome[_-]?refresh[_-]?token(=| =|:| :) - - - pattern: - name: ci_deploy_password - regex: ci[_-]?deploy[_-]?password(=| =|:| :) - - - pattern: - name: ci_project_url - regex: ci[_-]?project[_-]?url(=| =|:| :) - - - pattern: - name: ci_registry_user - regex: ci[_-]?registry[_-]?user(=| =|:| :) - - - pattern: - name: ci_server_name - regex: ci[_-]?server[_-]?name(=| =|:| :) - - - pattern: - name: ci_user_token - regex: ci[_-]?user[_-]?token(=| =|:| :) - - - pattern: - name: claimr_database - regex: claimr[_-]?database(=| =|:| :) - - - pattern: - name: claimr_db - regex: claimr[_-]?db(=| =|:| :) - - - pattern: - name: claimr_superuser - regex: claimr[_-]?superuser(=| =|:| :) - - - pattern: - name: claimr_token - regex: claimr[_-]?token(=| =|:| :) - - - pattern: - name: cli_e2e_cma_token - regex: cli[_-]?e2e[_-]?cma[_-]?token(=| =|:| :) - - - pattern: - name: client_secret - regex: client[_-]?secret(=| =|:| :) - - - pattern: - name: clojars_password - regex: clojars[_-]?password(=| =|:| :) - - - pattern: - name: cloud_api_key - regex: cloud[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: cloudant_archived_database - regex: cloudant[_-]?archived[_-]?database(=| =|:| :) - - - pattern: - name: cloudant_audited_database - regex: cloudant[_-]?audited[_-]?database(=| =|:| :) - - - pattern: - name: cloudant_database - regex: cloudant[_-]?database(=| =|:| :) - - - pattern: - name: cloudant_instance - regex: cloudant[_-]?instance(=| =|:| :) - - - pattern: - name: cloudant_order_database - regex: cloudant[_-]?order[_-]?database(=| =|:| :) - - - pattern: - name: cloudant_parsed_database - regex: cloudant[_-]?parsed[_-]?database(=| =|:| :) - - - pattern: - name: cloudant_password - regex: cloudant[_-]?password(=| =|:| :) - - - pattern: - name: cloudant_processed_database - regex: cloudant[_-]?processed[_-]?database(=| =|:| :) - - - pattern: - name: cloudant_service_database - regex: cloudant[_-]?service[_-]?database(=| =|:| :) - - - pattern: - name: cloudflare_api_key - regex: cloudflare[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: cloudflare_auth_email - regex: cloudflare[_-]?auth[_-]?email(=| =|:| :) - - - pattern: - name: cloudflare_auth_key - regex: cloudflare[_-]?auth[_-]?key(=| =|:| :) - - - pattern: - name: cloudflare_email - regex: cloudflare[_-]?email(=| =|:| :) - - - pattern: - name: cloudinary_url - regex: cloudinary[_-]?url(=| =|:| :) - - - pattern: - name: cloudinary_url_staging - regex: cloudinary[_-]?url[_-]?staging(=| =|:| :) - - - pattern: - name: clu_repo_url - regex: clu[_-]?repo[_-]?url(=| =|:| :) - - - pattern: - name: clu_ssh_private_key_base64 - regex: clu[_-]?ssh[_-]?private[_-]?key[_-]?base64(=| =|:| :) - - - pattern: - name: cn_access_key_id - regex: cn[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: cn_secret_access_key - regex: cn[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: cocoapods_trunk_email - regex: cocoapods[_-]?trunk[_-]?email(=| =|:| :) - - - pattern: - name: cocoapods_trunk_token - regex: cocoapods[_-]?trunk[_-]?token(=| =|:| :) - - - pattern: - name: codacy_project_token - regex: codacy[_-]?project[_-]?token(=| =|:| :) - - - pattern: - name: codeclimate - regex: (codeclima.{0,50}("|')?[0-9a-f]{64}("|')?) - - - pattern: - name: codeclimate_repo_token - regex: codeclimate[_-]?repo[_-]?token(=| =|:| :) - - - pattern: - name: codecov_token - regex: codecov[_-]?token(=| =|:| :) - - - pattern: - name: coding_token - regex: coding[_-]?token(=| =|:| :) - - - pattern: - name: conekta_apikey - regex: conekta[_-]?apikey(=| =|:| :) - - - pattern: - name: consumer_key - regex: consumer[_-]?key(=| =|:| :) - - - pattern: - name: consumerkey - regex: consumerkey(=| =|:| :) - - - pattern: - name: contentful_access_token - regex: contentful[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: contentful_cma_test_token - regex: contentful[_-]?cma[_-]?test[_-]?token(=| =|:| :) - - - pattern: - name: contentful_integration_management_token - regex: contentful[_-]?integration[_-]?management[_-]?token(=| =|:| :) - - - pattern: - name: contentful_php_management_test_token - regex: contentful[_-]?php[_-]?management[_-]?test[_-]?token(=| =|:| :) - - - pattern: - name: contentful_test_org_cma_token - regex: contentful[_-]?test[_-]?org[_-]?cma[_-]?token(=| =|:| :) - - - pattern: - name: contentful_v2_access_token - regex: contentful[_-]?v2[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: conversation_password - regex: conversation[_-]?password(=| =|:| :) - - - pattern: - name: conversation_username - regex: conversation[_-]?username(=| =|:| :) - - - pattern: - name: cos_secrets - regex: cos[_-]?secrets(=| =|:| :) - - - pattern: - name: coveralls_api_token - regex: coveralls[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: coveralls_repo_token - regex: coveralls[_-]?repo[_-]?token(=| =|:| :) - - - pattern: - name: coveralls_token - regex: coveralls[_-]?token(=| =|:| :) - - - pattern: - name: coverity_scan_token - regex: coverity[_-]?scan[_-]?token(=| =|:| :) - - - pattern: - name: cypress_record_key - regex: cypress[_-]?record[_-]?key(=| =|:| :) - - - pattern: - name: danger_github_api_token - regex: danger[_-]?github[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: database_host - regex: database[_-]?host(=| =|:| :) - - - pattern: - name: database_name - regex: database[_-]?name(=| =|:| :) - - - pattern: - name: database_password - regex: database[_-]?password(=| =|:| :) - - - pattern: - name: database_port - regex: database[_-]?port(=| =|:| :) - - - pattern: - name: database_user - regex: database[_-]?user(=| =|:| :) - - - pattern: - name: database_username - regex: database[_-]?username(=| =|:| :) - - - pattern: - name: datadog_api_key - regex: datadog[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: datadog_app_key - regex: datadog[_-]?app[_-]?key(=| =|:| :) - - - pattern: - name: db_connection - regex: db[_-]?connection(=| =|:| :) - - - pattern: - name: db_database - regex: db[_-]?database(=| =|:| :) - - - pattern: - name: db_host - regex: db[_-]?host(=| =|:| :) - - - pattern: - name: db_password - regex: db[_-]?password(=| =|:| :) - - - pattern: - name: db_pw - regex: db[_-]?pw(=| =|:| :) - - - pattern: - name: db_user - regex: db[_-]?user(=| =|:| :) - - - pattern: - name: db_username - regex: db[_-]?username(=| =|:| :) - - - pattern: - name: ddg_test_email - regex: ddg[_-]?test[_-]?email(=| =|:| :) - - - pattern: - name: ddg_test_email_pw - regex: ddg[_-]?test[_-]?email[_-]?pw(=| =|:| :) - - - pattern: - name: ddgc_github_token - regex: ddgc[_-]?github[_-]?token(=| =|:| :) - - - pattern: - name: deploy_password - regex: deploy[_-]?password(=| =|:| :) - - - pattern: - name: deploy_secure - regex: deploy[_-]?secure(=| =|:| :) - - - pattern: - name: deploy_token - regex: deploy[_-]?token(=| =|:| :) - - - pattern: - name: deploy_user - regex: deploy[_-]?user(=| =|:| :) - - - pattern: - name: dgpg_passphrase - regex: dgpg[_-]?passphrase(=| =|:| :) - - - pattern: - name: digitalocean_access_token - regex: digitalocean[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: digitalocean_ssh_key_body - regex: digitalocean[_-]?ssh[_-]?key[_-]?body(=| =|:| :) - - - pattern: - name: digitalocean_ssh_key_ids - regex: digitalocean[_-]?ssh[_-]?key[_-]?ids(=| =|:| :) - - - pattern: - name: docker_hub_password - regex: docker[_-]?hub[_-]?password(=| =|:| :) - - - pattern: - name: docker_key - regex: docker[_-]?key(=| =|:| :) - - - pattern: - name: docker_pass - regex: docker[_-]?pass(=| =|:| :) - - - pattern: - name: docker_passwd - regex: docker[_-]?passwd(=| =|:| :) - - - pattern: - name: docker_password - regex: docker[_-]?password(=| =|:| :) - - - pattern: - name: docker_postgres_url - regex: docker[_-]?postgres[_-]?url(=| =|:| :) - - - pattern: - name: docker_token - regex: docker[_-]?token(=| =|:| :) - - - pattern: - name: dockerhub_password - regex: dockerhub[_-]?password(=| =|:| :) - - - pattern: - name: dockerhubpassword - regex: dockerhubpassword(=| =|:| :) - - - pattern: - name: doordash_auth_token - regex: doordash[_-]?auth[_-]?token(=| =|:| :) - - - pattern: - name: dropbox_oauth_bearer - regex: dropbox[_-]?oauth[_-]?bearer(=| =|:| :) - - - pattern: - name: droplet_travis_password - regex: droplet[_-]?travis[_-]?password(=| =|:| :) - - - pattern: - name: dsonar_login - regex: dsonar[_-]?login(=| =|:| :) - - - pattern: - name: dsonar_projectkey - regex: dsonar[_-]?projectkey(=| =|:| :) - - - pattern: - name: elastic_cloud_auth - regex: elastic[_-]?cloud[_-]?auth(=| =|:| :) - - - pattern: - name: elasticsearch_password - regex: elasticsearch[_-]?password(=| =|:| :) - - - pattern: - name: encryption_password - regex: encryption[_-]?password(=| =|:| :) - - - pattern: - name: end_user_password - regex: end[_-]?user[_-]?password(=| =|:| :) - - - pattern: - name: env_github_oauth_token - regex: env[_-]?github[_-]?oauth[_-]?token(=| =|:| :) - - - pattern: - name: env_heroku_api_key - regex: env[_-]?heroku[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: env_key - regex: env[_-]?key(=| =|:| :) - - - pattern: - name: env_secret - regex: env[_-]?secret(=| =|:| :) - - - pattern: - name: env_secret_access_key - regex: env[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: env_sonatype_password - regex: env[_-]?sonatype[_-]?password(=| =|:| :) - - - pattern: - name: eureka_awssecretkey - regex: eureka[_-]?awssecretkey(=| =|:| :) - - - pattern: - name: exp_password - regex: exp[_-]?password(=| =|:| :) - - - pattern: - name: facebook_access_token - regex: (EAACEdEose0cBA[0-9A-Za-z]+) - - - pattern: - name: facebook_oauth - regex: '[f|F][a|A][c|C][e|E][b|B][o|O][o|O][k|K].*[''|"][0-9a-f]{32}[''|"]' - - - pattern: - name: file_password - regex: file[_-]?password(=| =|:| :) - - - pattern: - name: firebase_api_json - regex: firebase[_-]?api[_-]?json(=| =|:| :) - - - pattern: - name: firebase_api_token - regex: firebase[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: firebase_key - regex: firebase[_-]?key(=| =|:| :) - - - pattern: - name: firebase_project_develop - regex: firebase[_-]?project[_-]?develop(=| =|:| :) - - - pattern: - name: firebase_token - regex: firebase[_-]?token(=| =|:| :) - - - pattern: - name: firefox_secret - regex: firefox[_-]?secret(=| =|:| :) - - - pattern: - name: flask_secret_key - regex: flask[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: flickr_api_key - regex: flickr[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: flickr_api_secret - regex: flickr[_-]?api[_-]?secret(=| =|:| :) - - - pattern: - name: fossa_api_key - regex: fossa[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: ftp_host - regex: ftp[_-]?host(=| =|:| :) - - - pattern: - name: ftp_login - regex: ftp[_-]?login(=| =|:| :) - - - pattern: - name: ftp_password - regex: ftp[_-]?password(=| =|:| :) - - - pattern: - name: ftp_pw - regex: ftp[_-]?pw(=| =|:| :) - - - pattern: - name: ftp_user - regex: ftp[_-]?user(=| =|:| :) - - - pattern: - name: ftp_username - regex: ftp[_-]?username(=| =|:| :) - - - pattern: - name: gcloud_bucket - regex: gcloud[_-]?bucket(=| =|:| :) - - - pattern: - name: gcloud_project - regex: gcloud[_-]?project(=| =|:| :) - - - pattern: - name: gcloud_service_key - regex: gcloud[_-]?service[_-]?key(=| =|:| :) - - - pattern: - name: gcr_password - regex: gcr[_-]?password(=| =|:| :) - - - pattern: - name: gcs_bucket - regex: gcs[_-]?bucket(=| =|:| :) - - - pattern: - name: gh_api_key - regex: gh[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: gh_email - regex: gh[_-]?email(=| =|:| :) - - - pattern: - name: gh_next_oauth_client_secret - regex: gh[_-]?next[_-]?oauth[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: gh_next_unstable_oauth_client_id - regex: gh[_-]?next[_-]?unstable[_-]?oauth[_-]?client[_-]?id(=| =|:| :) - - - pattern: - name: gh_next_unstable_oauth_client_secret - regex: gh[_-]?next[_-]?unstable[_-]?oauth[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: gh_oauth_client_secret - regex: gh[_-]?oauth[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: gh_oauth_token - regex: gh[_-]?oauth[_-]?token(=| =|:| :) - - - pattern: - name: gh_repo_token - regex: gh[_-]?repo[_-]?token(=| =|:| :) - - - pattern: - name: gh_token - regex: gh[_-]?token(=| =|:| :) - - - pattern: - name: gh_unstable_oauth_client_secret - regex: gh[_-]?unstable[_-]?oauth[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: ghb_token - regex: ghb[_-]?token(=| =|:| :) - - - pattern: - name: ghost_api_key - regex: ghost[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: git_author_email - regex: git[_-]?author[_-]?email(=| =|:| :) - - - pattern: - name: git_author_name - regex: git[_-]?author[_-]?name(=| =|:| :) - - - pattern: - name: git_committer_email - regex: git[_-]?committer[_-]?email(=| =|:| :) - - - pattern: - name: git_committer_name - regex: git[_-]?committer[_-]?name(=| =|:| :) - - - pattern: - name: git_email - regex: git[_-]?email(=| =|:| :) - - - pattern: - name: git_name - regex: git[_-]?name(=| =|:| :) - - - pattern: - name: git_token - regex: git[_-]?token(=| =|:| :) - - - pattern: - name: github_access_token - 1 - regex: github[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: github_access_token - 2 - regex: '[a-zA-Z0-9_-]*:[a-zA-Z0-9_-]+@github.com*' - - - pattern: - name: github_api_key - regex: github[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: github_api_token - regex: github[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: github_auth - regex: github[_-]?auth(=| =|:| :) - - - pattern: - name: github_auth_token - regex: github[_-]?auth[_-]?token(=| =|:| :) - - - pattern: - name: github_client_secret - regex: github[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: github_deploy_hb_doc_pass - regex: github[_-]?deploy[_-]?hb[_-]?doc[_-]?pass(=| =|:| :) - - - pattern: - name: github_deployment_token - regex: github[_-]?deployment[_-]?token(=| =|:| :) - - - pattern: - name: github_hunter_token - regex: github[_-]?hunter[_-]?token(=| =|:| :) - - - pattern: - name: github_hunter_username - regex: github[_-]?hunter[_-]?username(=| =|:| :) - - - pattern: - name: github_key - regex: github[_-]?key(=| =|:| :) - - - pattern: - name: github_oauth - regex: github[_-]?oauth(=| =|:| :) - - - pattern: - name: github_oauth_token - regex: github[_-]?oauth[_-]?token(=| =|:| :) - - - pattern: - name: github_password - regex: github[_-]?password(=| =|:| :) - - - pattern: - name: github_pwd - regex: github[_-]?pwd(=| =|:| :) - - - pattern: - name: github_release_token - regex: github[_-]?release[_-]?token(=| =|:| :) - - - pattern: - name: github_repo - regex: github[_-]?repo(=| =|:| :) - - - pattern: - name: github_token - regex: github[_-]?token(=| =|:| :) - - - pattern: - name: github_tokens - regex: github[_-]?tokens(=| =|:| :) - - - pattern: - name: gitlab_user_email - regex: gitlab[_-]?user[_-]?email(=| =|:| :) - - - pattern: - name: gogs_password - regex: gogs[_-]?password(=| =|:| :) - - - pattern: - name: google_account_type - regex: google[_-]?account[_-]?type(=| =|:| :) - - - pattern: - name: google_client_email - regex: google[_-]?client[_-]?email(=| =|:| :) - - - pattern: - name: google_client_id - regex: google[_-]?client[_-]?id(=| =|:| :) - - - pattern: - name: google_client_secret - regex: google[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: google_maps_api_key - regex: google[_-]?maps[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: google_oauth - regex: (ya29.[0-9A-Za-z-_]+) - - - pattern: - name: google_patterns - regex: (?:google_client_id|google_client_secret|google_client_token) - - - pattern: - name: google_private_key - regex: google[_-]?private[_-]?key(=| =|:| :) - - - pattern: - name: google_url - regex: ([0-9]{12}-[a-z0-9]{32}.apps.googleusercontent.com) - - - pattern: - name: gpg_key_name - regex: gpg[_-]?key[_-]?name(=| =|:| :) - - - pattern: - name: gpg_keyname - regex: gpg[_-]?keyname(=| =|:| :) - - - pattern: - name: gpg_ownertrust - regex: gpg[_-]?ownertrust(=| =|:| :) - - - pattern: - name: gpg_passphrase - regex: gpg[_-]?passphrase(=| =|:| :) - - - pattern: - name: gpg_private_key - regex: gpg[_-]?private[_-]?key(=| =|:| :) - - - pattern: - name: gpg_secret_keys - regex: gpg[_-]?secret[_-]?keys(=| =|:| :) - - - pattern: - name: gradle_publish_key - regex: gradle[_-]?publish[_-]?key(=| =|:| :) - - - pattern: - name: gradle_publish_secret - regex: gradle[_-]?publish[_-]?secret(=| =|:| :) - - - pattern: - name: gradle_signing_key_id - regex: gradle[_-]?signing[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: gradle_signing_password - regex: gradle[_-]?signing[_-]?password(=| =|:| :) - - - pattern: - name: gren_github_token - regex: gren[_-]?github[_-]?token(=| =|:| :) - - - pattern: - name: grgit_user - regex: grgit[_-]?user(=| =|:| :) - - - pattern: - name: hab_auth_token - regex: hab[_-]?auth[_-]?token(=| =|:| :) - - - pattern: - name: hab_key - regex: hab[_-]?key(=| =|:| :) - - - pattern: - name: hb_codesign_gpg_pass - regex: hb[_-]?codesign[_-]?gpg[_-]?pass(=| =|:| :) - - - pattern: - name: hb_codesign_key_pass - regex: hb[_-]?codesign[_-]?key[_-]?pass(=| =|:| :) - - - pattern: - name: heroku_api_key - regex: heroku[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: heroku_api_key_api_key - regex: ([h|H][e|E][r|R][o|O][k|K][u|U].{0,30}[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}) - - - pattern: - name: heroku_email - regex: heroku[_-]?email(=| =|:| :) - - - pattern: - name: heroku_token - regex: heroku[_-]?token(=| =|:| :) - - - pattern: - name: hockeyapp - regex: hockey.{0,50}("|')?[0-9a-f]{32}("|')? - - - pattern: - name: hockeyapp_token - regex: hockeyapp[_-]?token(=| =|:| :) - - - pattern: - name: homebrew_github_api_token - regex: homebrew[_-]?github[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: hub_dxia2_password - regex: hub[_-]?dxia2[_-]?password(=| =|:| :) - - - pattern: - name: ij_repo_password - regex: ij[_-]?repo[_-]?password(=| =|:| :) - - - pattern: - name: ij_repo_username - regex: ij[_-]?repo[_-]?username(=| =|:| :) - - - pattern: - name: index_name - regex: index[_-]?name(=| =|:| :) - - - pattern: - name: integration_test_api_key - regex: integration[_-]?test[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: integration_test_appid - regex: integration[_-]?test[_-]?appid(=| =|:| :) - - - pattern: - name: internal_secrets - regex: internal[_-]?secrets(=| =|:| :) - - - pattern: - name: ios_docs_deploy_token - regex: ios[_-]?docs[_-]?deploy[_-]?token(=| =|:| :) - - - pattern: - name: itest_gh_token - regex: itest[_-]?gh[_-]?token(=| =|:| :) - - - pattern: - name: jdbc - regex: 'mysql: jdbc:mysql(=| =|:| :)' - - - pattern: - name: jdbc_databaseurl - regex: jdbc[_-]?databaseurl(=| =|:| :) - - - pattern: - name: jdbc_host - regex: jdbc[_-]?host(=| =|:| :) - - - pattern: - name: jwt_secret - regex: jwt[_-]?secret(=| =|:| :) - - - pattern: - name: kafka_admin_url - regex: kafka[_-]?admin[_-]?url(=| =|:| :) - - - pattern: - name: kafka_instance_name - regex: kafka[_-]?instance[_-]?name(=| =|:| :) - - - pattern: - name: kafka_rest_url - regex: kafka[_-]?rest[_-]?url(=| =|:| :) - - - pattern: - name: keystore_pass - regex: keystore[_-]?pass(=| =|:| :) - - - pattern: - name: kovan_private_key - regex: kovan[_-]?private[_-]?key(=| =|:| :) - - - pattern: - name: kubecfg_s3_path - regex: kubecfg[_-]?s3[_-]?path(=| =|:| :) - - - pattern: - name: kubeconfig - regex: kubeconfig(=| =|:| :) - - - pattern: - name: kxoltsn3vogdop92m - regex: kxoltsn3vogdop92m(=| =|:| :) - - - pattern: - name: leanplum_key - regex: leanplum[_-]?key(=| =|:| :) - - - pattern: - name: lektor_deploy_password - regex: lektor[_-]?deploy[_-]?password(=| =|:| :) - - - pattern: - name: lektor_deploy_username - regex: lektor[_-]?deploy[_-]?username(=| =|:| :) - - - pattern: - name: lighthouse_api_key - regex: lighthouse[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: linux_signing_key - regex: linux[_-]?signing[_-]?key(=| =|:| :) - - - pattern: - name: ll_publish_url - regex: ll[_-]?publish[_-]?url(=| =|:| :) - - - pattern: - name: ll_shared_key - regex: ll[_-]?shared[_-]?key(=| =|:| :) - - - pattern: - name: looker_test_runner_client_secret - regex: looker[_-]?test[_-]?runner[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: lottie_happo_api_key - regex: lottie[_-]?happo[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: lottie_happo_secret_key - regex: lottie[_-]?happo[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: lottie_s3_secret_key - regex: lottie[_-]?s3[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: lottie_upload_cert_key_password - regex: lottie[_-]?upload[_-]?cert[_-]?key[_-]?password(=| =|:| :) - - - pattern: - name: lottie_upload_cert_key_store_password - regex: lottie[_-]?upload[_-]?cert[_-]?key[_-]?store[_-]?password(=| =|:| :) - - - pattern: - name: magento_auth_password - regex: magento[_-]?auth[_-]?password(=| =|:| :) - - - pattern: - name: magento_auth_username - regex: magento[_-]?auth[_-]?username (=| =|:| :) - - - pattern: - name: magento_password - regex: magento[_-]?password(=| =|:| :) - - - pattern: - name: mail_password - regex: mail[_-]?password(=| =|:| :) - - - pattern: - name: mailchimp - regex: (W(?:[a-f0-9]{32}(-us[0-9]{1,2}))a-zA-Z0-9) - - - pattern: - name: mailchimp_api_key - regex: mailchimp[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: mailchimp_key - regex: mailchimp[_-]?key(=| =|:| :) - - - pattern: - name: mailer_password - regex: mailer[_-]?password(=| =|:| :) - - - pattern: - name: mailgun - regex: (key-[0-9a-f]{32}) - - - pattern: - name: mailgun_api_key - regex: mailgun[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: mailgun_apikey - regex: mailgun[_-]?apikey(=| =|:| :) - - - pattern: - name: mailgun_password - regex: mailgun[_-]?password(=| =|:| :) - - - pattern: - name: mailgun_priv_key - regex: mailgun[_-]?priv[_-]?key(=| =|:| :) - - - pattern: - name: mailgun_pub_apikey - regex: mailgun[_-]?pub[_-]?apikey(=| =|:| :) - - - pattern: - name: mailgun_pub_key - regex: mailgun[_-]?pub[_-]?key(=| =|:| :) - - - pattern: - name: mailgun_secret_api_key - regex: mailgun[_-]?secret[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: manage_key - regex: manage[_-]?key(=| =|:| :) - - - pattern: - name: manage_secret - regex: manage[_-]?secret(=| =|:| :) - - - pattern: - name: management_token - regex: management[_-]?token(=| =|:| :) - - - pattern: - name: managementapiaccesstoken - regex: managementapiaccesstoken(=| =|:| :) - - - pattern: - name: mandrill_api_key - regex: mandrill[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: manifest_app_token - regex: manifest[_-]?app[_-]?token(=| =|:| :) - - - pattern: - name: manifest_app_url - regex: manifest[_-]?app[_-]?url(=| =|:| :) - - - pattern: - name: mapbox_access_token - regex: mapbox[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: mapbox_api_token - regex: mapbox[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: mapbox_aws_access_key_id - regex: mapbox[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: mapbox_aws_secret_access_key - regex: mapbox[_-]?aws[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: mapboxaccesstoken - regex: mapboxaccesstoken(=| =|:| :) - - - pattern: - name: master_password - regex: (master_password).+ - - - pattern: - name: mg_api_key - regex: mg[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: mg_public_api_key - regex: mg[_-]?public[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: mh_apikey - regex: mh[_-]?apikey(=| =|:| :) - - - pattern: - name: mh_password - regex: mh[_-]?password(=| =|:| :) - - - pattern: - name: mile_zero_key - regex: mile[_-]?zero[_-]?key(=| =|:| :) - - - pattern: - name: minio_access_key - regex: minio[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: minio_secret_key - regex: minio[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: multi_bob_sid - regex: multi[_-]?bob[_-]?sid(=| =|:| :) - - - pattern: - name: multi_connect_sid - regex: multi[_-]?connect[_-]?sid(=| =|:| :) - - - pattern: - name: multi_disconnect_sid - regex: multi[_-]?disconnect[_-]?sid(=| =|:| :) - - - pattern: - name: multi_workflow_sid - regex: multi[_-]?workflow[_-]?sid(=| =|:| :) - - - pattern: - name: multi_workspace_sid - regex: multi[_-]?workspace[_-]?sid(=| =|:| :) - - - pattern: - name: my_secret_env - regex: my[_-]?secret[_-]?env(=| =|:| :) - - - pattern: - name: mysql_database - regex: mysql[_-]?database(=| =|:| :) - - - pattern: - name: mysql_hostname - regex: mysql[_-]?hostname(=| =|:| :) - - - pattern: - name: mysql_password - regex: mysql[_-]?password(=| =|:| :) - - - pattern: - name: mysql_root_password - regex: mysql[_-]?root[_-]?password(=| =|:| :) - - - pattern: - name: mysql_user - regex: mysql[_-]?user(=| =|:| :) - - - pattern: - name: mysql_username - regex: mysql[_-]?username(=| =|:| :) - - - pattern: - name: mysqlmasteruser - regex: mysqlmasteruser(=| =|:| :) - - - pattern: - name: mysqlsecret - regex: mysqlsecret(=| =|:| :) - - - pattern: - name: nativeevents - regex: nativeevents(=| =|:| :) - - - pattern: - name: netlify_api_key - regex: netlify[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: new_relic_beta_token - regex: new[_-]?relic[_-]?beta[_-]?token(=| =|:| :) - - - pattern: - name: nexus_password - regex: nexus[_-]?password(=| =|:| :) - - - pattern: - name: nexuspassword - regex: nexuspassword(=| =|:| :) - - - pattern: - name: ngrok_auth_token - regex: ngrok[_-]?auth[_-]?token(=| =|:| :) - - - pattern: - name: ngrok_token - regex: ngrok[_-]?token(=| =|:| :) - - - pattern: - name: node_env - regex: node[_-]?env(=| =|:| :) - - - pattern: - name: node_pre_gyp_accesskeyid - regex: node[_-]?pre[_-]?gyp[_-]?accesskeyid(=| =|:| :) - - - pattern: - name: node_pre_gyp_github_token - regex: node[_-]?pre[_-]?gyp[_-]?github[_-]?token(=| =|:| :) - - - pattern: - name: node_pre_gyp_secretaccesskey - regex: node[_-]?pre[_-]?gyp[_-]?secretaccesskey(=| =|:| :) - - - pattern: - name: non_token - regex: non[_-]?token(=| =|:| :) - - - pattern: - name: now_token - regex: now[_-]?token(=| =|:| :) - - - pattern: - name: npm_api_key - regex: npm[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: npm_api_token - regex: npm[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: npm_auth_token - regex: npm[_-]?auth[_-]?token(=| =|:| :) - - - pattern: - name: npm_email - regex: npm[_-]?email(=| =|:| :) - - - pattern: - name: npm_password - regex: npm[_-]?password(=| =|:| :) - - - pattern: - name: npm_secret_key - regex: npm[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: npm_token - 1 - regex: npm[_-]?token(=| =|:| :) - - - pattern: - name: nuget_api_key - 1 - regex: (oy2[a-z0-9]{43}) - - - pattern: - name: nuget_api_key - 2 - regex: nuget[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: numbers_service_pass - regex: numbers[_-]?service[_-]?pass(=| =|:| :) - - - pattern: - name: oauth_token - regex: oauth[_-]?token(=| =|:| :) - - - pattern: - name: object_storage_password - regex: object[_-]?storage[_-]?password(=| =|:| :) - - - pattern: - name: object_storage_region_name - regex: object[_-]?storage[_-]?region[_-]?name(=| =|:| :) - - - pattern: - name: object_store_bucket - regex: object[_-]?store[_-]?bucket(=| =|:| :) - - - pattern: - name: object_store_creds - regex: object[_-]?store[_-]?creds(=| =|:| :) - - - pattern: - name: oc_pass - regex: oc[_-]?pass(=| =|:| :) - - - pattern: - name: octest_app_password - regex: octest[_-]?app[_-]?password(=| =|:| :) - - - pattern: - name: octest_app_username - regex: octest[_-]?app[_-]?username(=| =|:| :) - - - pattern: - name: octest_password - regex: octest[_-]?password(=| =|:| :) - - - pattern: - name: ofta_key - regex: ofta[_-]?key(=| =|:| :) - - - pattern: - name: ofta_region - regex: ofta[_-]?region(=| =|:| :) - - - pattern: - name: ofta_secret - regex: ofta[_-]?secret(=| =|:| :) - - - pattern: - name: okta_client_token - regex: okta[_-]?client[_-]?token(=| =|:| :) - - - pattern: - name: okta_oauth2_client_secret - regex: okta[_-]?oauth2[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: okta_oauth2_clientsecret - regex: okta[_-]?oauth2[_-]?clientsecret(=| =|:| :) - - - pattern: - name: omise_key - regex: omise[_-]?key(=| =|:| :) - - - pattern: - name: omise_pkey - regex: omise[_-]?pkey(=| =|:| :) - - - pattern: - name: omise_pubkey - regex: omise[_-]?pubkey(=| =|:| :) - - - pattern: - name: omise_skey - regex: omise[_-]?skey(=| =|:| :) - - - pattern: - name: onesignal_api_key - regex: onesignal[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: onesignal_user_auth_key - regex: onesignal[_-]?user[_-]?auth[_-]?key(=| =|:| :) - - - pattern: - name: open_whisk_key - regex: open[_-]?whisk[_-]?key(=| =|:| :) - - - pattern: - name: openwhisk_key - regex: openwhisk[_-]?key(=| =|:| :) - - - pattern: - name: os_auth_url - regex: os[_-]?auth[_-]?url(=| =|:| :) - - - pattern: - name: os_password - regex: os[_-]?password(=| =|:| :) - - - pattern: - name: ossrh_jira_password - regex: ossrh[_-]?jira[_-]?password(=| =|:| :) - - - pattern: - name: ossrh_pass - regex: ossrh[_-]?pass(=| =|:| :) - - - pattern: - name: ossrh_password - regex: ossrh[_-]?password(=| =|:| :) - - - pattern: - name: ossrh_secret - regex: ossrh[_-]?secret(=| =|:| :) - - - pattern: - name: ossrh_username - regex: ossrh[_-]?username(=| =|:| :) - - - pattern: - name: outlook_team - regex: (https://outlook.office.com/webhook/[0-9a-f-]{36}@) - - - pattern: - name: packagecloud_token - regex: packagecloud[_-]?token(=| =|:| :) - - - pattern: - name: pagerduty_apikey - regex: pagerduty[_-]?apikey(=| =|:| :) - - - pattern: - name: parse_js_key - regex: parse[_-]?js[_-]?key(=| =|:| :) - - - pattern: - name: passwordtravis - regex: passwordtravis(=| =|:| :) - - - pattern: - name: paypal_braintree_access_token - regex: (access_token$production$[0-9a-z]{16}$[0-9a-f]{32}) - - - pattern: - name: paypal_client_secret - regex: paypal[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: percy_project - regex: percy[_-]?project(=| =|:| :) - - - pattern: - name: percy_token - regex: percy[_-]?token(=| =|:| :) - - - pattern: - name: personal_key - regex: personal[_-]?key(=| =|:| :) - - - pattern: - name: personal_secret - regex: personal[_-]?secret(=| =|:| :) - - - pattern: - name: pg_database - regex: pg[_-]?database(=| =|:| :) - - - pattern: - name: pg_host - regex: pg[_-]?host(=| =|:| :) - - - pattern: - name: places_api_key - regex: places[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: places_apikey - regex: places[_-]?apikey(=| =|:| :) - - - pattern: - name: plotly_apikey - regex: plotly[_-]?apikey(=| =|:| :) - - - pattern: - name: plugin_password - regex: plugin[_-]?password(=| =|:| :) - - - pattern: - name: postgres_env_postgres_db - regex: postgres[_-]?env[_-]?postgres[_-]?db(=| =|:| :) - - - pattern: - name: postgres_env_postgres_password - regex: postgres[_-]?env[_-]?postgres[_-]?password(=| =|:| :) - - - pattern: - name: postgresql_db - regex: postgresql[_-]?db(=| =|:| :) - - - pattern: - name: postgresql_pass - regex: postgresql[_-]?pass(=| =|:| :) - - - pattern: - name: prebuild_auth - regex: prebuild[_-]?auth(=| =|:| :) - - - pattern: - name: preferred_username - regex: preferred[_-]?username(=| =|:| :) - - - pattern: - name: pring_mail_username - regex: pring[_-]?mail[_-]?username(=| =|:| :) - - - pattern: - name: private_key - regex: '-----(?:(?:BEGIN|END) )(?:(?:EC|PGP|DSA|RSA|OPENSSH).)?PRIVATE.KEY(.BLOCK)?-----' - - - pattern: - name: private_signing_password - regex: private[_-]?signing[_-]?password(=| =|:| :) - - - pattern: - name: prod_access_key_id - regex: prod[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: prod_password - regex: prod[_-]?password(=| =|:| :) - - - pattern: - name: prod_secret_key - regex: prod[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: project_config - regex: project[_-]?config(=| =|:| :) - - - pattern: - name: publish_access - regex: publish[_-]?access(=| =|:| :) - - - pattern: - name: publish_key - regex: publish[_-]?key(=| =|:| :) - - - pattern: - name: publish_secret - regex: publish[_-]?secret(=| =|:| :) - - - pattern: - name: pushover_token - regex: pushover[_-]?token(=| =|:| :) - - - pattern: - name: pypi_passowrd - regex: pypi[_-]?passowrd(=| =|:| :) - - - pattern: - name: qiita_token - regex: qiita[_-]?token(=| =|:| :) - - - pattern: - name: quip_token - regex: quip[_-]?token(=| =|:| :) - - - pattern: - name: rabbitmq_password - regex: rabbitmq[_-]?password(=| =|:| :) - - - pattern: - name: randrmusicapiaccesstoken - regex: randrmusicapiaccesstoken(=| =|:| :) - - - pattern: - name: redis_stunnel_urls - regex: redis[_-]?stunnel[_-]?urls(=| =|:| :) - - - pattern: - name: rediscloud_url - regex: rediscloud[_-]?url(=| =|:| :) - - - pattern: - name: refresh_token - regex: refresh[_-]?token(=| =|:| :) - - - pattern: - name: registry_pass - regex: registry[_-]?pass(=| =|:| :) - - - pattern: - name: registry_secure - regex: registry[_-]?secure(=| =|:| :) - - - pattern: - name: release_gh_token - regex: release[_-]?gh[_-]?token(=| =|:| :) - - - pattern: - name: release_token - regex: release[_-]?token(=| =|:| :) - - - pattern: - name: reporting_webdav_pwd - regex: reporting[_-]?webdav[_-]?pwd(=| =|:| :) - - - pattern: - name: reporting_webdav_url - regex: reporting[_-]?webdav[_-]?url(=| =|:| :) - - - pattern: - name: repotoken - regex: repotoken(=| =|:| :) - - - pattern: - name: rest_api_key - regex: rest[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: rinkeby_private_key - regex: rinkeby[_-]?private[_-]?key(=| =|:| :) - - - pattern: - name: ropsten_private_key - regex: ropsten[_-]?private[_-]?key(=| =|:| :) - - - pattern: - name: route53_access_key_id - regex: route53[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: rtd_key_pass - regex: rtd[_-]?key[_-]?pass(=| =|:| :) - - - pattern: - name: rtd_store_pass - regex: rtd[_-]?store[_-]?pass(=| =|:| :) - - - pattern: - name: rubygems_auth_token - regex: rubygems[_-]?auth[_-]?token(=| =|:| :) - - - pattern: - name: s3_access_key - regex: s3[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: s3_access_key_id - regex: s3[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: s3_bucket_name_app_logs - regex: s3[_-]?bucket[_-]?name[_-]?app[_-]?logs(=| =|:| :) - - - pattern: - name: s3_bucket_name_assets - regex: s3[_-]?bucket[_-]?name[_-]?assets(=| =|:| :) - - - pattern: - name: s3_external_3_amazonaws_com - regex: s3[_-]?external[_-]?3[_-]?amazonaws[_-]?com(=| =|:| :) - - - pattern: - name: s3_key - regex: s3[_-]?key(=| =|:| :) - - - pattern: - name: s3_key_app_logs - regex: s3[_-]?key[_-]?app[_-]?logs(=| =|:| :) - - - pattern: - name: s3_key_assets - regex: s3[_-]?key[_-]?assets(=| =|:| :) - - - pattern: - name: s3_secret_app_logs - regex: s3[_-]?secret[_-]?app[_-]?logs(=| =|:| :) - - - pattern: - name: s3_secret_assets - regex: s3[_-]?secret[_-]?assets(=| =|:| :) - - - pattern: - name: s3_secret_key - regex: s3[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: s3_user_secret - regex: s3[_-]?user[_-]?secret(=| =|:| :) - - - pattern: - name: sacloud_access_token - regex: sacloud[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: sacloud_access_token_secret - regex: sacloud[_-]?access[_-]?token[_-]?secret(=| =|:| :) - - - pattern: - name: sacloud_api - regex: sacloud[_-]?api(=| =|:| :) - - - pattern: - name: salesforce_bulk_test_password - regex: salesforce[_-]?bulk[_-]?test[_-]?password(=| =|:| :) - - - pattern: - name: salesforce_bulk_test_security_token - regex: salesforce[_-]?bulk[_-]?test[_-]?security[_-]?token(=| =|:| :) - - - pattern: - name: sandbox_access_token - regex: sandbox[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: sandbox_aws_access_key_id - regex: sandbox[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: sandbox_aws_secret_access_key - regex: sandbox[_-]?aws[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: sauce_access_key - regex: sauce[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: sauce_token - regex: (sauce.{0,50}("|')?[0-9a-f-]{36}("|')?) - - - pattern: - name: scrutinizer_token - regex: scrutinizer[_-]?token(=| =|:| :) - - - pattern: - name: sdr_token - regex: sdr[_-]?token(=| =|:| :) - - - pattern: - name: secret_0 - regex: secret[_-]?0(=| =|:| :) - - - pattern: - name: secret_1 - regex: secret[_-]?1(=| =|:| :) - - - pattern: - name: secret_10 - regex: secret[_-]?10(=| =|:| :) - - - pattern: - name: secret_11 - regex: secret[_-]?11(=| =|:| :) - - - pattern: - name: secret_2 - regex: secret[_-]?2(=| =|:| :) - - - pattern: - name: secret_3 - regex: secret[_-]?3(=| =|:| :) - - - pattern: - name: secret_4 - regex: secret[_-]?4(=| =|:| :) - - - pattern: - name: secret_5 - regex: secret[_-]?5(=| =|:| :) - - - pattern: - name: secret_6 - regex: secret[_-]?6(=| =|:| :) - - - pattern: - name: secret_7 - regex: secret[_-]?7(=| =|:| :) - - - pattern: - name: secret_8 - regex: secret[_-]?8(=| =|:| :) - - - pattern: - name: secret_9 - regex: secret[_-]?9(=| =|:| :) - - - pattern: - name: secret_key_base - regex: secret[_-]?key[_-]?base(=| =|:| :) - - - pattern: - name: secretaccesskey - regex: secretaccesskey(=| =|:| :) - - - pattern: - name: secretkey - regex: secretkey(=| =|:| :) - - - pattern: - name: segment_api_key - regex: segment[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: selion_log_level_dev - regex: selion[_-]?log[_-]?level[_-]?dev(=| =|:| :) - - - pattern: - name: selion_selenium_host - regex: selion[_-]?selenium[_-]?host(=| =|:| :) - - - pattern: - name: sendgrid - 2 - regex: sendgrid(=| =|:| :) - - - pattern: - name: sendgrid_api_key - 1 - regex: sendgrid[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: sendgrid_key - regex: sendgrid[_-]?key(=| =|:| :) - - - pattern: - name: sendgrid_password - regex: sendgrid[_-]?password(=| =|:| :) - - - pattern: - name: sendgrid_user - regex: sendgrid[_-]?user(=| =|:| :) - - - pattern: - name: sendgrid_username - regex: sendgrid[_-]?username(=| =|:| :) - - - pattern: - name: sendwithus_key - regex: sendwithus[_-]?key(=| =|:| :) - - - pattern: - name: sentry_auth_token - regex: sentry[_-]?auth[_-]?token(=| =|:| :) - - - pattern: - name: sentry_default_org - regex: sentry[_-]?default[_-]?org(=| =|:| :) - - - pattern: - name: sentry_endpoint - regex: sentry[_-]?endpoint(=| =|:| :) - - - pattern: - name: sentry_key - regex: sentry[_-]?key(=| =|:| :) - - - pattern: - name: service_account_secret - regex: service[_-]?account[_-]?secret(=| =|:| :) - - - pattern: - name: ses_access_key - regex: ses[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: ses_secret_key - regex: ses[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: setdstaccesskey - regex: setdstaccesskey(=| =|:| :) - - - pattern: - name: setdstsecretkey - regex: setdstsecretkey(=| =|:| :) - - - pattern: - name: setsecretkey - regex: setsecretkey(=| =|:| :) - - - pattern: - name: signing_key - regex: signing[_-]?key(=| =|:| :) - - - pattern: - name: signing_key_password - regex: signing[_-]?key[_-]?password(=| =|:| :) - - - pattern: - name: signing_key_secret - regex: signing[_-]?key[_-]?secret(=| =|:| :) - - - pattern: - name: signing_key_sid - regex: signing[_-]?key[_-]?sid(=| =|:| :) - - - pattern: - name: slack_webhook_url - regex: (hooks.slack.com/services/T[A-Z0-9]{8}/B[A-Z0-9]{8}/[a-zA-Z0-9]{1,}) - - - pattern: - name: slash_developer_space - regex: slash[_-]?developer[_-]?space(=| =|:| :) - - - pattern: - name: slash_developer_space_key - regex: slash[_-]?developer[_-]?space[_-]?key(=| =|:| :) - - - pattern: - name: slate_user_email - regex: slate[_-]?user[_-]?email(=| =|:| :) - - - pattern: - name: snoowrap_client_secret - regex: snoowrap[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: snoowrap_password - regex: snoowrap[_-]?password(=| =|:| :) - - - pattern: - name: snoowrap_refresh_token - regex: snoowrap[_-]?refresh[_-]?token(=| =|:| :) - - - pattern: - name: snyk_api_token - regex: snyk[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: snyk_token - regex: snyk[_-]?token(=| =|:| :) - - - pattern: - name: socrata_app_token - regex: socrata[_-]?app[_-]?token(=| =|:| :) - - - pattern: - name: socrata_password - regex: socrata[_-]?password(=| =|:| :) - - - pattern: - name: sonar_organization_key - regex: sonar[_-]?organization[_-]?key(=| =|:| :) - - - pattern: - name: sonar_project_key - regex: sonar[_-]?project[_-]?key(=| =|:| :) - - - pattern: - name: sonar_token - regex: sonar[_-]?token(=| =|:| :) - - - pattern: - name: sonarqube_docs_api_key - regex: (sonar.{0,50}("|')?[0-9a-f]{40}("|')?) - - - pattern: - name: sonatype_gpg_key_name - regex: sonatype[_-]?gpg[_-]?key[_-]?name(=| =|:| :) - - - pattern: - name: sonatype_gpg_passphrase - regex: sonatype[_-]?gpg[_-]?passphrase(=| =|:| :) - - - pattern: - name: sonatype_nexus_password - regex: sonatype[_-]?nexus[_-]?password(=| =|:| :) - - - pattern: - name: sonatype_pass - regex: sonatype[_-]?pass(=| =|:| :) - - - pattern: - name: sonatype_password - regex: sonatype[_-]?password(=| =|:| :) - - - pattern: - name: sonatype_token_password - regex: sonatype[_-]?token[_-]?password(=| =|:| :) - - - pattern: - name: sonatype_token_user - regex: sonatype[_-]?token[_-]?user(=| =|:| :) - - - pattern: - name: sonatypepassword - regex: sonatypepassword(=| =|:| :) - - - pattern: - name: soundcloud_client_secret - regex: soundcloud[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: soundcloud_password - regex: soundcloud[_-]?password(=| =|:| :) - - - pattern: - name: spaces_access_key_id - regex: spaces[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: spaces_secret_access_key - regex: spaces[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: spotify_api_access_token - regex: spotify[_-]?api[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: spotify_api_client_secret - regex: spotify[_-]?api[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: spring_mail_password - regex: spring[_-]?mail[_-]?password(=| =|:| :) - - - pattern: - name: sqsaccesskey - regex: sqsaccesskey(=| =|:| :) - - - pattern: - name: sqssecretkey - regex: sqssecretkey(=| =|:| :) - - - pattern: - name: square_app_secret - regex: (sq0[a-z]{3}-[0-9A-Za-z-_]{20,50}) - - - pattern: - name: square_reader_sdk_repository_password - regex: square[_-]?reader[_-]?sdk[_-]?repository[_-]?password(=| =|:| :) - - - pattern: - name: srcclr_api_token - regex: srcclr[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: ssh_password - regex: (sshpass -p.*['|"]) - - - pattern: - name: sshpass - regex: sshpass(=| =|:| :) - - - pattern: - name: ssmtp_config - regex: ssmtp[_-]?config(=| =|:| :) - - - pattern: - name: staging_base_url_runscope - regex: staging[_-]?base[_-]?url[_-]?runscope(=| =|:| :) - - - pattern: - name: star_test_aws_access_key_id - regex: star[_-]?test[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: star_test_bucket - regex: star[_-]?test[_-]?bucket(=| =|:| :) - - - pattern: - name: star_test_location - regex: star[_-]?test[_-]?location(=| =|:| :) - - - pattern: - name: star_test_secret_access_key - regex: star[_-]?test[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: starship_account_sid - regex: starship[_-]?account[_-]?sid(=| =|:| :) - - - pattern: - name: starship_auth_token - regex: starship[_-]?auth[_-]?token(=| =|:| :) - - - pattern: - name: stormpath_api_key_id - regex: stormpath[_-]?api[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: stormpath_api_key_secret - regex: stormpath[_-]?api[_-]?key[_-]?secret(=| =|:| :) - - - pattern: - name: strip_publishable_key - regex: strip[_-]?publishable[_-]?key(=| =|:| :) - - - pattern: - name: strip_secret_key - regex: strip[_-]?secret[_-]?key(=| =|:| :) - - - pattern: - name: stripe_private - regex: stripe[_-]?private(=| =|:| :) - - - pattern: - name: stripe_public - regex: stripe[_-]?public(=| =|:| :) - - - pattern: - name: stripe_restricted_api - regex: (rk_live_[0-9a-zA-Z]{24,34}) - - - pattern: - name: stripe_standard_api - regex: (sk_live_[0-9a-zA-Z]{24,34}) - - - pattern: - name: surge_login - regex: surge[_-]?login(=| =|:| :) - - - pattern: - name: surge_token - regex: surge[_-]?token(=| =|:| :) - - - pattern: - name: svn_pass - regex: svn[_-]?pass(=| =|:| :) - - - pattern: - name: tesco_api_key - regex: tesco[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: test_github_token - regex: test[_-]?github[_-]?token(=| =|:| :) - - - pattern: - name: test_test - regex: test[_-]?test(=| =|:| :) - - - pattern: - name: tester_keys_password - regex: tester[_-]?keys[_-]?password(=| =|:| :) - - - pattern: - name: thera_oss_access_key - regex: thera[_-]?oss[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: token_core_java - regex: token[_-]?core[_-]?java(=| =|:| :) - - - pattern: - name: travis_access_token - regex: travis[_-]?access[_-]?token(=| =|:| :) - - - pattern: - name: travis_api_token - regex: travis[_-]?api[_-]?token(=| =|:| :) - - - pattern: - name: travis_branch - regex: travis[_-]?branch(=| =|:| :) - - - pattern: - name: travis_com_token - regex: travis[_-]?com[_-]?token(=| =|:| :) - - - pattern: - name: travis_e2e_token - regex: travis[_-]?e2e[_-]?token(=| =|:| :) - - - pattern: - name: travis_gh_token - regex: travis[_-]?gh[_-]?token(=| =|:| :) - - - pattern: - name: travis_pull_request - regex: travis[_-]?pull[_-]?request(=| =|:| :) - - - pattern: - name: travis_secure_env_vars - regex: travis[_-]?secure[_-]?env[_-]?vars(=| =|:| :) - - - pattern: - name: travis_token - regex: travis[_-]?token(=| =|:| :) - - - pattern: - name: trex_client_token - regex: trex[_-]?client[_-]?token(=| =|:| :) - - - pattern: - name: trex_okta_client_token - regex: trex[_-]?okta[_-]?client[_-]?token(=| =|:| :) - - - pattern: - name: twilio_api_key - regex: twilio[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: twilio_api_secret - regex: twilio[_-]?api[_-]?secret(=| =|:| :) - - - pattern: - name: twilio_chat_account_api_service - regex: twilio[_-]?chat[_-]?account[_-]?api[_-]?service(=| =|:| :) - - - pattern: - name: twilio_configuration_sid - regex: twilio[_-]?configuration[_-]?sid(=| =|:| :) - - - pattern: - name: twilio_sid - regex: twilio[_-]?sid(=| =|:| :) - - - pattern: - name: twilio_token - regex: twilio[_-]?token(=| =|:| :) - - - pattern: - name: twine_password - regex: twine[_-]?password(=| =|:| :) - - - pattern: - name: twitter_consumer_key - regex: twitter[_-]?consumer[_-]?key(=| =|:| :) - - - pattern: - name: twitter_consumer_secret - regex: twitter[_-]?consumer[_-]?secret(=| =|:| :) - - - pattern: - name: twitteroauthaccesssecret - regex: twitteroauthaccesssecret(=| =|:| :) - - - pattern: - name: twitteroauthaccesstoken - regex: twitteroauthaccesstoken(=| =|:| :) - - - pattern: - name: unity_password - regex: unity[_-]?password(=| =|:| :) - - - pattern: - name: unity_serial - regex: unity[_-]?serial(=| =|:| :) - - - pattern: - name: urban_key - regex: urban[_-]?key(=| =|:| :) - - - pattern: - name: urban_master_secret - regex: urban[_-]?master[_-]?secret(=| =|:| :) - - - pattern: - name: urban_secret - regex: urban[_-]?secret(=| =|:| :) - - - pattern: - name: us_east_1_elb_amazonaws_com - regex: us[_-]?east[_-]?1[_-]?elb[_-]?amazonaws[_-]?com(=| =|:| :) - - - pattern: - name: use_ssh - regex: use[_-]?ssh(=| =|:| :) - - - pattern: - name: user_assets_access_key_id - regex: user[_-]?assets[_-]?access[_-]?key[_-]?id(=| =|:| :) - - - pattern: - name: user_assets_secret_access_key - regex: user[_-]?assets[_-]?secret[_-]?access[_-]?key(=| =|:| :) - - - pattern: - name: usertravis - regex: usertravis(=| =|:| :) - - - pattern: - name: v_sfdc_client_secret - regex: v[_-]?sfdc[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: v_sfdc_password - regex: v[_-]?sfdc[_-]?password(=| =|:| :) - - - pattern: - name: vip_github_build_repo_deploy_key - regex: vip[_-]?github[_-]?build[_-]?repo[_-]?deploy[_-]?key(=| =|:| :) - - - pattern: - name: vip_github_deploy_key - regex: vip[_-]?github[_-]?deploy[_-]?key(=| =|:| :) - - - pattern: - name: vip_github_deploy_key_pass - regex: vip[_-]?github[_-]?deploy[_-]?key[_-]?pass(=| =|:| :) - - - pattern: - name: virustotal_apikey - regex: virustotal[_-]?apikey(=| =|:| :) - - - pattern: - name: visual_recognition_api_key - regex: visual[_-]?recognition[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: vscetoken - regex: vscetoken(=| =|:| :) - - - pattern: - name: wakatime_api_key - regex: wakatime[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: watson_conversation_password - regex: watson[_-]?conversation[_-]?password(=| =|:| :) - - - pattern: - name: watson_device_password - regex: watson[_-]?device[_-]?password(=| =|:| :) - - - pattern: - name: watson_password - regex: watson[_-]?password(=| =|:| :) - - - pattern: - name: widget_basic_password - regex: widget[_-]?basic[_-]?password(=| =|:| :) - - - pattern: - name: widget_basic_password_2 - regex: widget[_-]?basic[_-]?password[_-]?2(=| =|:| :) - - - pattern: - name: widget_basic_password_3 - regex: widget[_-]?basic[_-]?password[_-]?3(=| =|:| :) - - - pattern: - name: widget_basic_password_4 - regex: widget[_-]?basic[_-]?password[_-]?4(=| =|:| :) - - - pattern: - name: widget_basic_password_5 - regex: widget[_-]?basic[_-]?password[_-]?5(=| =|:| :) - - - pattern: - name: widget_fb_password - regex: widget[_-]?fb[_-]?password(=| =|:| :) - - - pattern: - name: widget_fb_password_2 - regex: widget[_-]?fb[_-]?password[_-]?2(=| =|:| :) - - - pattern: - name: widget_fb_password_3 - regex: widget[_-]?fb[_-]?password[_-]?3(=| =|:| :) - - - pattern: - name: widget_test_server - regex: widget[_-]?test[_-]?server(=| =|:| :) - - - pattern: - name: wincert_password - regex: wincert[_-]?password(=| =|:| :) - - - pattern: - name: wordpress_db_password - regex: wordpress[_-]?db[_-]?password(=| =|:| :) - - - pattern: - name: wordpress_db_user - regex: wordpress[_-]?db[_-]?user(=| =|:| :) - - - pattern: - name: wpjm_phpunit_google_geocode_api_key - regex: wpjm[_-]?phpunit[_-]?google[_-]?geocode[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: wporg_password - regex: wporg[_-]?password(=| =|:| :) - - - pattern: - name: wpt_db_password - regex: wpt[_-]?db[_-]?password(=| =|:| :) - - - pattern: - name: wpt_db_user - regex: wpt[_-]?db[_-]?user(=| =|:| :) - - - pattern: - name: wpt_prepare_dir - regex: wpt[_-]?prepare[_-]?dir(=| =|:| :) - - - pattern: - name: wpt_report_api_key - regex: wpt[_-]?report[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: wpt_ssh_connect - regex: wpt[_-]?ssh[_-]?connect(=| =|:| :) - - - pattern: - name: wpt_ssh_private_key_base64 - regex: wpt[_-]?ssh[_-]?private[_-]?key[_-]?base64(=| =|:| :) - - - pattern: - name: www_googleapis_com - regex: www[_-]?googleapis[_-]?com(=| =|:| :) - - - pattern: - name: yangshun_gh_password - regex: yangshun[_-]?gh[_-]?password(=| =|:| :) - - - pattern: - name: yangshun_gh_token - regex: yangshun[_-]?gh[_-]?token(=| =|:| :) - - - pattern: - name: yt_account_client_secret - regex: yt[_-]?account[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: yt_account_refresh_token - regex: yt[_-]?account[_-]?refresh[_-]?token(=| =|:| :) - - - pattern: - name: yt_api_key - regex: yt[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: yt_client_secret - regex: yt[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: yt_partner_client_secret - regex: yt[_-]?partner[_-]?client[_-]?secret(=| =|:| :) - - - pattern: - name: yt_partner_refresh_token - regex: yt[_-]?partner[_-]?refresh[_-]?token(=| =|:| :) - - - pattern: - name: yt_server_api_key - regex: yt[_-]?server[_-]?api[_-]?key(=| =|:| :) - - - pattern: - name: zendesk_travis_github - regex: zendesk[_-]?travis[_-]?github(=| =|:| :) - - - pattern: - name: zensonatypepassword - regex: zensonatypepassword(=| =|:| :) - - - pattern: - name: zhuliang_gh_token - regex: zhuliang[_-]?gh[_-]?token(=| =|:| :) - - - pattern: - name: zopim_account_key - regex: zopim[_-]?account[_-]?key(=| =|:| :) - - - pattern: - name: times - regex: \d{1,2}:\d{2} ?(?:[ap]\.?m\.?)?|\d[ap]\.?m\.? - confidence: high - - pattern: - name: phones - regex: ((?:(?\\s*?[\\S\\s]*?[\\S\\s]*?<\\/pwentry>\\s*?<\\/pwlist>" - confidence: high - - pattern: - name: Large number of US Phone Numbers - regex: "\\d{3}-\\d{3}-\\d{4}|\\(\\d{3}\\)\\ ?\\d{3}-?\\d{4}" - confidence: high - - pattern: - name: Large number of US Zip Codes - regex: "^(\\d{5}-\\d{4}|\\d{5})$" - confidence: high - - pattern: - name: Lightweight Directory Access Protocol - regex: "(?:dn|cn|dc|sn):\\s*[a-zA-Z0-9=, ]*" - confidence: high - - pattern: - name: Metasploit Module - regex: "require\\ 'msf/core'|class\\ Metasploit|include\\ Msf::Exploit::\\w+::\\w+" - confidence: high - - pattern: - name: MySQL database dump - regex: "DROP DATABASE IF EXISTS(?:.|\\n){5,300}CREATE DATABASE(?:.|\\n){5,300}DROP TABLE IF EXISTS(?:.|\\n){5,300}CREATE TABLE" - confidence: high - - pattern: - name: MySQLite database dump - regex: "DROP\\ TABLE\\ IF\\ EXISTS\\ \\[[a-zA-Z]*\\];|CREATE\\ TABLE\\ \\[[a-zA-Z]*\\];" - confidence: high - - pattern: - name: Network Proxy Auto-Config - regex: "proxy\\.pac|function\\ FindProxyForURL\\(\\w+,\\ \\w+\\)" - confidence: high - - pattern: - name: Nmap Scan Report - regex: "Nmap\\ scan\\ report\\ for\\ [a-zA-Z0-9.]+" - confidence: high - - pattern: - name: PGP Header - regex: "-{5}(?:BEGIN|END)\\ PGP\\ MESSAGE-{5}" - confidence: high - - pattern: - name: PGP Private Key Block - regex: "-----BEGIN PGP PRIVATE KEY BLOCK-----(?:.|\\s)+?-----END PGP PRIVATE KEY BLOCK-----" - confidence: high - - pattern: - name: PKCS7 Encrypted Data - regex: "(?:Signer|Recipient)Info(?:s)?\\ ::=\\ \\w+|[D|d]igest(?:Encryption)?Algorithm|EncryptedKey\\ ::= \\w+" - confidence: high - - pattern: - name: Password etc passwd - regex: "[a-zA-Z0-9\\-]+:[x|\\*]:\\d+:\\d+:[a-zA-Z0-9/\\- \"]*:/[a-zA-Z0-9/\\-]*:/[a-zA-Z0-9/\\-]+" - confidence: high - - pattern: - name: Password etc shadow - regex: "[a-zA-Z0-9\\-]+:(?:(?:!!?)|(?:\\*LOCK\\*?)|\\*|(?:\\*LCK\\*?)|(?:\\$.*\\$.*\\$.*?)?):\\d*:\\d*:\\d*:\\d*:\\d*:\\d*:" - confidence: high - - pattern: - name: PlainText Private Key - regex: "-----BEGIN PRIVATE KEY-----(?:.|\\s)+?-----END PRIVATE KEY-----" - confidence: high - - pattern: - name: PuTTY SSH DSA Key - regex: "PuTTY-User-Key-File-2: ssh-dss\\s*Encryption: none(?:.|\\s?)*?Private-MAC:" - confidence: high - - pattern: - name: PuTTY SSH RSA Key - regex: "PuTTY-User-Key-File-2: ssh-rsa\\s*Encryption: none(?:.|\\s?)*?Private-MAC:" - confidence: high - - pattern: - name: Public Key Cryptography System (PKCS) - regex: "protocol=\"application/x-pkcs[0-9]{0,2}-signature\"" - confidence: high - - pattern: - name: Public encrypted key - regex: "-----BEGIN PUBLIC KEY-----(?:.|\\s)+?-----END PUBLIC KEY-----" - confidence: high - - pattern: - name: RSA Private Key - regex: "-----BEGIN RSA PRIVATE KEY-----(?:[a-zA-Z0-9\\+\\=\\/\"']|\\s)+?-----END RSA PRIVATE KEY-----" - confidence: high - - pattern: - name: SSL Certificate - regex: "-----BEGIN CERTIFICATE-----(?:.|\\n)+?\\s-----END CERTIFICATE-----" - confidence: high - - pattern: - name: SWIFT Codes - regex: "[A-Za-z]{4}(?:GB|US|DE|RU|CA|JP|CN)[0-9a-zA-Z]{2,5}$" - confidence: high - - pattern: - name: Samba Password config file - regex: "[a-z]*:\\d{3}:[0-9a-zA-Z]*:[0-9a-zA-Z]*:\\[U\\ \\]:.*" - confidence: high - - pattern: - name: Slack 2FA Backup Codes - regex: "Two-Factor\\s*\\S*Authentication\\s*\\S*Backup\\s*\\S*Codes(?:.|\\n)*[Ss]lack(?:.|\\n)*\\d{9}" - confidence: high - - pattern: - name: UK Drivers License Numbers - regex: "[A-Z]{5}\\d{6}[A-Z]{2}\\d{1}[A-Z]{2}" - confidence: high - - pattern: - name: UK Passport Number - regex: "\\d{10}GB[RP]\\d{7}[UMF]{1}\\d{9}" - confidence: high - - pattern: - name: USBank Routing Numbers - California - regex: "^12(?:1122676|2235821)$" - confidence: high - - pattern: - name: United Bank Routing Number - California - regex: "^122243350$" - confidence: high - - pattern: - name: Wells Fargo Routing Numbers - California - regex: "^121042882$" - confidence: high - - pattern: - name: aws_access_key - regex: "((access[-_]?key[-_]?id)|(ACCESS[-_]?KEY[-_]?ID)|([Aa]ccessKeyId)|(access[_-]?id)).{0,20}AKIA[a-zA-Z0-9+/]{16}[^a-zA-Z0-9+/]" - confidence: high - - pattern: - name: aws_credentials_context - regex: "access_key_id|secret_access_key|AssetSync.configure" - confidence: high - - pattern: - name: aws_secret_key - regex: "((secret[-_]?access[-_]?key)|(SECRET[-_]?ACCESS[-_]?KEY|(private[-_]?key))|([Ss]ecretAccessKey)).{0,20}[^a-zA-Z0-9+/][a-zA-Z0-9+/]{40}\\b" - confidence: high - - pattern: - name: facebook_secret - regex: "(facebook_secret|FACEBOOK_SECRET|facebook_app_secret|FACEBOOK_APP_SECRET)[a-z_ =\\s\"'\\:]{0,5}[^a-zA-Z0-9][a-f0-9]{32}[^a-zA-Z0-9]" - confidence: high - - pattern: - name: github_key - regex: "(GITHUB_SECRET|GITHUB_KEY|github_secret|github_key|github_token|GITHUB_TOKEN|github_api_key|GITHUB_API_KEY)[a-z_ =\\s\"'\\:]{0,10}[^a-zA-Z0-9][a-zA-Z0-9]{40}[^a-zA-Z0-9]" - confidence: high - - pattern: - name: google_two_factor_backup - regex: "(?:BACKUP VERIFICATION CODES|SAVE YOUR BACKUP CODES)[\\s\\S]{0,300}@" - confidence: high - - pattern: - name: heroku_key - regex: "(heroku_api_key|HEROKU_API_KEY|heroku_secret|HEROKU_SECRET)[a-z_ =\\s\"'\\:]{0,10}[^a-zA-Z0-9-]\\w{8}(?:-\\w{4}){3}-\\w{12}[^a-zA-Z0-9\\-]" - confidence: high - - pattern: - name: microsoft_office_365_oauth_context - regex: "https://login.microsoftonline.com/common/oauth2/v2.0/token|https://login.windows.net/common/oauth2/token" - confidence: high - - pattern: - name: pgSQL Connection Information - regex: "(?:postgres|pgsql)\\:\\/\\/" - confidence: high - - pattern: - name: slack_api_key - regex: "(slack_api_key|SLACK_API_KEY|slack_key|SLACK_KEY)[a-z_ =\\s\"'\\:]{0,10}[^a-f0-9][a-f0-9]{32}[^a-f0-9]" - confidence: high - - pattern: - name: slack_api_token - regex: "(xox[pb](?:-[a-zA-Z0-9]+){4,})" - confidence: high - - pattern: - name: ssh_dss_public - regex: "ssh-dss [0-9A-Za-z+/]+[=]{2}" - confidence: high - - pattern: - name: ssh_rsa_public - regex: "ssh-rsa AAAA[0-9A-Za-z+/]+[=]{0,3} [^@]+@[^@]+" - confidence: high - - pattern: - name: IBAN - regex: '[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}' - confidence: high - - pattern: - name: GPS Data - regex: '^([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(\s*)(([-+]?)([\d]{1,3})((\.)(\d+))?)' - confidence: high - - pattern: - name: Blood Type - regex: '^(A|B|AB|O)[-+]$' - confidence: high - - pattern: - name: Date of Birth - 2 - regex: '^([1-9]|[12][0-9]|3[01])(\/?\.\-?\-?\s?)(0[1-9]|1[12])(\/?\.?\-?\s?)(19[0-9][0-9]|20[0][0-9]|20[1][0-8])$' - confidence: high - - pattern: - name: Tax Number - regex: '^[0-9]{10}$' - confidence: high - - pattern: - name: Bitcoin Address - regex: '^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$' - confidence: high \ No newline at end of file diff --git a/packages/core/src/snapshot.js b/packages/core/src/snapshot.js index b93be4ddb..c01948b82 100644 --- a/packages/core/src/snapshot.js +++ b/packages/core/src/snapshot.js @@ -1,4 +1,5 @@ import logger from '@percy/logger'; +import { evictSnapshot, snapshotKey } from '@percy/logger/internal'; import PercyConfig from '@percy/config'; import micromatch from 'micromatch'; import { configSchema } from './config.js'; @@ -423,9 +424,12 @@ export function createSnapshotsQueue(percy) { .handle('push', (snapshot, existing) => { let { name, meta } = snapshot; - // log immediately when not deferred or dry-running - if (!percy.deferUploads) percy.log.info(`Snapshot taken: ${snapshotLogName(name, meta)}`, meta); - if (percy.dryRun) percy.log.info(`Snapshot found: ${snapshotLogName(name, meta)}`, meta); + if (!percy.deferUploads) { + percy.log.info(`Snapshot taken: ${snapshotLogName(name, meta)}`, meta); + } + if (percy.dryRun) { + percy.log.info(`Snapshot found: ${snapshotLogName(name, meta)}`, meta); + } // immediately flush when uploads are delayed but not skipped if (percy.delayUploads && !percy.deferUploads) queue.flush(); @@ -437,37 +441,50 @@ export function createSnapshotsQueue(percy) { // send snapshots to be uploaded to the build .handle('task', async function*({ resources, ...snapshot }) { let { name, meta } = snapshot; + // Captured up-front so the finally block runs regardless of branch. + const evictKey = snapshotKey(snapshot?.meta); - if (percy.client.screenshotFlow === 'automate' && percy.client.buildType !== 'automate') { - throw new Error(`Cannot run automate screenshots in ${percy.client.buildType} project. Please use automate project token`); - } else if (percy.client.screenshotFlow === 'app' && percy.client.buildType !== 'app') { - throw new Error(`Cannot run App Percy screenshots in ${percy.client.buildType} project. Please use App Percy project token`); - } - // yield to evaluated snapshot resources - snapshot.resources = typeof resources === 'function' - ? yield* yieldTo(resources()) - : resources; - - // upload the snapshot and log when deferred - let send = 'tag' in snapshot ? 'sendComparison' : 'sendSnapshot'; - let response = yield percy.client[send](build.id, snapshot); - if (percy.deferUploads) percy.log.info(`Snapshot uploaded: ${name}`, meta); - - // Pushing to syncQueue, that will check for - // snapshot processing status, and will resolve once done - if (snapshot.sync) { - percy.log.info(`Waiting for snapshot '${name}' to be completed`, meta); - const data = new JobData(response.data.id, null, snapshot.resolve, snapshot.reject); - percy.syncQueue.push(data); - } + try { + if (percy.client.screenshotFlow === 'automate' && percy.client.buildType !== 'automate') { + throw new Error(`Cannot run automate screenshots in ${percy.client.buildType} project. Please use automate project token`); + } else if (percy.client.screenshotFlow === 'app' && percy.client.buildType !== 'app') { + throw new Error(`Cannot run App Percy screenshots in ${percy.client.buildType} project. Please use App Percy project token`); + } + // yield to evaluated snapshot resources + snapshot.resources = typeof resources === 'function' + ? yield* yieldTo(resources()) + : resources; + + // upload the snapshot and log when deferred + let send = 'tag' in snapshot ? 'sendComparison' : 'sendSnapshot'; + let response = yield percy.client[send](build.id, snapshot); + if (percy.deferUploads) { + percy.log.info(`Snapshot uploaded: ${name}`, meta); + } + + // Pushing to syncQueue, that will check for + // snapshot processing status, and will resolve once done + if (snapshot.sync) { + percy.log.info(`Waiting for snapshot '${name}' to be completed`, meta); + const data = new JobData(response.data.id, null, snapshot.resolve, snapshot.reject); + percy.syncQueue.push(data); + } - return { ...snapshot, response }; + return { ...snapshot, response }; + } finally { + // Evict the bucket after POST so memory is bounded by in-flight + // concurrency rather than total build size. Idempotent with the + // 'error' handler's call below. + evictSnapshot(evictKey); + } }) // handle possible build errors returned by the API .handle('error', async (snapshot, error) => { let result = { ...snapshot, error }; let { name, meta } = snapshot; + evictSnapshot(snapshotKey(snapshot?.meta)); + if (error.name === 'QueueClosedError') return result; if (error.name === 'AbortError') return result; diff --git a/packages/core/src/utils.js b/packages/core/src/utils.js index f5d5f5595..e8b14d39b 100644 --- a/packages/core/src/utils.js +++ b/packages/core/src/utils.js @@ -1,13 +1,12 @@ import EventEmitter from 'events'; import { sha256hash, request } from '@percy/client/utils'; import { camelcase, merge } from '@percy/config/utils'; -import YAML from 'yaml'; -import path from 'path'; -import url from 'url'; -import { readFileSync } from 'fs'; import logger from '@percy/logger'; import DetectProxy from '@percy/client/detect-proxy'; +// Redaction lives in @percy/logger/redact — re-exported here for back-compat. +export { redactSecrets } from '@percy/logger/redact'; + export { request, getPackageJSON, @@ -549,25 +548,6 @@ export async function withRetries(fn, { count, onRetry, signal, throwOn }) { } } -export function redactSecrets(data) { - const filepath = path.resolve(url.fileURLToPath(import.meta.url), '../secretPatterns.yml'); - const secretPatterns = YAML.parse(readFileSync(filepath, 'utf-8')); - - if (Array.isArray(data)) { - // Process each item in the array - return data.map(item => redactSecrets(item)); - } else if (typeof data === 'object' && data !== null) { - // Process each key-value pair in the object - data.message = redactSecrets(data.message); - } - if (typeof data === 'string') { - for (const pattern of secretPatterns.patterns) { - data = data.replace(new RegExp(pattern.pattern.regex, 'g'), '[REDACTED]'); - } - } - return data; -} - // Returns a base64 encoding of a string or buffer. export function base64encode(content) { return Buffer diff --git a/packages/core/test/api.test.js b/packages/core/test/api.test.js index e0a5731fd..13833a9d6 100644 --- a/packages/core/test/api.test.js +++ b/packages/core/test/api.test.js @@ -667,7 +667,11 @@ describe('API Server', () => { beforeEach(async () => { process.env.PERCY_TOKEN = 'TEST_TOKEN'; percy = await Percy.start({ testing: true }); - logger.instance.messages.clear(); + // PER-7809: messages.clear() replaced by the sync clearMemory(). + // Discards any log entries that accumulated during Percy.start() + // without touching the on-disk writer (which Percy needs open for + // the duration of the test). + logger.instance.clearMemory(); }); afterEach(() => { diff --git a/packages/core/test/percy.test.js b/packages/core/test/percy.test.js index 7c5e0ac55..b1039be19 100644 --- a/packages/core/test/percy.test.js +++ b/packages/core/test/percy.test.js @@ -1179,21 +1179,25 @@ describe('Percy', () => { percy.log.info('cli_test'); percy.log.info('ci_test', {}, true); - const logsObject = { - clilogs: Array.from(logger.instance.messages) - }; - const content = base64encode(Pako.gzip(JSON.stringify(logsObject))); + // PER-7809: sendBuildLogs now streams entries via logger.readBack() + // from the on-disk JSONL. We can't reproduce byte-for-byte here + // without replicating the same iteration, but the contract we care + // about is: the POST is made, the entries that went in appear in + // the (decoded) body, and only CLI logs (not CI) are included when + // PERCY_CLIENT_ERROR_LOGS=false. await expectAsync(percy.sendBuildLogs()).toBeResolved(); expect(api.requests['/logs']).toBeDefined(); expect(api.requests['/logs'][0].method).toBe('POST'); - expect(api.requests['/logs'][0].body).toEqual({ - data: { - content: content, - service_name: 'cli', - base64encoded: true - } - }); + const body = api.requests['/logs'][0].body; + expect(body.data.service_name).toBe('cli'); + expect(body.data.base64encoded).toBe(true); + expect(typeof body.data.content).toBe('string'); + // Decode + decompress to validate contents. + const raw = Pako.ungzip(Buffer.from(body.data.content, 'base64'), { to: 'string' }); + const decoded = JSON.parse(raw); + expect(decoded.cilogs).toBeUndefined(); + expect(decoded.clilogs.some(e => e.message === 'cli_test')).toBeTrue(); expect(logger.stdout).toEqual(jasmine.arrayContaining([ "[percy] Build's CLI logs sent successfully. Please share this log ID with Percy team in case of any issues - random_sha" ])); diff --git a/packages/logger/README.md b/packages/logger/README.md index cb769c8fc..8b85b3e3b 100644 --- a/packages/logger/README.md +++ b/packages/logger/README.md @@ -6,7 +6,11 @@ Common logger used throughout the Percy CLI and SDKs. - [`logger()`](#loggerdebug) - [`logger.loglevel()`](#loggerloglevel) - [`logger.format()`](#loggerformat) - - [`logger.query()`](#loggerquery) + - [`logger.query()`](#loggerqueryfilter) + - [`logger.reset()`](#loggerreset) + - [`logger.toArray()`](#loggertoarray) +- [Storage model](#storage-model) +- [Environment variables](#environment-variables) ## Usage @@ -61,7 +65,7 @@ logger.loglevel('info', { quiet: true }) logger.loglevel() === 'warn' logger.loglevel('info', { silent: true }) -logget.loglevel() === 'silent' +logger.loglevel() === 'silent' logger.loglevel('info') logger.loglevel() === 'info' @@ -77,13 +81,16 @@ logger.format('foobar', 'test') //=> [percy] foobar logger.loglevel('debug') -logger.format('foobar', 'test', warn') +logger.format('foobar', 'test', 'warn') //=> [percy:test] foobar (yellow for warnings) ``` ### `logger.query(filter)` -Returns an array of logs matching the provided filter function. +Returns an array of recent in-memory logs matching the provided filter function. Searches the global +ring buffer and every live per-snapshot bucket. Log entries that have been evicted (after their +snapshot's upload completes) are **not** returned — use `logger.readBack()` via the internal +subexport if you need the full disk-backed enumeration. ``` js let logs = logger.query(log => { @@ -91,3 +98,47 @@ let logs = logger.query(log => { log.message.match(/foobar/) }) ``` + +### `logger.reset()` + +Asynchronously clears every in-memory entry, closes the disk writer, and removes the spill +directory. Used by test helpers and by the Percy test-mode `/test/api/reset` endpoint. + +``` js +await logger.reset() +``` + +### `logger.toArray()` + +Returns every currently-in-memory entry as a plain `Array`, equivalent to `logger.query(() => true)`. +Replaces the former `Array.from(logger.instance.messages)` pattern. + +## Storage model + +As of 1.31.12 (PER-7809), the logger maintains a bounded in-memory cache backed by an append-only +JSONL file on the OS tmp directory. The storage model is: + +- Every log entry is **written to disk** (append-only JSONL). Disk is the source of truth for + `sendBuildLogs` at end-of-build. +- An **in-memory global ring** holds the most recent non-snapshot-tagged entries for fast + `query()` access by callers during a build. +- **Per-snapshot hot buckets** hold entries tagged with `meta.snapshot.{name, testCase}` while the + snapshot is in flight. Buckets are evicted by `@percy/core` after the snapshot's upload POST + completes, so memory usage is bounded by `concurrency × per-snapshot log volume` regardless of + total build size or `deferUploads` window depth. +- Every entry's string values are **redacted at write-time** against the secret-patterns set + (previously applied only at upload-time in `@percy/core/utils.redactSecrets`). +- On **disk unavailable / EACCES / ENOSPC**, the store transitions to an in-memory fallback mode + that retains all entries until `sendBuildLogs` or process exit. Previously flushed disk entries + are still read back. +- The spill directory is deleted on normal shutdown via `process.on('exit' | 'SIGINT' | 'SIGTERM')` + handlers. Abandoned directories older than 24 h are swept at the next logger init. + +## Environment variables + +| Variable | Default | Behavior | +|---|---|---| +| `PERCY_LOG_RING_SIZE` | `2000` | Max entries in the in-memory global ring buffer. Overflowing entries are evicted from memory only; disk retains them. | +| `PERCY_LOGS_IN_MEMORY` | unset | If set to `1`, disables disk spill entirely. All entries remain in the ring / buckets for the process lifetime. Use as a rollback switch if a disk environment is misbehaving. | +| `PERCY_DEBUG` | unset | Namespace filter for debug-level logging (existing behavior). | +| `PERCY_LOGLEVEL` | `info` | Initial log level (existing behavior). | diff --git a/packages/logger/package.json b/packages/logger/package.json index 04c8d5445..7be02a17a 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -12,7 +12,7 @@ "tag": "latest" }, "engines": { - "node": ">=14" + "node": ">=14.14.0" }, "files": [ "dist", @@ -22,6 +22,9 @@ "type": "module", "exports": { ".": "./dist/index.js", + "./internal": "./dist/internal.js", + "./redact": "./dist/redact.js", + "./hybrid-log-store": "./dist/hybrid-log-store.js", "./utils": "./dist/utils.js", "./test/helpers": "./test/helpers.js", "./test/client": "./test/client.js" diff --git a/packages/logger/src/hybrid-log-store.js b/packages/logger/src/hybrid-log-store.js new file mode 100644 index 000000000..bf81cf40b --- /dev/null +++ b/packages/logger/src/hybrid-log-store.js @@ -0,0 +1,425 @@ +import { + promises as fsp, createWriteStream, createReadStream, + mkdtempSync, chmodSync, writeFileSync, unlinkSync, rmSync +} from 'fs'; +import { createInterface } from 'readline'; +import os from 'os'; +import path from 'path'; + +import { redactString } from './redact.js'; + +export const DIR_PREFIX = 'percy-logs-'; +const DEFAULT_RING_SIZE = Number(process.env.PERCY_LOG_RING_SIZE) || 2000; +const MAX_STREAM_BUFFER = 1 * 1024 * 1024; +const CLOSE_TIMEOUT_MS = 2000; +const ORPHAN_TTL_MS = 24 * 60 * 60 * 1000; +const IS_WINDOWS = process.platform === 'win32'; + +// Process-wide registry so exit handlers register once regardless of how many +// stores the process creates. Without this, Node hits MaxListeners=10 after +// about 4 test lifecycles. +const activeStores = new Set(); +let processHandlersRegistered = false; +function ensureProcessHandlers() { + if (processHandlersRegistered) return; + processHandlersRegistered = true; + const syncAll = () => { for (const store of activeStores) store._syncCleanup(); }; + process.on('exit', syncAll); + const signalExit = () => { syncAll(); process.exit(130); }; + process.once('SIGINT', signalExit); + process.once('SIGTERM', signalExit); +} + +function safeReplacer() { + const seen = new WeakSet(); + return function(_key, value) { + if (typeof value === 'string') return redactString(value); + if (value === null || typeof value !== 'object') { + if (typeof value === 'bigint') return value.toString(); + if (typeof value === 'function' || typeof value === 'symbol') return undefined; + return value; + } + if (seen.has(value)) return '[Circular]'; + seen.add(value); + if (value instanceof Error) { + return { name: value.name, message: value.message, stack: value.stack }; + } + // Buffer.toJSON() fires before the replacer, yielding { type, data: [...] } + if (value && value.type === 'Buffer' && Array.isArray(value.data)) { + return { type: 'Buffer', base64: Buffer.from(value.data).toString('base64') }; + } + if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { + return { type: 'Buffer', base64: value.toString('base64') }; + } + return value; + }; +} + +export function safeStringify(obj) { + try { + return JSON.stringify(obj, safeReplacer()); + } catch (_) { + /* istanbul ignore next */ + return JSON.stringify({ + _unstringifiable: true, + typeName: Object.prototype.toString.call(obj) + }); + } +} + +// Round-trip so in-memory caches hold redacted, serializable clones. +export function sanitizeMeta(meta) { + if (meta == null || typeof meta !== 'object') return meta; + try { return JSON.parse(safeStringify(meta)); } catch (_) { + /* istanbul ignore next */ + return {}; + } +} + +export class HybridLogStore { + #ring; + #ringCap; + #ringHead = 0; + #ringSize = 0; + #buckets = new Map(); + + #writer = null; + #spillDir = null; + #spillFilePath = null; + #needsDrain = false; + #lastDiskTimestamp = 0; + + #inMemoryOnly; + #forcedInMemory; + + lastFallbackError = null; + + constructor({ ringCap = DEFAULT_RING_SIZE, forceInMemory = false } = {}) { + this.#ringCap = ringCap; + this.#forcedInMemory = forceInMemory; + this.#inMemoryOnly = forceInMemory; + this.#ring = new Array(ringCap); + if (!forceInMemory) this.#initDisk(); + activeStores.add(this); + ensureProcessHandlers(); + } + + // Memory before disk: an entry is guaranteed visible via query() even if + // the async write fails. Redaction also happens here so in-memory copies + // match disk contents. + push(entry) { + const sanitized = sanitizeMeta(entry) || entry; + this.#routeInMemory(sanitized); + this.#writeDisk(sanitized); + } + + query(filter) { + const results = []; + for (let i = 0; i < this.#ringSize; i++) { + const idx = (this.#ringHead - this.#ringSize + i + this.#ringCap) % this.#ringCap; + const e = this.#ring[idx]; + if (filter(e)) results.push(e); + } + return results; + } + + evictSnapshot(key) { + if (key != null) this.#buckets.delete(key); + } + + // Sync discard. Leaves the disk writer and spill directory untouched so + // callers (e.g. the /test/api/reset endpoint) can keep logging without + // reopening the stream. + clearMemory() { + this.#ring = new Array(this.#ringCap); + this.#ringHead = 0; + this.#ringSize = 0; + this.#buckets.clear(); + } + + // Disk first, then in-memory fallback for entries newer than the last disk + // record — covers systemd-tmpfiles unlinking the spill file while the + // writer fd is still open. + async *readBack() { + let lastTs = 0; + let diskYielded = false; + let diskFailed = false; + // Pre-flight the path. On Linux, createReadStream on a missing path + // emits 'error' asynchronously which can leave the readline iterator + // hanging; checking up-front avoids that state entirely. + let spillAccessible = false; + if (this.#spillFilePath) { + try { + await fsp.access(this.#spillFilePath); + spillAccessible = true; + } catch (_) { + diskFailed = true; + } + } + if (spillAccessible) { + try { + const stream = createReadStream(this.#spillFilePath); + const rl = createInterface({ input: stream, crlfDelay: Infinity }); + for await (const line of rl) { + if (!line) continue; + try { + const entry = JSON.parse(line); + if (typeof entry.timestamp === 'number' && entry.timestamp > lastTs) { + lastTs = entry.timestamp; + } + diskYielded = true; + yield entry; + } catch (_) { /* crash-truncated tail */ } + } + } catch (_) { + diskFailed = true; + } + } + const shouldYieldMemory = this.#inMemoryOnly || !this.#spillFilePath || + diskFailed || !diskYielded; + if (shouldYieldMemory) { + for (const e of this.query(() => true)) { + if (typeof e.timestamp !== 'number' || e.timestamp > lastTs) yield e; + } + } + } + + async reset() { + this.clearMemory(); + this.#needsDrain = false; + this.#lastDiskTimestamp = 0; + + await this.#closeWriter(); + await this.#cleanupSpillDir(); + this.#spillDir = null; + this.#spillFilePath = null; + + if (!this.#forcedInMemory) { + this.#inMemoryOnly = false; + this.lastFallbackError = null; + this.#initDisk(); + } + } + + // Terminal teardown for tests that are about to discard the singleton. + async dispose() { + this.clearMemory(); + this.#needsDrain = false; + this.#lastDiskTimestamp = 0; + + await this.#closeWriter(); + await this.#cleanupSpillDir(); + this.#spillDir = null; + this.#spillFilePath = null; + this.#inMemoryOnly = true; + activeStores.delete(this); + } + + get inMemoryOnly() { return this.#inMemoryOnly; } + get spillDir() { return this.#spillDir; } + + #routeInMemory(entry) { + this.#ring[this.#ringHead] = entry; + this.#ringHead = (this.#ringHead + 1) % this.#ringCap; + if (this.#ringSize < this.#ringCap) this.#ringSize++; + + const key = snapshotKey(entry.meta); + if (key) { + let bucket = this.#buckets.get(key); + if (!bucket) { bucket = []; this.#buckets.set(key, bucket); } + bucket.push(entry); + } + } + + #initDisk() { + try { + const tmp = os.tmpdir(); + if (isUnsafeWindowsTmpdir(tmp)) { + throw Object.assign( + new Error('tmpdir not user-scoped on Windows; refusing to spill'), + { code: 'PERCY_UNSAFE_TMPDIR' } + ); + } + + // mkdtempSync is atomic and collision-free — prevents symlink squat. + const dir = mkdtempSync(path.join(tmp, DIR_PREFIX)); + if (!IS_WINDOWS) { try { chmodSync(dir, 0o700); } catch (_) {} } + + const probe = path.join(dir, '.probe'); + writeFileSync(probe, ''); + unlinkSync(probe); + writeFileSync(path.join(dir, 'pid'), String(process.pid)); + + this.#spillDir = dir; + this.#spillFilePath = path.join(dir, 'build.log.jsonl'); + this.#writer = createWriteStream(this.#spillFilePath, { flags: 'a' }); + this.#writer.on('error', (err) => this.#transitionToMemory(err)); + this.#writer.on('drain', () => { this.#needsDrain = false; }); + } catch (err) { + this.#transitionToMemory(err); + } + } + + #writeDisk(entry) { + if (this.#inMemoryOnly || !this.#writer) return; + const result = tryDiskWrite(this.#writer, entry, { + needsDrain: this.#needsDrain, + maxBuffer: MAX_STREAM_BUFFER + }); + this.#needsDrain = result.needsDrain; + if (result.err) { this.#transitionToMemory(result.err); return; } + if (result.queuedOnly) return; + if (typeof entry.timestamp === 'number' && entry.timestamp > this.#lastDiskTimestamp) { + this.#lastDiskTimestamp = entry.timestamp; + } + } + + #transitionToMemory(err) { + if (this.#inMemoryOnly) return; + this.#inMemoryOnly = true; + this.lastFallbackError = err; + this.#closeWriter().catch(() => {}); + } + + async #closeWriter() { + const w = this.#writer; + this.#writer = null; + if (!w) return; + // Windows AV scanners can hang end(); race it with a destroy. + await raceEndAgainstDestroy(w, CLOSE_TIMEOUT_MS); + } + + async #cleanupSpillDir() { + if (!this.#spillDir) return; + try { + await fsp.rm(this.#spillDir, { + recursive: true, force: true, maxRetries: 3, retryDelay: 100 + }); + } catch (_) {} + } + + _syncCleanup() { + try { if (this.#writer) this.#writer.end(); } catch (_) {} + try { + if (this.#spillDir) { + rmSync(this.#spillDir, { recursive: true, force: true, maxRetries: 3 }); + } + } catch (_) {} + } +} + +// Pure-function helpers — exported so their edge-case branches can be +// exercised without spinning up a full HybridLogStore. + +// True when the given tmpdir is the world-readable Windows system temp. +// Some CI runners expose C:\Windows\Temp; disk spill there leaks secrets. +export function isUnsafeWindowsTmpdir(tmp, isWindows = IS_WINDOWS) { + return isWindows && /^[A-Z]:\\Windows\\Temp$/i.test(tmp); +} + +// Attempts a single write to a WriteStream. Returns a plain object so the +// caller can update state without leaking stream internals. Captures the +// two failure modes independently of #HybridLogStore: +// - Backpressure: writableLength already over cap → queuedOnly = true +// - Sync throw (writer destroyed or invalid chunk) → err populated +export function tryDiskWrite(writer, entry, opts) { + const state = { needsDrain: !!opts.needsDrain }; + if (state.needsDrain || writer.writableLength > opts.maxBuffer) { + state.needsDrain = true; + return { ...state, queuedOnly: true }; + } + try { + const ok = writer.write(safeStringify(entry) + '\n'); + if (!ok) state.needsDrain = true; + return state; + } catch (err) { + return { ...state, err }; + } +} + +// Race end() against a destroy-timer. Exported for testing the timeout +// branch without waiting for a real Windows AV scanner to hang end(). +export function raceEndAgainstDestroy(writer, timeoutMs) { + return Promise.race([ + new Promise(resolve => { writer.end(resolve); }), + new Promise(resolve => setTimeout(() => { + try { writer.destroy(); } catch (_) {} resolve(); + }, timeoutMs)) + ]); +} + +// Canonical per-snapshot bucket key. Must match discovery.js's equality +// check (testCase + name). Returns null for non-snapshot entries. +export function snapshotKey(meta) { + const s = meta?.snapshot; + if (!s || s.name == null) return null; + return `${s.testCase ?? ''} ${s.name}`; +} + +// Best-effort sweep of abandoned spill directories from prior crashed runs. +let swept = false; +export async function sweepOrphans(tmpdir = os.tmpdir(), now) { + if (swept) return { removed: 0, bytes: 0, skipped: true }; + swept = true; + if (now == null) now = Date.now(); + + let removed = 0; + let bytes = 0; + let entries; + try { entries = await fsp.readdir(tmpdir, { withFileTypes: true }); } catch (_) { return { removed: 0, bytes: 0 }; } + + const myUid = !IS_WINDOWS && typeof process.getuid === 'function' + ? process.getuid() : null; + + for (const de of entries) { + if (!de.isDirectory() || !de.name.startsWith(DIR_PREFIX)) continue; + const full = path.join(tmpdir, de.name); + try { + const st = await fsp.stat(full); + if (myUid !== null && st.uid !== myUid) continue; + if (await isPidAlive(full)) continue; + if (now - st.mtimeMs < ORPHAN_TTL_MS) continue; + + const sz = await dirSize(full); + await fsp.rm(full, { + recursive: true, force: true, maxRetries: 3, retryDelay: 100 + }); + removed++; + bytes += sz; + } catch (_) { /* permission / race / vanished */ } + } + return { removed, bytes }; +} + +export function __resetOrphanGuard() { swept = false; } + +async function isPidAlive(dir) { + try { + const raw = await fsp.readFile(path.join(dir, 'pid'), 'utf8'); + const pid = parseInt(raw.trim(), 10); + if (!Number.isInteger(pid) || pid <= 0) return false; + try { + process.kill(pid, 0); + return true; + } catch (e) { + if (e.code === 'EPERM') return true; + return false; + } + } catch (_) { + return false; + } +} + +async function dirSize(p) { + let total = 0; + try { + for (const de of await fsp.readdir(p, { withFileTypes: true })) { + const full = path.join(p, de.name); + if (de.isDirectory()) total += await dirSize(full); + else { + try { const s = await fsp.stat(full); total += s.size; } catch (_) {} + } + } + } catch (_) {} + return total; +} diff --git a/packages/logger/src/index.js b/packages/logger/src/index.js index 919bf5cf6..c96337a26 100644 --- a/packages/logger/src/index.js +++ b/packages/logger/src/index.js @@ -14,7 +14,10 @@ Object.defineProperties(logger, { format: { value: (...args) => logger.instance.format(...args) }, loglevel: { value: (...args) => logger.instance.loglevel(...args) }, timeit: { get: () => new TimeIt(logger.instance.group('timer')) }, - measure: { value: (...args) => logger.timeit.measure(...args) } + measure: { value: (...args) => logger.timeit.measure(...args) }, + reset: { value: (...args) => logger.instance.reset(...args) }, + clearMemory: { value: () => logger.instance.clearMemory() }, + toArray: { value: () => logger.instance.toArray() } }); export default logger; diff --git a/packages/logger/src/internal.js b/packages/logger/src/internal.js new file mode 100644 index 000000000..5478d1d56 --- /dev/null +++ b/packages/logger/src/internal.js @@ -0,0 +1,14 @@ +// Non-public surface used by @percy/core. Kept behind this subexport so +// SDK consumers cannot accidentally depend on implementation details. + +import logger from './index.js'; + +export { snapshotKey } from './hybrid-log-store.js'; + +export function evictSnapshot(key) { + logger.instance.evictSnapshot(key); +} + +export function readBack() { + return logger.instance.readBack(); +} diff --git a/packages/logger/src/logger.js b/packages/logger/src/logger.js index a1c76fb23..11e6079ad 100644 --- a/packages/logger/src/logger.js +++ b/packages/logger/src/logger.js @@ -1,32 +1,28 @@ import { colors } from './utils.js'; +import { HybridLogStore, sweepOrphans } from './hybrid-log-store.js'; const LINE_PAD_REGEXP = /^(\n*)(.*?)(\n*)$/s; const URL_REGEXP = /https?:\/\/[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:;%_+.~#?&//=[\]]*)/i; const LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3 }; -// A PercyLogger instance retains logs in-memory for quick lookups while also writing log -// messages to stdout and stderr depending on the log level and debug string. +// Runs the orphan sweep at most once per process lifetime. +let orphanSweepInflight = null; + export class PercyLogger { - // default log level level = 'info'; - // namespace regular expressions used to determine which debug logs to write namespaces = { include: [/^.*?$/], exclude: [/^ci$/, /^sdk$/] }; - // in-memory store for logs and meta info - messages = new Set(); + #store = null; - // track deprecations to limit noisy logging deprecations = new Set(); - // static vars can be overriden for testing static stdout = process.stdout; static stderr = process.stderr; - // Handles setting env var values and returns a singleton constructor() { let { instance = this } = this.constructor; @@ -37,17 +33,24 @@ export class PercyLogger { } this.constructor.instance = instance; + + if (!instance.#store) { + const forceInMemory = process.env.PERCY_LOGS_IN_MEMORY === '1'; + instance.#store = new HybridLogStore({ forceInMemory }); + + if (!orphanSweepInflight) { + orphanSweepInflight = sweepOrphans().catch(() => {}); + } + } + return instance; } - // Change log level at any time or return the current log level loglevel(level) { if (level) this.level = level; return this.level; } - // Change namespaces by generating an array of namespace regular expressions from a - // comma separated debug string debug(namespaces) { if (this.namespaces.string === namespaces) return; this.namespaces.string = namespaces; @@ -73,7 +76,6 @@ export class PercyLogger { }); } - // Creates a new log group and returns level specific functions for logging group(name) { return Object.keys(LOG_LEVELS) .reduce((group, level) => Object.assign(group, { @@ -89,61 +91,83 @@ export class PercyLogger { }); } - // Query for a set of logs by filtering the in-memory store query(filter) { - return Array.from(this.messages).filter(filter); + return this.#store ? this.#store.query(filter) : []; + } + + evictSnapshot(key) { + if (this.#store) this.#store.evictSnapshot(key); + } + + readBack() { + return this.#store + ? this.#store.readBack() + : (async function*() {})(); + } + + toArray() { + return this.query(() => true); + } + + // Full teardown — closes the disk writer and removes the spill directory. + async reset() { + if (this.#store) await this.#store.reset(); + this.deprecations.clear(); + } + + // Sync in-memory clear without touching the disk writer. Used by the + // /test/api/reset HTTP handler which must return synchronously. + clearMemory() { + if (this.#store) this.#store.clearMemory(); + this.deprecations.clear(); + } + + async dispose() { + if (this.#store) await this.#store.dispose(); + } + + get inMemoryOnly() { + return this.#store ? this.#store.inMemoryOnly : true; } - // Formats messages before they are logged to stdio format(debug, level, message, elapsed) { let color = (n, m) => this.isTTY ? colors[n](m) : m; let begin, end, suffix = ''; let label = 'percy'; if (arguments.length === 1) { - // format(message) [debug, message] = [null, debug]; } else if (arguments.length === 2) { - // format(debug, message) [level, message] = [null, level]; } - // do not format leading or trailing newlines [, begin, message, end] = message.match(LINE_PAD_REGEXP); - // include debug information if (this.level === 'debug') { if (debug) label += `:${debug}`; - // include elapsed time since last log if (elapsed != null) { suffix = ' ' + color('grey', `(${elapsed}ms)`); } } - // add colors label = color('magenta', label); if (level === 'error') { - // red errors message = color('red', message); } else if (level === 'warn') { - // yellow warnings message = color('yellow', message); } else if (level === 'info' || level === 'debug') { - // blue info and debug URLs message = message.replace(URL_REGEXP, color('blue', '$&')); } return `${begin}[${label}] ${message}${suffix}${end}`; } - // True if stdout is a TTY interface get isTTY() { return !!this.constructor.stdout.isTTY; } - // Replaces the current line with a log message progress(debug, message, persist) { if (!this.shouldLog(debug, 'info')) return; let { stdout } = this.constructor; @@ -159,7 +183,6 @@ export class PercyLogger { this._progress = !!message && { message, persist }; } - // Returns true or false if the level and debug group can write messages to stdio shouldLog(debug, level) { return LOG_LEVELS[level] != null && LOG_LEVELS[level] >= LOG_LEVELS[this.level] && @@ -167,7 +190,6 @@ export class PercyLogger { this.namespaces.include.some(ns => ns.test(debug)); } - // Ensures that deprecation messages are not logged more than once deprecated(debug, message, meta) { if (this.deprecations.has(message)) return; this.deprecations.add(message); @@ -175,36 +197,29 @@ export class PercyLogger { this.log(debug, 'warn', `Warning: ${message}`, meta); } - // Generic log method accepts a debug group, log level, log message, and optional meta - // information to store with the message and other info log(debug, level, message, meta = {}) { - // message might be an error-like object let err = typeof message !== 'string' && (level === 'debug' || level === 'error'); err &&= message.message ? Error.prototype.toString.call(message) : message.toString(); - // save log entries let timestamp = Date.now(); message = err ? (message.stack || err) : message.toString(); let entry = { debug, level, message, meta, timestamp, error: !!err }; - this.messages.add(entry); - // maybe write the message to stdio + if (this.#store) this.#store.push(entry); + if (this.shouldLog(debug, level)) { - // unless the loglevel is debug, write shorter error messages if (err && this.level !== 'debug') message = err; this.write({ ...entry, message }); this.lastlog = timestamp; } } - // Writes a log entry to stdio based on the loglevel write({ debug, level, message, timestamp, error }) { let elapsed = timestamp - (this.lastlog || timestamp); let msg = this.format(debug, error ? 'error' : level, message, elapsed); let progress = this.isTTY && this._progress; let { stdout, stderr } = this.constructor; - // clear any logged progress if (progress) { stdout.cursorTo(0); stdout.clearLine(0); diff --git a/packages/logger/src/redact.js b/packages/logger/src/redact.js new file mode 100644 index 000000000..43ac1e185 --- /dev/null +++ b/packages/logger/src/redact.js @@ -0,0 +1,201 @@ +import { readFileSync } from 'fs'; +import { fileURLToPath } from 'url'; +import path from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const MIN_MARKER_LEN = 3; + +// Common English + URL/keyword noise that would appear in nearly every log +// line and defeat the fast-reject index. Kept intentionally small. +const NOISE_WORDS = new Set([ + 'the', 'and', 'for', 'are', 'not', 'was', 'but', 'can', 'get', 'set', + 'log', 'out', 'you', 'his', 'her', 'one', 'two', 'all', 'any', 'new', + 'now', 'has', 'had', 'yes', 'off', 'use', 'how', 'why', 'who', 'our', + 'http', 'https', 'www', 'true', 'false', 'null', 'name', 'type', 'path', + 'time', 'date', 'info', 'user', 'pass', 'token', 'com', 'net', 'org' +]); + +// Single-pass walker over a regex source. Collects every literal run of +// length >= MIN_MARKER_LEN that MUST appear in any string matching the regex. +// Returns [] for pure-entropy patterns (e.g. /\b[a-f0-9]{32}\b/). +export function extractLiteralMarkers(src) { + const markers = []; + let run = ''; + let i = 0; + let classDepth = 0; + let lastCharLiteral = false; + + const push = () => { + if (run.length >= MIN_MARKER_LEN && !NOISE_WORDS.has(run.toLowerCase())) { + markers.push(run); + } + run = ''; + lastCharLiteral = false; + }; + + while (i < src.length) { + const c = src[i]; + + if (classDepth > 0) { + if (c === '\\') { i += 2; continue; } + if (c === ']') classDepth = 0; + i++; + continue; + } + if (c === '[') { push(); classDepth = 1; i++; continue; } + + if (c === '\\') { + const n = src[i + 1]; + if (n && /[.\-_/@:]/.test(n)) { + run += n; + lastCharLiteral = true; + } else { + push(); + } + i += 2; + continue; + } + + if (c === '(' || c === ')' || c === '|') { + push(); + if (c === '(' && src[i + 1] === '?') { + i += 2; + if (src[i] === ':' || src[i] === '=' || src[i] === '!') { i++; continue; } + if (src[i] === '<' || src[i] === 'P') { + while (i < src.length && src[i] !== '>') i++; + if (src[i] === '>') i++; + } + continue; + } + i++; + continue; + } + + // A quantified final char is optional, so it cannot anchor the run. + if (c === '?' || c === '*' || c === '+' || c === '{') { + if (lastCharLiteral && run.length > 0) run = run.slice(0, -1); + push(); + if (c === '{') { + while (i < src.length && src[i] !== '}') i++; + } + i++; + continue; + } + + if (c === '^' || c === '$') { push(); i++; continue; } + + if (/[a-zA-Z0-9_-]/.test(c)) { + run += c; + lastCharLiteral = true; + i++; + continue; + } + + push(); + i++; + } + push(); + return [...new Set(markers)]; +} + +export function escapeForRegex(s) { + return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +// Builds a redactor from a raw pattern list. Exposed so tests can exercise +// the empty / partial pattern-set branches that the module-level defaults +// cannot reach once the full secret-patterns.json has loaded. +export function createRedactor(rawPatterns) { + const anchored = []; + const alwaysRunSources = []; + const markerToPatterns = new Map(); + + for (const p of rawPatterns) { + let re; + try { re = new RegExp(p.pattern.regex, 'g'); } catch (_) { continue; } + const markers = extractLiteralMarkers(p.pattern.regex); + if (markers.length === 0) { + alwaysRunSources.push(p.pattern.regex); + } else { + const idx = anchored.push({ re, markers }) - 1; + for (const m of markers) { + let set = markerToPatterns.get(m); + if (!set) { set = new Set(); markerToPatterns.set(m, set); } + set.add(idx); + } + } + } + + // V8 optimises N-way top-level alternation into a trie-based single pass, + // turning O(N * |str|) into ~O(|str|) for the clean-line case. + const alwaysRunUnion = alwaysRunSources.length > 0 + ? new RegExp(alwaysRunSources.map(src => `(?:${src})`).join('|'), 'g') + : null; + + // Longest marker first so the matcher prefers the most specific match. + const markerUnion = markerToPatterns.size > 0 + ? new RegExp([...markerToPatterns.keys()].sort((a, b) => b.length - a.length).map(escapeForRegex).join('|'), 'g') + : null; + + // Fail-open on any internal error — the logger must never be silenced by + // a redact bug. + function redactString(str) { + if (typeof str !== 'string' || str.length === 0) return str; + let out = str; + + try { + if (alwaysRunUnion) out = out.replace(alwaysRunUnion, '[REDACTED]'); + + if (markerUnion) { + markerUnion.lastIndex = 0; + const toRun = new Set(); + let m; + while ((m = markerUnion.exec(out)) !== null) { + const patternIndexes = markerToPatterns.get(m[0]); + if (patternIndexes) for (const idx of patternIndexes) toRun.add(idx); + if (m[0].length === 0) markerUnion.lastIndex++; + } + for (const idx of toRun) out = out.replace(anchored[idx].re, '[REDACTED]'); + } + } catch (_) { + /* istanbul ignore next */ + return str; + } + return out; + } + + function redactSecrets(data) { + if (Array.isArray(data)) return data.map(redactSecrets); + if (data && typeof data === 'object') { + if (typeof data.message === 'string') data.message = redactString(data.message); + return data; + } + if (typeof data === 'string') return redactString(data); + return data; + } + + return { + redactString, + redactSecrets, + patternsCount: rawPatterns.length, + markerCount: markerToPatterns.size + }; +} + +const rawPatterns = (() => { + try { + return JSON.parse(readFileSync(path.join(__dirname, 'secret-patterns.json'), 'utf8')).patterns; + } catch (err) { + /* istanbul ignore next */ + return []; + } +})(); + +const defaultRedactor = createRedactor(rawPatterns); + +export const redactString = defaultRedactor.redactString; +export const redactSecrets = defaultRedactor.redactSecrets; +export const PATTERNS_COUNT = defaultRedactor.patternsCount; +export const MARKER_COUNT = defaultRedactor.markerCount; diff --git a/packages/logger/src/secret-patterns.json b/packages/logger/src/secret-patterns.json new file mode 100644 index 000000000..f190da698 --- /dev/null +++ b/packages/logger/src/secret-patterns.json @@ -0,0 +1,10667 @@ +{ + "_attribution": "Secrets Patterns Database by @mazen160 (CC BY-SA 4.0) Source: https://github.com/mazen160/secrets-patterns-db Originally shipped at packages/core/src/secretPatterns.yml; converted to JSON on 2026-04-23 to keep @percy/logger zero-dep (no yaml parser needed at runtime). JSON is now the source of truth. To add or modify patterns, edit this file directly.", + "patterns": [ + { + "pattern": { + "name": "AWS API Gateway", + "regex": "[0-9a-z]+.execute-api.[0-9a-z._-]+.amazonaws.com" + } + }, + { + "pattern": { + "name": "AWS API Key", + "regex": "AKIA[0-9A-Z]{16}" + } + }, + { + "pattern": { + "name": "AWS ARN", + "regex": "arn:aws:[a-z0-9-]+:[a-z]{2}-[a-z]+-[0-9]+:[0-9]+:.+" + } + }, + { + "pattern": { + "name": "AWS Access Key ID Value", + "regex": "(A3T[A-Z0-9]|AKIA|AGPA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}" + } + }, + { + "pattern": { + "name": "AWS AppSync GraphQL Key", + "regex": "da2-[a-z0-9]{26}" + } + }, + { + "pattern": { + "name": "AWS EC2 External", + "regex": "ec2-[0-9a-z._-]+.compute(-1)?.amazonaws.com" + } + }, + { + "pattern": { + "name": "AWS EC2 Internal", + "regex": "[0-9a-z._-]+.compute(-1)?.internal" + } + }, + { + "pattern": { + "name": "AWS ELB", + "regex": "[0-9a-z._-]+.elb.amazonaws.com" + } + }, + { + "pattern": { + "name": "AWS ElasticCache", + "regex": "[0-9a-z._-]+.cache.amazonaws.com" + } + }, + { + "pattern": { + "name": "AWS MWS ID", + "regex": "mzn\\.mws\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + } + }, + { + "pattern": { + "name": "AWS MWS key", + "regex": "amzn\\.mws\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + } + }, + { + "pattern": { + "name": "AWS RDS", + "regex": "[0-9a-z._-]+.rds.amazonaws.com" + } + }, + { + "pattern": { + "name": "AWS S3 Bucket", + "regex": "s3://[0-9a-z._/-]+" + } + }, + { + "pattern": { + "name": "AWS client ID", + "regex": "(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}" + } + }, + { + "pattern": { + "name": "AWS cred file info", + "regex": "(aws_access_key_id|aws_secret_access_key)" + } + }, + { + "pattern": { + "name": "Abbysale", + "regex": "(?:abbysale).{0,40}\\b([a-z0-9A-Z]{40})\\b" + } + }, + { + "pattern": { + "name": "Abstract", + "regex": "(?:abstract).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Abuseipdb", + "regex": "(?:abuseipdb).{0,40}\\b([a-z0-9]{80})\\b" + } + }, + { + "pattern": { + "name": "Accuweather", + "regex": "(?:accuweather).{0,40}([a-z0-9A-Z\\%]{35})\\b" + } + }, + { + "pattern": { + "name": "Adafruitio", + "regex": "\\b(aio\\_[a-zA-Z0-9]{28})\\b" + } + }, + { + "pattern": { + "name": "Adobeio - 1", + "regex": "(?:adobe).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Adzuna - 1", + "regex": "(?:adzuna).{0,40}\\b([a-z0-9]{8})\\b" + } + }, + { + "pattern": { + "name": "Adzuna - 2", + "regex": "(?:adzuna).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Aeroworkflow - 1", + "regex": "(?:aeroworkflow).{0,40}\\b([0-9]{1,})\\b" + } + }, + { + "pattern": { + "name": "Aeroworkflow - 2", + "regex": "(?:aeroworkflow).{0,40}\\b([a-zA-Z0-9^!]{20})\\b" + } + }, + { + "pattern": { + "name": "Agora", + "regex": "(?:agora).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Airbrakeprojectkey - 1", + "regex": "(?:airbrake).{0,40}\\b([0-9]{6})\\b" + } + }, + { + "pattern": { + "name": "Airbrakeprojectkey - 2", + "regex": "(?:airbrake).{0,40}\\b([a-zA-Z-0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Airbrakeuserkey", + "regex": "(?:airbrake).{0,40}\\b([a-zA-Z-0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Airship", + "regex": "(?:airship).{0,40}\\b([0-9Aa-zA-Z]{91})\\b" + } + }, + { + "pattern": { + "name": "Airvisual", + "regex": "(?:airvisual).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Alconost", + "regex": "(?:alconost).{0,40}\\b([0-9Aa-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Alegra - 1", + "regex": "(?:alegra).{0,40}\\b([a-z0-9-]{20})\\b" + } + }, + { + "pattern": { + "name": "Alegra - 2", + "regex": "(?:alegra).{0,40}\\b([a-zA-Z0-9.-@]{25,30})\\b" + } + }, + { + "pattern": { + "name": "Aletheiaapi", + "regex": "(?:aletheiaapi).{0,40}\\b([A-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Algoliaadminkey - 1", + "regex": "(?:algolia).{0,40}\\b([A-Z0-9]{10})\\b" + } + }, + { + "pattern": { + "name": "Algoliaadminkey - 2", + "regex": "(?:algolia).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Alibaba - 2", + "regex": "\\b(LTAI[a-zA-Z0-9]{17,21})[\\\"' ;\\s]*" + } + }, + { + "pattern": { + "name": "Alienvault", + "regex": "(?:alienvault).{0,40}\\b([a-z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Allsports", + "regex": "(?:allsports).{0,40}\\b([0-9a-z]{64})\\b" + } + }, + { + "pattern": { + "name": "Amadeus - 1", + "regex": "(?:amadeus).{0,40}\\b([0-9A-Za-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Amadeus - 2", + "regex": "(?:amadeus).{0,40}\\b([0-9A-Za-z]{16})\\b" + } + }, + { + "pattern": { + "name": "Amazon SNS Topic", + "regex": "arn:aws:sns:[a-z0-9\\-]+:[0-9]+:[A-Za-z0-9\\-_]+" + } + }, + { + "pattern": { + "name": "Ambee", + "regex": "(?:ambee).{0,40}\\b([0-9a-f]{64})\\b" + } + }, + { + "pattern": { + "name": "Amplitudeapikey", + "regex": "(?:amplitude).{0,40}\\b([a-f0-9]{32})" + } + }, + { + "pattern": { + "name": "Apacta", + "regex": "(?:apacta).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Api2cart", + "regex": "(?:api2cart).{0,40}\\b([0-9a-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Apideck - 1", + "regex": "\\b(sk_live_[a-z0-9A-Z-]{93})\\b" + } + }, + { + "pattern": { + "name": "Apideck - 2", + "regex": "(?:apideck).{0,40}\\b([a-z0-9A-Z]{40})\\b" + } + }, + { + "pattern": { + "name": "Apiflash - 1", + "regex": "(?:apiflash).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Apiflash - 2", + "regex": "(?:apiflash).{0,40}\\b([a-zA-Z0-9\\S]{21,30})\\b" + } + }, + { + "pattern": { + "name": "Apifonica", + "regex": "(?:apifonica).{0,40}\\b([0-9a-z]{11}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\\b" + } + }, + { + "pattern": { + "name": "Apify", + "regex": "\\b(apify\\_api\\_[a-zA-Z-0-9]{36})\\b" + } + }, + { + "pattern": { + "name": "Apimatic - 1", + "regex": "(?:apimatic).{0,40}\\b([a-z0-9-\\S]{8,32})\\b" + } + }, + { + "pattern": { + "name": "Apimatic - 2", + "regex": "(?:apimatic).{0,40}\\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\\b" + } + }, + { + "pattern": { + "name": "Apiscience", + "regex": "(?:apiscience).{0,40}\\b([a-bA-Z0-9\\S]{22})\\b" + } + }, + { + "pattern": { + "name": "Apollo", + "regex": "(?:apollo).{0,40}\\b([a-zA-Z0-9]{22})\\b" + } + }, + { + "pattern": { + "name": "Appcues - 1", + "regex": "(?:appcues).{0,40}\\b([0-9]{5})\\b" + } + }, + { + "pattern": { + "name": "Appcues - 2", + "regex": "(?:appcues).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Appcues - 3", + "regex": "(?:appcues).{0,40}\\b([a-z0-9-]{39})\\b" + } + }, + { + "pattern": { + "name": "Appfollow", + "regex": "(?:appfollow).{0,40}\\b([0-9A-Za-z]{20})\\b" + } + }, + { + "pattern": { + "name": "Appsynergy", + "regex": "(?:appsynergy).{0,40}\\b([a-z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Apptivo - 1", + "regex": "(?:apptivo).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Apptivo - 2", + "regex": "(?:apptivo).{0,40}\\b([a-zA-Z0-9-]{32})\\b" + } + }, + { + "pattern": { + "name": "Artifactory - 2", + "regex": "\\b([A-Za-z0-9](?:[A-Za-z0-9\\-]{0,61}[A-Za-z0-9])\\.jfrog\\.io)" + } + }, + { + "pattern": { + "name": "Artifactory API Token", + "regex": "(?:\\s|=|:|\"|^)AKC[a-zA-Z0-9]{10,}" + } + }, + { + "pattern": { + "name": "Artifactory Password", + "regex": "(?:\\s|=|:|\"|^)AP[\\dABCDEF][a-zA-Z0-9]{8,}" + } + }, + { + "pattern": { + "name": "Artsy - 1", + "regex": "(?:artsy).{0,40}\\b([0-9a-zA-Z]{20})\\b" + } + }, + { + "pattern": { + "name": "Artsy - 2", + "regex": "(?:artsy).{0,40}\\b([0-9a-zA-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Asanaoauth", + "regex": "(?:asana).{0,40}\\b([a-z\\/:0-9]{51})\\b" + } + }, + { + "pattern": { + "name": "Asanapersonalaccesstoken", + "regex": "(?:asana).{0,40}\\b([0-9]{1,}\\/[0-9]{16,}:[A-Za-z0-9]{32,})\\b" + } + }, + { + "pattern": { + "name": "Assemblyai", + "regex": "(?:assemblyai).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Asymmetric Private Key", + "regex": "-----BEGIN ((EC|PGP|DSA|RSA|OPENSSH) )?PRIVATE KEY( BLOCK)?-----" + } + }, + { + "pattern": { + "name": "Audd", + "regex": "(?:audd).{0,40}\\b([a-z0-9-]{32})\\b" + } + }, + { + "pattern": { + "name": "Auth0managementapitoken", + "regex": "(?:auth0).{0,40}\\b(ey[a-zA-Z0-9._-]+)\\b" + } + }, + { + "pattern": { + "name": "Auth0oauth - 1", + "regex": "(?:auth0).{0,40}\\b([a-zA-Z0-9_-]{32,60})\\b" + } + }, + { + "pattern": { + "name": "Autodesk - 1", + "regex": "(?:autodesk).{0,40}\\b([0-9A-Za-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Autodesk - 2", + "regex": "(?:autodesk).{0,40}\\b([0-9A-Za-z]{16})\\b" + } + }, + { + "pattern": { + "name": "Autoklose", + "regex": "(?:autoklose).{0,40}\\b([a-zA-Z0-9-]{32})\\b" + } + }, + { + "pattern": { + "name": "Autopilot", + "regex": "(?:autopilot).{0,40}\\b([0-9a-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Avazapersonalaccesstoken", + "regex": "(?:avaza).{0,40}\\b([0-9]+-[0-9a-f]{40})\\b" + } + }, + { + "pattern": { + "name": "Aviationstack", + "regex": "(?:aviationstack).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Aws - 1", + "regex": "\\b((?:AKIA|ABIA|ACCA|ASIA)[0-9A-Z]{16})\\b" + } + }, + { + "pattern": { + "name": "Axonaut", + "regex": "(?:axonaut).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Aylien - 1", + "regex": "(?:aylien).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Aylien - 2", + "regex": "(?:aylien).{0,40}\\b([a-z0-9]{8})\\b" + } + }, + { + "pattern": { + "name": "Ayrshare", + "regex": "(?:ayrshare).{0,40}\\b([A-Z]{7}-[A-Z0-9]{7}-[A-Z0-9]{7}-[A-Z0-9]{7})\\b" + } + }, + { + "pattern": { + "name": "Bannerbear", + "regex": "(?:bannerbear).{0,40}\\b([0-9a-zA-Z]{22}tt)\\b" + } + }, + { + "pattern": { + "name": "Baremetrics", + "regex": "(?:baremetrics).{0,40}\\b([a-zA-Z0-9_]{25})\\b" + } + }, + { + "pattern": { + "name": "Baseapiio", + "regex": "(?:baseapi|base-api).{0,40}\\b([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Beamer", + "regex": "(?:beamer).{0,40}\\b([a-zA-Z0-9_+/]{45}=)" + } + }, + { + "pattern": { + "name": "Bearer token", + "regex": "(bearer).+" + } + }, + { + "pattern": { + "name": "Beebole", + "regex": "(?:beebole).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Besttime", + "regex": "(?:besttime).{0,40}\\b([0-9A-Za-z_]{36})\\b" + } + }, + { + "pattern": { + "name": "Billomat - 1", + "regex": "(?:billomat).{0,40}\\b([0-9a-z]{1,})\\b" + } + }, + { + "pattern": { + "name": "Billomat - 2", + "regex": "(?:billomat).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Bitbar", + "regex": "(?:bitbar).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Bitcoinaverage", + "regex": "(?:bitcoinaverage).{0,40}\\b([a-zA-Z0-9]{43})\\b" + } + }, + { + "pattern": { + "name": "Bitfinex", + "regex": "(?:bitfinex).{0,40}\\b([A-Za-z0-9_-]{43})\\b" + } + }, + { + "pattern": { + "name": "Bitly Secret Key", + "regex": "R_[0-9a-f]{32}" + } + }, + { + "pattern": { + "name": "Bitlyaccesstoken", + "regex": "(?:bitly).{0,40}\\b([a-zA-Z-0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Bitmex - 1", + "regex": "(?:bitmex).{0,40}([ \\r\\n]{1}[0-9a-zA-Z\\-\\_]{24}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Bitmex - 2", + "regex": "(?:bitmex).{0,40}([ \\r\\n]{1}[0-9a-zA-Z\\-\\_]{48}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Blablabus", + "regex": "(?:blablabus).{0,40}\\b([0-9A-Za-z]{22})\\b" + } + }, + { + "pattern": { + "name": "Blazemeter", + "regex": "(?:blazemeter|runscope).{0,40}\\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\\b" + } + }, + { + "pattern": { + "name": "Blitapp", + "regex": "(?:blitapp).{0,40}\\b([a-zA-Z0-9_-]{39})\\b" + } + }, + { + "pattern": { + "name": "Blogger", + "regex": "(?:blogger).{0,40}\\b([0-9A-Za-z-]{39})\\b" + } + }, + { + "pattern": { + "name": "Bombbomb", + "regex": "(?:bombbomb).{0,40}\\b([a-zA-Z0-9-._]{704})\\b" + } + }, + { + "pattern": { + "name": "Boostnote", + "regex": "(?:boostnote).{0,40}\\b([0-9a-f]{64})\\b" + } + }, + { + "pattern": { + "name": "Borgbase", + "regex": "(?:borgbase).{0,40}\\b([a-zA-Z0-9/_.-]{148,152})\\b" + } + }, + { + "pattern": { + "name": "Braintree API Key", + "regex": "access_token$production$[0-9a-z]{16}$[0-9a-f]{32}" + } + }, + { + "pattern": { + "name": "Brandfetch", + "regex": "(?:brandfetch).{0,40}\\b([0-9A-Za-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Browshot", + "regex": "(?:browshot).{0,40}\\b([a-zA-Z-0-9]{28})\\b" + } + }, + { + "pattern": { + "name": "Buddyns", + "regex": "(?:buddyns).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Bugherd", + "regex": "(?:bugherd).{0,40}\\b([0-9a-z]{22})\\b" + } + }, + { + "pattern": { + "name": "Bugsnag", + "regex": "(?:bugsnag).{0,40}\\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\\b" + } + }, + { + "pattern": { + "name": "Buildkite", + "regex": "(?:buildkite).{0,40}\\b([a-z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Bulbul", + "regex": "(?:bulbul).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Buttercms", + "regex": "(?:buttercms).{0,40}\\b([a-z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Caflou", + "regex": "(?:caflou).{0,40}\\b([a-bA-Z0-9\\S]{155})\\b" + } + }, + { + "pattern": { + "name": "Calendarific", + "regex": "(?:calendarific).{0,40}\\b([a-z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Calendlyapikey", + "regex": "(?:calendly).{0,40}\\b([a-zA-Z-0-9]{20}.[a-zA-Z-0-9]{171}.[a-zA-Z-0-9_]{43})\\b" + } + }, + { + "pattern": { + "name": "Calorieninja", + "regex": "(?:calorieninja).{0,40}\\b([0-9A-Za-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Campayn", + "regex": "(?:campayn).{0,40}\\b([a-z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Cannyio", + "regex": "(?:canny).{0,40}\\b([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[0-9]{4}-[a-z0-9]{12})\\b" + } + }, + { + "pattern": { + "name": "Capsulecrm", + "regex": "(?:capsulecrm).{0,40}\\b([a-zA-Z0-9-._+=]{64})\\b" + } + }, + { + "pattern": { + "name": "Captaindata - 1", + "regex": "(?:captaindata).{0,40}\\b([0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Captaindata - 2", + "regex": "(?:captaindata).{0,40}\\b([0-9a-f]{64})\\b" + } + }, + { + "pattern": { + "name": "Carboninterface", + "regex": "(?:carboninterface).{0,40}\\b([a-zA-Z0-9]{21})\\b" + } + }, + { + "pattern": { + "name": "Cashboard - 1", + "regex": "(?:cashboard).{0,40}\\b([0-9A-Z]{3}-[0-9A-Z]{3}-[0-9A-Z]{3}-[0-9A-Z]{3})\\b" + } + }, + { + "pattern": { + "name": "Cashboard - 2", + "regex": "(?:cashboard).{0,40}\\b([0-9a-z]{1,})\\b" + } + }, + { + "pattern": { + "name": "Caspio - 1", + "regex": "(?:caspio).{0,40}\\b([a-z0-9]{8})\\b" + } + }, + { + "pattern": { + "name": "Caspio - 2", + "regex": "(?:caspio).{0,40}\\b([a-z0-9]{50})\\b" + } + }, + { + "pattern": { + "name": "Censys - 1", + "regex": "(?:censys).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Censys - 2", + "regex": "(?:censys).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Centralstationcrm", + "regex": "(?:centralstation).{0,40}\\b([a-z0-9]{30})\\b" + } + }, + { + "pattern": { + "name": "Cexio - 1", + "regex": "(?:cexio|cex.io).{0,40}\\b([a-z]{2}[0-9]{9})\\b" + } + }, + { + "pattern": { + "name": "Cexio - 2", + "regex": "(?:cexio|cex.io).{0,40}\\b([0-9A-Za-z]{24,27})\\b" + } + }, + { + "pattern": { + "name": "Chatbot", + "regex": "(?:chatbot).{0,40}\\b([a-zA-Z0-9_]{32})\\b" + } + }, + { + "pattern": { + "name": "Chatfule", + "regex": "(?:chatfuel).{0,40}\\b([a-zA-Z0-9]{128})\\b" + } + }, + { + "pattern": { + "name": "Checio", + "regex": "(?:checio).{0,40}\\b(pk_[a-z0-9]{45})\\b" + } + }, + { + "pattern": { + "name": "Checklyhq", + "regex": "(?:checklyhq).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Checkout - 1", + "regex": "(?:checkout).{0,40}\\b((sk_|sk_test_)[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\\b" + } + }, + { + "pattern": { + "name": "Checkout - 2", + "regex": "(?:checkout).{0,40}\\b(cus_[0-9a-zA-Z]{26})\\b" + } + }, + { + "pattern": { + "name": "Checkvist - 1", + "regex": "(?:checkvist).{0,40}\\b([\\w\\.-]+@[\\w-]+\\.[\\w\\.-]{2,5})\\b" + } + }, + { + "pattern": { + "name": "Checkvist - 2", + "regex": "(?:checkvist).{0,40}\\b([0-9a-zA-Z]{14})\\b" + } + }, + { + "pattern": { + "name": "Cicero", + "regex": "(?:cicero).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Circleci", + "regex": "(?:circle).{0,40}([a-fA-F0-9]{40})" + } + }, + { + "pattern": { + "name": "Clearbit", + "regex": "(?:clearbit).{0,40}\\b([0-9a-z_]{35})\\b" + } + }, + { + "pattern": { + "name": "Clickhelp - 1", + "regex": "\\b([0-9A-Za-z]{3,20}.try.clickhelp.co)\\b" + } + }, + { + "pattern": { + "name": "Clickhelp - 2", + "regex": "(?:clickhelp).{0,40}\\b([0-9A-Za-z]{24})\\b" + } + }, + { + "pattern": { + "name": "Clicksendsms - 2", + "regex": "(?:sms).{0,40}\\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\\b" + } + }, + { + "pattern": { + "name": "Clickuppersonaltoken", + "regex": "(?:clickup).{0,40}\\b(pk_[0-9]{8}_[0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Cliengo", + "regex": "(?:cliengo).{0,40}\\b([0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Clinchpad", + "regex": "(?:clinchpad).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Clockify", + "regex": "(?:clockify).{0,40}\\b([a-zA-Z0-9]{48})\\b" + } + }, + { + "pattern": { + "name": "Clockworksms - 1", + "regex": "(?:clockwork|textanywhere).{0,40}\\b([0-9a-zA-Z]{24})\\b" + } + }, + { + "pattern": { + "name": "Clockworksms - 2", + "regex": "(?:clockwork|textanywhere).{0,40}\\b([0-9]{5})\\b" + } + }, + { + "pattern": { + "name": "Closecrm", + "regex": "\\b(api_[a-z0-9A-Z.]{45})\\b" + } + }, + { + "pattern": { + "name": "Cloudelements - 1", + "regex": "(?:cloudelements).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Cloudelements - 2", + "regex": "(?:cloudelements).{0,40}\\b([a-zA-Z0-9]{43})\\b" + } + }, + { + "pattern": { + "name": "Cloudflareapitoken", + "regex": "(?:cloudflare).{0,40}\\b([A-Za-z0-9_-]{40})\\b" + } + }, + { + "pattern": { + "name": "Cloudflarecakey", + "regex": "(?:cloudflare).{0,40}\\b(v[A-Za-z0-9._-]{173,})\\b" + } + }, + { + "pattern": { + "name": "Cloudimage", + "regex": "(?:cloudimage).{0,40}\\b([a-z0-9_]{30})\\b" + } + }, + { + "pattern": { + "name": "Cloudinary Credentials", + "regex": "cloudinary://[0-9]+:[A-Za-z0-9\\-_\\.]+@[A-Za-z0-9\\-_\\.]+" + } + }, + { + "pattern": { + "name": "Cloudmersive", + "regex": "(?:cloudmersive).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Cloudplan", + "regex": "(?:cloudplan).{0,40}\\b([A-Z0-9-]{32})\\b" + } + }, + { + "pattern": { + "name": "Cloverly", + "regex": "(?:cloverly).{0,40}\\b([a-z0-9:_]{28})\\b" + } + }, + { + "pattern": { + "name": "Cloze - 1", + "regex": "(?:cloze).{0,40}\\b([0-9a-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Cloze - 2", + "regex": "(?:cloze).{0,40}\\b([\\w\\.-]+@[\\w-]+\\.[\\w\\.-]{2,5})\\b" + } + }, + { + "pattern": { + "name": "Clustdoc", + "regex": "(?:clustdoc).{0,40}\\b([0-9a-zA-Z]{60})\\b" + } + }, + { + "pattern": { + "name": "Codacy", + "regex": "(?:codacy).{0,40}\\b([0-9A-Za-z]{20})\\b" + } + }, + { + "pattern": { + "name": "Coinapi", + "regex": "(?:coinapi).{0,40}\\b([A-Z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Coinbase", + "regex": "(?:coinbase).{0,40}\\b([a-zA-Z-0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Coinlayer", + "regex": "(?:coinlayer).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Coinlib", + "regex": "(?:coinlib).{0,40}\\b([a-z0-9]{16})\\b" + } + }, + { + "pattern": { + "name": "Column", + "regex": "(?:column).{0,40}\\b((?:test|live)_[a-zA-Z0-9]{27})\\b" + } + }, + { + "pattern": { + "name": "Commercejs", + "regex": "(?:commercejs).{0,40}\\b([a-z0-9_]{48})\\b" + } + }, + { + "pattern": { + "name": "Commodities", + "regex": "(?:commodities).{0,40}\\b([a-zA-Z0-9]{60})\\b" + } + }, + { + "pattern": { + "name": "Companyhub - 1", + "regex": "(?:companyhub).{0,40}\\b([0-9a-zA-Z]{20})\\b" + } + }, + { + "pattern": { + "name": "Companyhub - 2", + "regex": "(?:companyhub).{0,40}\\b([a-zA-Z0-9$%^=-]{4,32})\\b" + } + }, + { + "pattern": { + "name": "Confluent - 1", + "regex": "(?:confluent).{0,40}\\b([a-zA-Z-0-9]{16})\\b" + } + }, + { + "pattern": { + "name": "Confluent - 2", + "regex": "(?:confluent).{0,40}\\b([a-zA-Z-0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Convertkit", + "regex": "(?:convertkit).{0,40}\\b([a-z0-9A-Z_]{22})\\b" + } + }, + { + "pattern": { + "name": "Convier", + "regex": "(?:convier).{0,40}\\b([0-9]{2}\\|[a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Copper - 2", + "regex": "(?:copper).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Countrylayer", + "regex": "(?:countrylayer).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Courier", + "regex": "(?:courier).{0,40}\\b(pk\\_[a-zA-Z0-9]{1,}\\_[a-zA-Z0-9]{28})\\b" + } + }, + { + "pattern": { + "name": "Coveralls", + "regex": "(?:coveralls).{0,40}\\b([a-zA-Z0-9-]{37})\\b" + } + }, + { + "pattern": { + "name": "Crowdin", + "regex": "(?:crowdin).{0,40}\\b([0-9A-Za-z]{80})\\b" + } + }, + { + "pattern": { + "name": "Cryptocompare", + "regex": "(?:cryptocompare).{0,40}\\b([a-z-0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Currencycloud - 1", + "regex": "(?:currencycloud).{0,40}\\b([0-9a-z]{64})\\b" + } + }, + { + "pattern": { + "name": "Currencyfreaks", + "regex": "(?:currencyfreaks).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Currencylayer", + "regex": "(?:currencylayer).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Currencyscoop", + "regex": "(?:currencyscoop).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Currentsapi", + "regex": "(?:currentsapi).{0,40}\\b([a-zA-Z0-9\\S]{48})\\b" + } + }, + { + "pattern": { + "name": "Customerguru - 1", + "regex": "(?:guru).{0,40}\\b([a-z0-9A-Z]{50})\\b" + } + }, + { + "pattern": { + "name": "Customerguru - 2", + "regex": "(?:guru).{0,40}\\b([a-z0-9A-Z]{30})\\b" + } + }, + { + "pattern": { + "name": "Customerio", + "regex": "(?:customer).{0,40}\\b([a-z0-9A-Z]{20})\\b" + } + }, + { + "pattern": { + "name": "D7network", + "regex": "(?:d7network).{0,40}\\b([a-zA-Z0-9\\W\\S]{23}\\=)" + } + }, + { + "pattern": { + "name": "Dailyco", + "regex": "(?:daily).{0,40}\\b([0-9a-f]{64})\\b" + } + }, + { + "pattern": { + "name": "Dandelion", + "regex": "(?:dandelion).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Databricks", + "regex": "dapi[a-f0-9]{32}\\b" + } + }, + { + "pattern": { + "name": "Datadogtoken - 1", + "regex": "(?:datadog).{0,40}\\b([a-zA-Z-0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Datadogtoken - 2", + "regex": "(?:datadog).{0,40}\\b([a-zA-Z-0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Datafire", + "regex": "(?:datafire).{0,40}\\b([a-z0-9\\S]{175,190})\\b" + } + }, + { + "pattern": { + "name": "Datagov", + "regex": "(?:data.gov).{0,40}\\b([a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Debounce", + "regex": "(?:debounce).{0,40}\\b([a-zA-Z0-9]{13})\\b" + } + }, + { + "pattern": { + "name": "Deepai", + "regex": "(?:deepai).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Deepgram", + "regex": "(?:deepgram).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Delighted", + "regex": "(?:delighted).{0,40}\\b([a-z0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Deputy - 1", + "regex": "\\b([0-9a-z]{1,}.as.deputy.com)\\b" + } + }, + { + "pattern": { + "name": "Deputy - 2", + "regex": "(?:deputy).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Detectlanguage", + "regex": "(?:detectlanguage).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Dfuse", + "regex": "\\b(web\\_[0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Diffbot", + "regex": "(?:diffbot).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Digitaloceantoken", + "regex": "(?:digitalocean).{0,40}\\b([A-Za-z0-9_-]{64})\\b" + } + }, + { + "pattern": { + "name": "Discord Webhook", + "regex": "https://discordapp\\.com/api/webhooks/[0-9]+/[A-Za-z0-9\\-]+" + } + }, + { + "pattern": { + "name": "Discordbottoken - 1", + "regex": "(?:discord).{0,40}\\b([A-Za-z0-9_-]{24}\\.[A-Za-z0-9_-]{6}\\.[A-Za-z0-9_-]{27})\\b" + } + }, + { + "pattern": { + "name": "Discordbottoken - 2", + "regex": "(?:discord).{0,40}\\b([0-9]{17})\\b" + } + }, + { + "pattern": { + "name": "Discordwebhook", + "regex": "(https:\\/\\/discord.com\\/api\\/webhooks\\/[0-9]{18}\\/[0-9a-zA-Z-]{68})" + } + }, + { + "pattern": { + "name": "Ditto", + "regex": "(?:ditto).{0,40}\\b([a-z0-9]{8}\\-[a-z0-9]{4}\\-[a-z0-9]{4}\\-[a-z0-9]{4}\\-[a-z0-9]{12}\\.[a-z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Dnscheck - 1", + "regex": "(?:dnscheck).{0,40}\\b([a-z0-9A-Z-]{36})\\b" + } + }, + { + "pattern": { + "name": "Dnscheck - 2", + "regex": "(?:dnscheck).{0,40}\\b([a-z0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Documo", + "regex": "\\b(ey[a-zA-Z0-9]{34}.ey[a-zA-Z0-9]{154}.[a-zA-Z0-9_-]{43})\\b" + } + }, + { + "pattern": { + "name": "Doppler", + "regex": "\\b(dp\\.pt\\.[a-zA-Z0-9]{43})\\b" + } + }, + { + "pattern": { + "name": "Dotmailer - 1", + "regex": "(?:dotmailer).{0,40}\\b(apiuser-[a-z0-9]{12}@apiconnector.com)\\b" + } + }, + { + "pattern": { + "name": "Dotmailer - 2", + "regex": "(?:dotmailer).{0,40}\\b([a-zA-Z0-9\\S]{8,24})\\b" + } + }, + { + "pattern": { + "name": "Dovico", + "regex": "(?:dovico).{0,40}\\b([0-9a-z]{32}\\.[0-9a-z]{1,}\\b)" + } + }, + { + "pattern": { + "name": "Dronahq", + "regex": "(?:dronahq).{0,40}\\b([a-z0-9]{50})\\b" + } + }, + { + "pattern": { + "name": "Droneci", + "regex": "(?:droneci).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Dropbox", + "regex": "\\b(sl\\.[A-Za-z0-9\\-\\_]{130,140})\\b" + } + }, + { + "pattern": { + "name": "Dwolla", + "regex": "(?:dwolla).{0,40}\\b([a-zA-Z-0-9]{50})\\b" + } + }, + { + "pattern": { + "name": "Dynalist", + "regex": "(?:dynalist).{0,40}\\b([a-zA-Z0-9-_]{128})\\b" + } + }, + { + "pattern": { + "name": "Dynatrace token", + "regex": "dt0[a-zA-Z]{1}[0-9]{2}\\.[A-Z0-9]{24}\\.[A-Z0-9]{64}" + } + }, + { + "pattern": { + "name": "Dyspatch", + "regex": "(?:dyspatch).{0,40}\\b([A-Z0-9]{52})\\b" + } + }, + { + "pattern": { + "name": "EC", + "regex": "-----BEGIN EC PRIVATE KEY-----" + } + }, + { + "pattern": { + "name": "Eagleeyenetworks - 1", + "regex": "(?:eagleeyenetworks).{0,40}\\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\\b" + } + }, + { + "pattern": { + "name": "Eagleeyenetworks - 2", + "regex": "(?:eagleeyenetworks).{0,40}\\b([a-zA-Z0-9]{15})\\b" + } + }, + { + "pattern": { + "name": "Easyinsight - 1", + "regex": "(?:easyinsight|easy-insight).{0,40}\\b([a-zA-Z0-9]{20})\\b" + } + }, + { + "pattern": { + "name": "Easyinsight - 2", + "regex": "(?:easyinsight|easy-insight).{0,40}\\b([0-9Aa-zA-Z]{20})\\b" + } + }, + { + "pattern": { + "name": "Edamam - 1", + "regex": "(?:edamam).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Edamam - 2", + "regex": "(?:edamam).{0,40}\\b([0-9a-z]{8})\\b" + } + }, + { + "pattern": { + "name": "Edenai", + "regex": "(?:edenai).{0,40}\\b([a-zA-Z0-9]{36}.[a-zA-Z0-9]{92}.[a-zA-Z0-9_]{43})\\b" + } + }, + { + "pattern": { + "name": "Eightxeight - 1", + "regex": "(?:8x8).{0,40}\\b([a-zA-Z0-9_]{18,30})\\b" + } + }, + { + "pattern": { + "name": "Eightxeight - 2", + "regex": "(?:8x8).{0,40}\\b([a-zA-Z0-9]{43})\\b" + } + }, + { + "pattern": { + "name": "Elasticemail", + "regex": "(?:elastic).{0,40}\\b([A-Za-z0-9_-]{96})\\b" + } + }, + { + "pattern": { + "name": "Enablex - 1", + "regex": "(?:enablex).{0,40}\\b([a-zA-Z0-9]{36})\\b" + } + }, + { + "pattern": { + "name": "Enablex - 2", + "regex": "(?:enablex).{0,40}\\b([a-z0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Enigma", + "regex": "(?:enigma).{0,40}\\b([a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Ethplorer", + "regex": "(?:ethplorer).{0,40}\\b([a-z0-9A-Z-]{22})\\b" + } + }, + { + "pattern": { + "name": "Etsyapikey", + "regex": "(?:etsy).{0,40}\\b([a-zA-Z-0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Everhour", + "regex": "(?:everhour).{0,40}\\b([0-9Aa-f]{4}-[0-9a-f]{4}-[0-9a-f]{6}-[0-9a-f]{6}-[0-9a-f]{8})\\b" + } + }, + { + "pattern": { + "name": "Exchangerateapi", + "regex": "(?:exchangerate).{0,40}\\b([a-z0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Exchangeratesapi", + "regex": "(?:exchangerates).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "FCM Server Key", + "regex": "AAAA[a-zA-Z0-9_-]{7}:[a-zA-Z0-9_-]{140}" + } + }, + { + "pattern": { + "name": "FCM_server_key", + "regex": "(AAAA[a-zA-Z0-9_-]{7}:[a-zA-Z0-9_-]{140})" + } + }, + { + "pattern": { + "name": "Facebook Access Token", + "regex": "EAACEdEose0cBA[0-9A-Za-z]+" + } + }, + { + "pattern": { + "name": "Facebook OAuth", + "regex": "[fF][aA][cC][eE][bB][oO][oO][kK].*['|\"][0-9a-f]{32}['|\"]" + } + }, + { + "pattern": { + "name": "Facebookoauth", + "regex": "(?:facebook).{0,40}\\b([A-Za-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Faceplusplus", + "regex": "(?:faceplusplus).{0,40}\\b([0-9a-zA-Z_-]{32})\\b" + } + }, + { + "pattern": { + "name": "Fakejson", + "regex": "(?:fakejson).{0,40}\\b([a-zA-Z0-9]{22})\\b" + } + }, + { + "pattern": { + "name": "Fastforex", + "regex": "(?:fastforex).{0,40}\\b([a-z0-9-]{28})\\b" + } + }, + { + "pattern": { + "name": "Fastlypersonaltoken", + "regex": "(?:fastly).{0,40}\\b([A-Za-z0-9_-]{32})\\b" + } + }, + { + "pattern": { + "name": "Feedier", + "regex": "(?:feedier).{0,40}\\b([a-z0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Fetchrss", + "regex": "(?:fetchrss).{0,40}\\b([0-9A-Za-z.]{40})\\b" + } + }, + { + "pattern": { + "name": "Figmapersonalaccesstoken", + "regex": "(?:figma).{0,40}\\b([0-9]{6}-[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\\b" + } + }, + { + "pattern": { + "name": "Fileio", + "regex": "(?:fileio).{0,40}\\b([A-Z0-9.-]{39})\\b" + } + }, + { + "pattern": { + "name": "Finage", + "regex": "\\b(API_KEY[0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Financialmodelingprep", + "regex": "(?:financialmodelingprep).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Findl", + "regex": "(?:findl).{0,40}\\b([a-z0-9]{8}\\-[a-z0-9]{4}\\-[a-z0-9]{4}\\-[a-z0-9]{4}\\-[a-z0-9]{12})\\b" + } + }, + { + "pattern": { + "name": "Finnhub", + "regex": "(?:finnhub).{0,40}\\b([0-9a-z]{20})\\b" + } + }, + { + "pattern": { + "name": "Firebase Database Detect - 1", + "regex": "[a-z0-9.-]+\\.firebaseio\\.com" + } + }, + { + "pattern": { + "name": "Firebase Database Detect - 2", + "regex": "[a-z0-9.-]+\\.firebaseapp\\.com" + } + }, + { + "pattern": { + "name": "Fixerio", + "regex": "(?:fixer).{0,40}\\b([A-Za-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Flatio", + "regex": "(?:flat).{0,40}\\b([0-9a-z]{128})\\b" + } + }, + { + "pattern": { + "name": "Fleetbase", + "regex": "\\b(flb_live_[0-9a-zA-Z]{20})\\b" + } + }, + { + "pattern": { + "name": "Flickr", + "regex": "(?:flickr).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Flightapi", + "regex": "(?:flightapi).{0,40}\\b([a-z0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Flightstats - 1", + "regex": "(?:flightstats).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Flightstats - 2", + "regex": "(?:flightstats).{0,40}\\b([0-9a-z]{8})\\b" + } + }, + { + "pattern": { + "name": "Float", + "regex": "(?:float).{0,40}\\b([a-zA-Z0-9-._+=]{59,60})\\b" + } + }, + { + "pattern": { + "name": "Flowflu - 2", + "regex": "(?:flowflu).{0,40}\\b([a-zA-Z0-9]{51})\\b" + } + }, + { + "pattern": { + "name": "Flutterwave", + "regex": "\\b(FLWSECK-[0-9a-z]{32}-X)\\b" + } + }, + { + "pattern": { + "name": "Fmfw - 1", + "regex": "(?:fmfw).{0,40}\\b([a-zA-Z0-9-]{32})\\b" + } + }, + { + "pattern": { + "name": "Fmfw - 2", + "regex": "(?:fmfw).{0,40}\\b([a-zA-Z0-9_-]{32})\\b" + } + }, + { + "pattern": { + "name": "Formbucket", + "regex": "(?:formbucket).{0,40}\\b([0-9A-Za-z]{1,}.[0-9A-Za-z]{1,}\\.[0-9A-Z-a-z\\-_]{1,})" + } + }, + { + "pattern": { + "name": "Formio", + "regex": "(?:formio).{0,40}\\b(eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\\.[0-9A-Za-z]{310}\\.[0-9A-Z-a-z\\-_]{43}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Foursquare", + "regex": "(?:foursquare).{0,40}\\b([0-9A-Z]{48})\\b" + } + }, + { + "pattern": { + "name": "Frameio", + "regex": "\\b(fio-u-[0-9a-zA-Z_-]{64})\\b" + } + }, + { + "pattern": { + "name": "Freshbooks - 1", + "regex": "(?:freshbooks).{0,40}\\b([0-9a-z]{64})\\b" + } + }, + { + "pattern": { + "name": "Freshbooks - 2", + "regex": "(?:freshbooks).{0,40}\\b(https://www.[0-9A-Za-z_-]{1,}.com)\\b" + } + }, + { + "pattern": { + "name": "Freshdesk - 1", + "regex": "(?:freshdesk).{0,40}\\b([0-9A-Za-z]{20})\\b" + } + }, + { + "pattern": { + "name": "Freshdesk - 2", + "regex": "\\b([0-9a-z-]{1,}.freshdesk.com)\\b" + } + }, + { + "pattern": { + "name": "Front", + "regex": "(?:front).{0,40}\\b([0-9a-zA-Z]{36}.[0-9a-zA-Z\\.\\-\\_]{188,244})\\b" + } + }, + { + "pattern": { + "name": "Fulcrum", + "regex": "(?:fulcrum).{0,40}\\b([a-z0-9]{80})\\b" + } + }, + { + "pattern": { + "name": "Fullstory", + "regex": "(?:fullstory).{0,40}\\b([a-zA-Z-0-9/+]{88})\\b" + } + }, + { + "pattern": { + "name": "Fusebill", + "regex": "(?:fusebill).{0,40}\\b([a-zA-Z0-9]{88})\\b" + } + }, + { + "pattern": { + "name": "Fxmarket", + "regex": "(?:fxmarket).{0,40}\\b([0-9Aa-zA-Z-_=]{20})\\b" + } + }, + { + "pattern": { + "name": "Gcp", + "regex": "\\{[^{]+auth_provider_x509_cert_url[^}]+\\}" + } + }, + { + "pattern": { + "name": "Geckoboard", + "regex": "(?:geckoboard).{0,40}\\b([a-zA-Z0-9]{44})\\b" + } + }, + { + "pattern": { + "name": "Generic - 1376", + "regex": "jdbc:mysql(=| =|:| :)" + } + }, + { + "pattern": { + "name": "Generic - 1688", + "regex": "TOKEN[\\\\-|_|A-Z0-9]*(\\'|\\\")?(:|=)(\\'|\\\")?[\\\\-|_|A-Z0-9]{10}" + } + }, + { + "pattern": { + "name": "Generic - 1689", + "regex": "API[\\\\-|_|A-Z0-9]*(\\'|\\\")?(:|=)(\\'|\\\")?[\\\\-|_|A-Z0-9]{10}" + } + }, + { + "pattern": { + "name": "Generic - 1691", + "regex": "SECRET[\\\\-|_|A-Z0-9]*(\\'|\\\")?(:|=)(\\'|\\\")?[\\\\-|_|A-Z0-9]{10}" + } + }, + { + "pattern": { + "name": "Generic - 1692", + "regex": "AUTHORIZATION[\\\\-|_|A-Z0-9]*(\\'|\\\")?(:|=)(\\'|\\\")?[\\\\-|_|A-Z0-9]{10}" + } + }, + { + "pattern": { + "name": "Generic - 1693", + "regex": "PASSWORD[\\\\-|_|A-Z0-9]*(\\'|\\\")?(:|=)(\\'|\\\")?[\\\\-|_|A-Z0-9]{10}" + } + }, + { + "pattern": { + "name": "Generic - 1695", + "regex": "(A|a)(P|p)(Ii)[\\-|_|A-Za-z0-9]*(\\''|\")?( )*(:|=)( )*(\\''|\")?[0-9A-Za-z\\-_]+(\\''|\")?" + } + }, + { + "pattern": { + "name": "Generic - 1700", + "regex": "BEGIN OPENSSH PRIVATE KEY" + } + }, + { + "pattern": { + "name": "Generic - 1701", + "regex": "BEGIN PRIVATE KEY" + } + }, + { + "pattern": { + "name": "Generic - 1702", + "regex": "BEGIN RSA PRIVATE KEY" + } + }, + { + "pattern": { + "name": "Generic - 1703", + "regex": "BEGIN DSA PRIVATE KEY" + } + }, + { + "pattern": { + "name": "Generic - 1704", + "regex": "BEGIN EC PRIVATE KEY" + } + }, + { + "pattern": { + "name": "Generic - 1705", + "regex": "BEGIN PGP PRIVATE KEY BLOCK" + } + }, + { + "pattern": { + "name": "Generic - 1707", + "regex": "[a-z0-9.-]+\\.s3-[a-z0-9-]\\.amazonaws\\.com" + } + }, + { + "pattern": { + "name": "Generic - 1708", + "regex": "[a-z0-9.-]+\\.s3-website[.-](eu|ap|us|ca|sa|cn)" + } + }, + { + "pattern": { + "name": "Generic - 1710", + "regex": "algolia_api_key" + } + }, + { + "pattern": { + "name": "Generic - 1711", + "regex": "asana_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1713", + "regex": "azure_tenant" + } + }, + { + "pattern": { + "name": "Generic - 1714", + "regex": "bitly_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1715", + "regex": "branchio_secret" + } + }, + { + "pattern": { + "name": "Generic - 1716", + "regex": "browserstack_access_key" + } + }, + { + "pattern": { + "name": "Generic - 1717", + "regex": "buildkite_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1718", + "regex": "comcast_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1719", + "regex": "datadog_api_key" + } + }, + { + "pattern": { + "name": "Generic - 1720", + "regex": "deviantart_secret" + } + }, + { + "pattern": { + "name": "Generic - 1721", + "regex": "deviantart_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1722", + "regex": "dropbox_api_token" + } + }, + { + "pattern": { + "name": "Generic - 1723", + "regex": "facebook_appsecret" + } + }, + { + "pattern": { + "name": "Generic - 1724", + "regex": "facebook_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1725", + "regex": "firebase_custom_token" + } + }, + { + "pattern": { + "name": "Generic - 1726", + "regex": "firebase_id_token" + } + }, + { + "pattern": { + "name": "Generic - 1727", + "regex": "github_client" + } + }, + { + "pattern": { + "name": "Generic - 1728", + "regex": "github_ssh_key" + } + }, + { + "pattern": { + "name": "Generic - 1730", + "regex": "gitlab_private_token" + } + }, + { + "pattern": { + "name": "Generic - 1731", + "regex": "google_cm" + } + }, + { + "pattern": { + "name": "Generic - 1732", + "regex": "google_maps_key" + } + }, + { + "pattern": { + "name": "Generic - 1733", + "regex": "heroku_api_key" + } + }, + { + "pattern": { + "name": "Generic - 1734", + "regex": "instagram_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1735", + "regex": "mailchimp_api_key" + } + }, + { + "pattern": { + "name": "Generic - 1736", + "regex": "mailgun_api_key" + } + }, + { + "pattern": { + "name": "Generic - 1737", + "regex": "mailjet" + } + }, + { + "pattern": { + "name": "Generic - 1738", + "regex": "mapbox_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1739", + "regex": "pagerduty_api_token" + } + }, + { + "pattern": { + "name": "Generic - 1740", + "regex": "paypal_key_sb" + } + }, + { + "pattern": { + "name": "Generic - 1741", + "regex": "paypal_key_live" + } + }, + { + "pattern": { + "name": "Generic - 1742", + "regex": "paypal_token_sb" + } + }, + { + "pattern": { + "name": "Generic - 1743", + "regex": "paypal_token_live" + } + }, + { + "pattern": { + "name": "Generic - 1744", + "regex": "pendo_integration_key" + } + }, + { + "pattern": { + "name": "Generic - 1745", + "regex": "salesforce_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1746", + "regex": "saucelabs_ukey" + } + }, + { + "pattern": { + "name": "Generic - 1747", + "regex": "sendgrid_api_key" + } + }, + { + "pattern": { + "name": "Generic - 1748", + "regex": "slack_api_token" + } + }, + { + "pattern": { + "name": "Generic - 1749", + "regex": "slack_webhook" + } + }, + { + "pattern": { + "name": "Generic - 1750", + "regex": "square_secret" + } + }, + { + "pattern": { + "name": "Generic - 1751", + "regex": "square_auth_token" + } + }, + { + "pattern": { + "name": "Generic - 1752", + "regex": "travisci_api_token" + } + }, + { + "pattern": { + "name": "Generic - 1753", + "regex": "twilio_sid_token" + } + }, + { + "pattern": { + "name": "Generic - 1754", + "regex": "twitter_api_secret" + } + }, + { + "pattern": { + "name": "Generic - 1755", + "regex": "twitter_bearer_token" + } + }, + { + "pattern": { + "name": "Generic - 1756", + "regex": "spotify_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1757", + "regex": "stripe_key_live" + } + }, + { + "pattern": { + "name": "Generic - 1758", + "regex": "wakatime_api_key" + } + }, + { + "pattern": { + "name": "Generic - 1759", + "regex": "wompi_auth_bearer_sb" + } + }, + { + "pattern": { + "name": "Generic - 1760", + "regex": "wompi_auth_bearer_live" + } + }, + { + "pattern": { + "name": "Generic - 1761", + "regex": "wpengine_api_key" + } + }, + { + "pattern": { + "name": "Generic - 1762", + "regex": "zapier_webhook" + } + }, + { + "pattern": { + "name": "Generic - 1763", + "regex": "zendesk_access_token" + } + }, + { + "pattern": { + "name": "Generic - 1764", + "regex": "ssh-rsa" + } + }, + { + "pattern": { + "name": "Generic - 1765", + "regex": "s3-[a-z0-9-]+\\.amazonaws\\.com/[a-z0-9._-]+" + } + }, + { + "pattern": { + "name": "Generic Secret", + "regex": "[sS][eE][cC][rR][eE][tT].*['|\"][0-9a-zA-Z]{32,45}['|\"]" + } + }, + { + "pattern": { + "name": "Generic webhook secret", + "regex": "(webhook).+(secret|token|key).+" + } + }, + { + "pattern": { + "name": "Gengo", + "regex": "(?:gengo).{0,40}([ ]{0,1}[0-9a-zA-Z\\[\\]\\-\\(\\)\\{\\}|_^@$=~]{64}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Geoapify", + "regex": "(?:geoapify).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Geocode", + "regex": "(?:geocode).{0,40}\\b([a-z0-9]{28})\\b" + } + }, + { + "pattern": { + "name": "Geocodify", + "regex": "(?:geocodify).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Geocodio - 2", + "regex": "(?:geocod).{0,40}\\b([a-z0-9]{39})\\b" + } + }, + { + "pattern": { + "name": "Geoipifi", + "regex": "(?:ipifi).{0,40}\\b([a-z0-9A-Z_]{32})\\b" + } + }, + { + "pattern": { + "name": "Getemail", + "regex": "(?:getemail).{0,40}\\b([a-zA-Z0-9-]{20})\\b" + } + }, + { + "pattern": { + "name": "Getemails - 1", + "regex": "(?:getemails).{0,40}\\b([a-z0-9-]{26})\\b" + } + }, + { + "pattern": { + "name": "Getemails - 2", + "regex": "(?:getemails).{0,40}\\b([a-z0-9-]{18})\\b" + } + }, + { + "pattern": { + "name": "Getgeoapi", + "regex": "(?:getgeoapi).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Getgist", + "regex": "(?:getgist).{0,40}\\b([a-z0-9A-Z+=]{68})" + } + }, + { + "pattern": { + "name": "Getsandbox - 1", + "regex": "(?:getsandbox).{0,40}\\b([a-z0-9-]{40})\\b" + } + }, + { + "pattern": { + "name": "Getsandbox - 2", + "regex": "(?:getsandbox).{0,40}\\b([a-z0-9-]{15,30})\\b" + } + }, + { + "pattern": { + "name": "GitHub", + "regex": "[gG][iI][tT][hH][uU][bB].*['|\"][0-9a-zA-Z]{35,40}['|\"]" + } + }, + { + "pattern": { + "name": "Github - 2", + "regex": "\\b((?:ghp|gho|ghu|ghs|ghr)_[a-zA-Z0-9]{36,255}\\b)" + } + }, + { + "pattern": { + "name": "Github App Token", + "regex": "(ghu|ghs)_[0-9a-zA-Z]{36}" + } + }, + { + "pattern": { + "name": "Github OAuth Access Token", + "regex": "gho_[0-9a-zA-Z]{36}" + } + }, + { + "pattern": { + "name": "Github Personal Access Token", + "regex": "ghp_[0-9a-zA-Z]{36}" + } + }, + { + "pattern": { + "name": "Github Refresh Token", + "regex": "ghr_[0-9a-zA-Z]{76}" + } + }, + { + "pattern": { + "name": "Github_old", + "regex": "(?:github)[^\\.].{0,40}[ =:'\"]+([a-f0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Githubapp - 1", + "regex": "(?:github).{0,40}\\b([0-9]{6})\\b" + } + }, + { + "pattern": { + "name": "Githubapp - 2", + "regex": "(?:github).{0,40}(-----BEGIN RSA PRIVATE KEY-----\\s[A-Za-z0-9+\\/\\s]*\\s-----END RSA PRIVATE KEY-----)" + } + }, + { + "pattern": { + "name": "Gitlab", + "regex": "(?:gitlab).{0,40}\\b([a-zA-Z0-9\\-=_]{20,22})\\b" + } + }, + { + "pattern": { + "name": "Gitlabv2", + "regex": "\\b(glpat-[a-zA-Z0-9\\-=_]{20,22})\\b" + } + }, + { + "pattern": { + "name": "Gitter", + "regex": "(?:gitter).{0,40}\\b([a-z0-9-]{40})\\b" + } + }, + { + "pattern": { + "name": "Glassnode", + "regex": "(?:glassnode).{0,40}\\b([0-9A-Za-z]{27})\\b" + } + }, + { + "pattern": { + "name": "Gocanvas - 1", + "regex": "(?:gocanvas).{0,40}\\b([0-9A-Za-z/+]{43}=[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Gocanvas - 2", + "regex": "(?:gocanvas).{0,40}\\b([\\w\\.-]+@[\\w-]+\\.[\\w\\.-]{2,5})\\b" + } + }, + { + "pattern": { + "name": "Gocardless", + "regex": "\\b(live_[0-9A-Za-z\\_\\-]{40}[ \"'\\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Goodday", + "regex": "(?:goodday).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Google (GCP) Service Account", + "regex": "\"type\": \"service_account\"" + } + }, + { + "pattern": { + "name": "Google API Key", + "regex": "AIza[0-9a-z-_]{35}" + } + }, + { + "pattern": { + "name": "Google Calendar URI", + "regex": "https://www\\.google\\.com/calendar/embed\\?src=[A-Za-z0-9%@&;=\\-_\\./]+" + } + }, + { + "pattern": { + "name": "Google OAuth Access Token", + "regex": "ya29\\.[0-9A-Za-z\\-_]+" + } + }, + { + "pattern": { + "name": "Graphcms - 1", + "regex": "(?:graph).{0,40}\\b([a-z0-9]{25})\\b" + } + }, + { + "pattern": { + "name": "Graphcms - 2", + "regex": "\\b(ey[a-zA-Z0-9]{73}.ey[a-zA-Z0-9]{365}.[a-zA-Z0-9_-]{683})\\b" + } + }, + { + "pattern": { + "name": "Graphhopper", + "regex": "(?:graphhopper).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Groovehq", + "regex": "(?:groove).{0,40}\\b([a-z0-9A-Z]{64})" + } + }, + { + "pattern": { + "name": "Guru - 1", + "regex": "(?:guru).{0,40}\\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\\b" + } + }, + { + "pattern": { + "name": "Guru - 2", + "regex": "(?:guru).{0,40}\\b([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\\b" + } + }, + { + "pattern": { + "name": "Gyazo", + "regex": "(?:gyazo).{0,40}\\b([0-9A-Za-z-]{43})\\b" + } + }, + { + "pattern": { + "name": "Happi", + "regex": "(?:happi).{0,40}\\b([a-zA-Z0-9]{56})" + } + }, + { + "pattern": { + "name": "Happyscribe", + "regex": "(?:happyscribe).{0,40}\\b([0-9a-zA-Z]{24})\\b" + } + }, + { + "pattern": { + "name": "Harvest - 1", + "regex": "(?:harvest).{0,40}\\b([a-z0-9A-Z._]{97})\\b" + } + }, + { + "pattern": { + "name": "Harvest - 2", + "regex": "(?:harvest).{0,40}\\b([0-9]{4,9})\\b" + } + }, + { + "pattern": { + "name": "Hellosign", + "regex": "(?:hellosign).{0,40}\\b([a-zA-Z-0-9/+]{64})\\b" + } + }, + { + "pattern": { + "name": "Helpcrunch", + "regex": "(?:helpcrunch).{0,40}\\b([a-zA-Z-0-9+/=]{328})" + } + }, + { + "pattern": { + "name": "Helpscout", + "regex": "(?:helpscout).{0,40}\\b([A-Za-z0-9]{56})\\b" + } + }, + { + "pattern": { + "name": "Hereapi", + "regex": "(?:hereapi).{0,40}\\b([a-zA-Z0-9\\S]{43})\\b" + } + }, + { + "pattern": { + "name": "Heroku", + "regex": "(?:heroku).{0,40}\\b([0-9Aa-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Hive - 1", + "regex": "(?:hive).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Hive - 2", + "regex": "(?:hive).{0,40}\\b([0-9A-Za-z]{17})\\b" + } + }, + { + "pattern": { + "name": "Hiveage", + "regex": "(?:hiveage).{0,40}\\b([0-9A-Za-z\\_\\-]{20})\\b" + } + }, + { + "pattern": { + "name": "Holidayapi", + "regex": "(?:holidayapi).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Host", + "regex": "(?:host).{0,40}\\b([a-z0-9]{14})\\b" + } + }, + { + "pattern": { + "name": "Html2pdf", + "regex": "(?:html2pdf).{0,40}\\b([a-zA-Z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Hubspotapikey", + "regex": "(?:hubspot).{0,40}\\b([A-Za-z0-9]{8}\\-[A-Za-z0-9]{4}\\-[A-Za-z0-9]{4}\\-[A-Za-z0-9]{4}\\-[A-Za-z0-9]{12})\\b" + } + }, + { + "pattern": { + "name": "Humanity", + "regex": "(?:humanity).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Hunter", + "regex": "(?:hunter).{0,40}\\b([a-z0-9_-]{40})\\b" + } + }, + { + "pattern": { + "name": "Hypertrack - 1", + "regex": "(?:hypertrack).{0,40}\\b([0-9a-zA-Z\\_\\-]{54})\\b" + } + }, + { + "pattern": { + "name": "Hypertrack - 2", + "regex": "(?:hypertrack).{0,40}\\b([0-9a-zA-Z\\_\\-]{27})\\b" + } + }, + { + "pattern": { + "name": "Ibmclouduserkey", + "regex": "(?:ibm).{0,40}\\b([A-Za-z0-9_-]{44})\\b" + } + }, + { + "pattern": { + "name": "Iconfinder", + "regex": "(?:iconfinder).{0,40}\\b([a-zA-Z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Iexcloud", + "regex": "(?:iexcloud).{0,40}\\b([a-z0-9_]{35})\\b" + } + }, + { + "pattern": { + "name": "Imagekit", + "regex": "(?:imagekit).{0,40}\\b([a-zA-Z0-9_=]{36})" + } + }, + { + "pattern": { + "name": "Imagga", + "regex": "(?:imagga).{0,40}\\b([a-z0-9A-Z=]{72})" + } + }, + { + "pattern": { + "name": "Impala", + "regex": "(?:impala).{0,40}\\b([0-9A-Za-z_]{46})\\b" + } + }, + { + "pattern": { + "name": "Insightly", + "regex": "(?:insightly).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Integromat", + "regex": "(?:integromat).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Intercom", + "regex": "(?:intercom).{0,40}\\b([a-zA-Z0-9\\W\\S]{59}\\=)" + } + }, + { + "pattern": { + "name": "Intrinio", + "regex": "(?:intrinio).{0,40}\\b([a-zA-Z0-9]{44})\\b" + } + }, + { + "pattern": { + "name": "Invoiceocean - 1", + "regex": "(?:invoiceocean).{0,40}\\b([0-9A-Za-z]{20})\\b" + } + }, + { + "pattern": { + "name": "Invoiceocean - 2", + "regex": "\\b([0-9a-z]{1,}.invoiceocean.com)\\b" + } + }, + { + "pattern": { + "name": "Ipapi", + "regex": "(?:ipapi).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Ipgeolocation", + "regex": "(?:ipgeolocation).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Ipify", + "regex": "(?:ipify).{0,40}\\b([a-zA-Z0-9_-]{32})\\b" + } + }, + { + "pattern": { + "name": "Ipinfodb", + "regex": "(?:ipinfodb).{0,40}\\b([a-z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Ipquality", + "regex": "(?:ipquality).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Ipstack", + "regex": "(?:ipstack).{0,40}\\b([a-fA-f0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "JDBC Connection String", + "regex": "jdbc:[a-z:]+://[A-Za-z0-9\\.\\-_:;=/@?,&]+" + } + }, + { + "pattern": { + "name": "Jiratoken - 1", + "regex": "(?:jira).{0,40}\\b([a-zA-Z-0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Jiratoken - 2", + "regex": "(?:jira).{0,40}\\b([a-zA-Z-0-9]{5,24}\\@[a-zA-Z-0-9]{3,16}\\.com)\\b" + } + }, + { + "pattern": { + "name": "Jiratoken - 3", + "regex": "(?:jira).{0,40}\\b([a-zA-Z-0-9]{5,24}\\.[a-zA-Z-0-9]{3,16}\\.[a-zA-Z-0-9]{3,16})\\b" + } + }, + { + "pattern": { + "name": "Jotform", + "regex": "(?:jotform).{0,40}\\b([0-9Aa-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Jumpcloud", + "regex": "(?:jumpcloud).{0,40}\\b([a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Juro", + "regex": "(?:juro).{0,40}\\b([a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Kanban - 1", + "regex": "(?:kanban).{0,40}\\b([0-9A-Z]{12})\\b" + } + }, + { + "pattern": { + "name": "Kanban - 2", + "regex": "\\b([0-9a-z]{1,}.kanbantool.com)\\b" + } + }, + { + "pattern": { + "name": "Karmacrm", + "regex": "(?:karma).{0,40}\\b([a-zA-Z0-9]{20})\\b" + } + }, + { + "pattern": { + "name": "Keenio - 1", + "regex": "(?:keen).{0,40}\\b([0-9a-z]{24})\\b" + } + }, + { + "pattern": { + "name": "Keenio - 2", + "regex": "(?:keen).{0,40}\\b([0-9A-Z]{64})\\b" + } + }, + { + "pattern": { + "name": "Kickbox", + "regex": "(?:kickbox).{0,40}\\b([a-zA-Z0-9_]+[a-zA-Z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Klipfolio", + "regex": "(?:klipfolio).{0,40}\\b([0-9a-f]{40})\\b" + } + }, + { + "pattern": { + "name": "Kontent", + "regex": "(?:kontent).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Kraken - 1", + "regex": "(?:kraken).{0,40}\\b([0-9A-Za-z\\/\\+=]{56}[ \"'\\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Kraken - 2", + "regex": "(?:kraken).{0,40}\\b([0-9A-Za-z\\/\\+=]{86,88}[ \"'\\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Kucoin - 1", + "regex": "(?:kucoin).{0,40}([ \\r\\n]{1}[!-~]{7,32}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Kucoin - 2", + "regex": "(?:kucoin).{0,40}\\b([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Kucoin - 3", + "regex": "(?:kucoin).{0,40}\\b([0-9a-f]{24})\\b" + } + }, + { + "pattern": { + "name": "Kylas", + "regex": "(?:kylas).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Languagelayer", + "regex": "(?:languagelayer).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Lastfm", + "regex": "(?:lastfm).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Launchdarkly", + "regex": "(?:launchdarkly).{0,40}\\b([a-z0-9-]{40})\\b" + } + }, + { + "pattern": { + "name": "Leadfeeder", + "regex": "(?:leadfeeder).{0,40}\\b([a-zA-Z0-9-]{43})\\b" + } + }, + { + "pattern": { + "name": "Lendflow", + "regex": "(?:lendflow).{0,40}\\b([a-zA-Z0-9]{36}\\.[a-zA-Z0-9]{235}\\.[a-zA-Z0-9]{32}\\-[a-zA-Z0-9]{47}\\-[a-zA-Z0-9_]{162}\\-[a-zA-Z0-9]{42}\\-[a-zA-Z0-9_]{40}\\-[a-zA-Z0-9_]{66}\\-[a-zA-Z0-9_]{59}\\-[a-zA-Z0-9]{7}\\-[a-zA-Z0-9_]{220})\\b" + } + }, + { + "pattern": { + "name": "Lessannoyingcrm", + "regex": "(?:less).{0,40}\\b([a-zA-Z0-9-]{57})\\b" + } + }, + { + "pattern": { + "name": "Lexigram", + "regex": "(?:lexigram).{0,40}\\b([a-zA-Z0-9\\S]{301})\\b" + } + }, + { + "pattern": { + "name": "Linearapi", + "regex": "\\b(lin_api_[0-9A-Za-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Linemessaging", + "regex": "(?:line).{0,40}\\b([A-Za-z0-9+/]{171,172})\\b" + } + }, + { + "pattern": { + "name": "Linenotify", + "regex": "(?:linenotify).{0,40}\\b([0-9A-Za-z]{43})\\b" + } + }, + { + "pattern": { + "name": "Linkpreview", + "regex": "(?:linkpreview).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Liveagent", + "regex": "(?:liveagent).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Livestorm", + "regex": "(?:livestorm).{0,40}\\b(eyJhbGciOiJIUzI1NiJ9\\.eyJhdWQiOiJhcGkubGl2ZXN0b3JtLmNvIiwianRpIjoi[0-9A-Z-a-z]{134}\\.[0-9A-Za-z\\-\\_]{43}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Locationiq", + "regex": "\\b(pk\\.[a-zA-Z-0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Loginradius", + "regex": "(?:loginradius).{0,40}\\b([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Lokalisetoken", + "regex": "(?:lokalise).{0,40}\\b([a-z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Loyverse", + "regex": "(?:loyverse).{0,40}\\b([0-9-a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Luno - 1", + "regex": "(?:luno).{0,40}\\b([a-z0-9]{13})\\b" + } + }, + { + "pattern": { + "name": "Luno - 2", + "regex": "(?:luno).{0,40}\\b([a-zA-Z0-9_-]{43})\\b" + } + }, + { + "pattern": { + "name": "M3o", + "regex": "(?:m3o).{0,40}\\b([0-9A-Za-z]{48})\\b" + } + }, + { + "pattern": { + "name": "Macaddress", + "regex": "(?:macaddress).{0,40}\\b([a-zA-Z0-9_]{32})\\b" + } + }, + { + "pattern": { + "name": "Madkudu", + "regex": "(?:madkudu).{0,40}\\b([0-9a-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Magnetic", + "regex": "(?:magnetic).{0,40}\\b([0-9Aa-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\\b" + } + }, + { + "pattern": { + "name": "MailChimp API Key", + "regex": "[0-9a-f]{32}-us[0-9]{1,2}" + } + }, + { + "pattern": { + "name": "Mailboxlayer", + "regex": "(?:mailboxlayer).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Mailerlite", + "regex": "(?:mailerlite).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Mailgun - 2", + "regex": "(?:mailgun).{0,40}\\b([a-zA-Z-0-9]{72})\\b" + } + }, + { + "pattern": { + "name": "Mailgun API Key - 1", + "regex": "key-[0-9a-zA-Z]{32}" + } + }, + { + "pattern": { + "name": "Mailgun API key - 2", + "regex": "(mailgun|mg)[0-9a-z]{32}" + } + }, + { + "pattern": { + "name": "Mailjetbasicauth", + "regex": "(?:mailjet).{0,40}\\b([A-Za-z0-9]{87}\\=)" + } + }, + { + "pattern": { + "name": "Mailjetsms", + "regex": "(?:mailjet).{0,40}\\b([A-Za-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Mailmodo", + "regex": "(?:mailmodo).{0,40}\\b([A-Z0-9]{7}-[A-Z0-9]{7}-[A-Z0-9]{7}-[A-Z0-9]{7})\\b" + } + }, + { + "pattern": { + "name": "Mailsac", + "regex": "(?:mailsac).{0,40}\\b(k_[0-9A-Za-z]{36,})\\b" + } + }, + { + "pattern": { + "name": "Mandrill", + "regex": "(?:mandrill).{0,40}\\b([A-Za-z0-9_-]{22})\\b" + } + }, + { + "pattern": { + "name": "Manifest", + "regex": "(?:manifest).{0,40}\\b([a-zA-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Mapbox - 2", + "regex": "\\b(sk\\.[a-zA-Z-0-9\\.]{80,240})\\b" + } + }, + { + "pattern": { + "name": "Mapquest", + "regex": "(?:mapquest).{0,40}\\b([0-9A-Za-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Marketstack", + "regex": "(?:marketstack).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Mattermostpersonaltoken - 1", + "regex": "(?:mattermost).{0,40}\\b([A-Za-z0-9-_]{1,}.cloud.mattermost.com)\\b" + } + }, + { + "pattern": { + "name": "Mattermostpersonaltoken - 2", + "regex": "(?:mattermost).{0,40}\\b([a-z0-9]{26})\\b" + } + }, + { + "pattern": { + "name": "Mavenlink", + "regex": "(?:mavenlink).{0,40}\\b([0-9a-z]{64})\\b" + } + }, + { + "pattern": { + "name": "Maxmindlicense - 1", + "regex": "(?:maxmind|geoip).{0,40}\\b([0-9A-Za-z]{16})\\b" + } + }, + { + "pattern": { + "name": "Maxmindlicense - 2", + "regex": "(?:maxmind|geoip).{0,40}\\b([0-9]{2,7})\\b" + } + }, + { + "pattern": { + "name": "Meaningcloud", + "regex": "(?:meaningcloud).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Mediastack", + "regex": "(?:mediastack).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Meistertask", + "regex": "(?:meistertask).{0,40}\\b([a-zA-Z0-9]{43})\\b" + } + }, + { + "pattern": { + "name": "Mesibo", + "regex": "(?:mesibo).{0,40}\\b([0-9A-Za-z]{64})\\b" + } + }, + { + "pattern": { + "name": "Messagebird", + "regex": "(?:messagebird).{0,40}\\b([A-Za-z0-9_-]{25})\\b" + } + }, + { + "pattern": { + "name": "Metaapi - 1", + "regex": "(?:metaapi|meta-api).{0,40}\\b([0-9a-f]{64})\\b" + } + }, + { + "pattern": { + "name": "Metaapi - 2", + "regex": "(?:metaapi|meta-api).{0,40}\\b([0-9a-f]{24})\\b" + } + }, + { + "pattern": { + "name": "Metrilo", + "regex": "(?:metrilo).{0,40}\\b([a-z0-9]{16})\\b" + } + }, + { + "pattern": { + "name": "Microsoft Teams Webhook", + "regex": "https://outlook\\.office\\.com/webhook/[A-Za-z0-9\\-@]+/IncomingWebhook/[A-Za-z0-9\\-]+/[A-Za-z0-9\\-]+" + } + }, + { + "pattern": { + "name": "Microsoftteamswebhook", + "regex": "(https:\\/\\/[a-zA-Z-0-9]+\\.webhook\\.office\\.com\\/webhookb2\\/[a-zA-Z-0-9]{8}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{12}\\@[a-zA-Z-0-9]{8}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{12}\\/IncomingWebhook\\/[a-zA-Z-0-9]{32}\\/[a-zA-Z-0-9]{8}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{4}-[a-zA-Z-0-9]{12})" + } + }, + { + "pattern": { + "name": "Midise", + "regex": "midi-662b69edd2[a-zA-Z0-9]{54}" + } + }, + { + "pattern": { + "name": "Mindmeister", + "regex": "(?:mindmeister).{0,40}\\b([a-zA-Z0-9]{43})\\b" + } + }, + { + "pattern": { + "name": "Mite - 1", + "regex": "(?:mite).{0,40}\\b([0-9a-z]{16})\\b" + } + }, + { + "pattern": { + "name": "Mite - 2", + "regex": "\\b([0-9a-z-]{1,}.mite.yo.lk)\\b" + } + }, + { + "pattern": { + "name": "Mixmax", + "regex": "(?:mixmax).{0,40}\\b([a-zA-Z0-9_-]{36})\\b" + } + }, + { + "pattern": { + "name": "Mixpanel - 1", + "regex": "(?:mixpanel).{0,40}\\b([a-zA-Z0-9.-]{30,40})\\b" + } + }, + { + "pattern": { + "name": "Mixpanel - 2", + "regex": "(?:mixpanel).{0,40}\\b([a-zA-Z0-9-]{32})\\b" + } + }, + { + "pattern": { + "name": "Moderation", + "regex": "(?:moderation).{0,40}\\b([a-zA-Z0-9]{36}\\.[a-zA-Z0-9]{115}\\.[a-zA-Z0-9_]{43})\\b" + } + }, + { + "pattern": { + "name": "Monday", + "regex": "(?:monday).{0,40}\\b(ey[a-zA-Z0-9_.]{210,225})\\b" + } + }, + { + "pattern": { + "name": "Moonclerck", + "regex": "(?:moonclerck).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Moonclerk", + "regex": "(?:moonclerk).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Moosend", + "regex": "(?:moosend).{0,40}\\b([0-9Aa-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Mrticktock - 1", + "regex": "(?:mrticktock).{0,40}\\b([a-zA-Z0-9!=@#$%()_^]{1,50})" + } + }, + { + "pattern": { + "name": "Myfreshworks - 2", + "regex": "(?:freshworks).{0,40}\\b([a-z0-9A-Z-]{22})\\b" + } + }, + { + "pattern": { + "name": "Myintervals", + "regex": "(?:myintervals).{0,40}\\b([0-9a-z]{11})\\b" + } + }, + { + "pattern": { + "name": "Nasdaqdatalink", + "regex": "(?:nasdaq).{0,40}\\b([a-zA-Z0-9_-]{20})\\b" + } + }, + { + "pattern": { + "name": "Nethunt - 1", + "regex": "(?:nethunt).{0,40}\\b([a-zA-Z0-9.-@]{25,30})\\b" + } + }, + { + "pattern": { + "name": "Nethunt - 2", + "regex": "(?:nethunt).{0,40}\\b([a-z0-9-\\S]{36})\\b" + } + }, + { + "pattern": { + "name": "Netlify", + "regex": "(?:netlify).{0,40}\\b([A-Za-z0-9_-]{43,45})\\b" + } + }, + { + "pattern": { + "name": "Neutrinoapi - 1", + "regex": "(?:neutrinoapi).{0,40}\\b([a-zA-Z0-9]{48})\\b" + } + }, + { + "pattern": { + "name": "Neutrinoapi - 2", + "regex": "(?:neutrinoapi).{0,40}\\b([a-zA-Z0-9]{6,24})\\b" + } + }, + { + "pattern": { + "name": "Newrelic Admin API Key", + "regex": "NRAA-[a-f0-9]{27}" + } + }, + { + "pattern": { + "name": "Newrelic Insights API Key", + "regex": "NRI(?:I|Q)-[A-Za-z0-9\\-_]{32}" + } + }, + { + "pattern": { + "name": "Newrelic REST API Key", + "regex": "NRRA-[a-f0-9]{42}" + } + }, + { + "pattern": { + "name": "Newrelic Synthetics Location Key", + "regex": "NRSP-[a-z]{2}[0-9]{2}[a-f0-9]{31}" + } + }, + { + "pattern": { + "name": "Newrelicpersonalapikey", + "regex": "(?:newrelic).{0,40}\\b([A-Za-z0-9_\\.]{4}-[A-Za-z0-9_\\.]{42})\\b" + } + }, + { + "pattern": { + "name": "Newsapi", + "regex": "(?:newsapi).{0,40}\\b([a-z0-9]{32})" + } + }, + { + "pattern": { + "name": "Newscatcher", + "regex": "(?:newscatcher).{0,40}\\b([0-9A-Za-z_]{43})\\b" + } + }, + { + "pattern": { + "name": "Nexmoapikey - 1", + "regex": "(?:nexmo).{0,40}\\b([A-Za-z0-9_-]{8})\\b" + } + }, + { + "pattern": { + "name": "Nexmoapikey - 2", + "regex": "(?:nexmo).{0,40}\\b([A-Za-z0-9_-]{16})\\b" + } + }, + { + "pattern": { + "name": "Nftport", + "regex": "(?:nftport).{0,40}\\b([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\\b" + } + }, + { + "pattern": { + "name": "Nicereply", + "regex": "(?:nicereply).{0,40}\\b([0-9a-f]{40})\\b" + } + }, + { + "pattern": { + "name": "Nimble", + "regex": "(?:nimble).{0,40}\\b([a-zA-Z0-9]{30})\\b" + } + }, + { + "pattern": { + "name": "Nitro", + "regex": "(?:nitro).{0,40}\\b([0-9a-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Noticeable", + "regex": "(?:noticeable).{0,40}\\b([0-9a-zA-Z]{20})\\b" + } + }, + { + "pattern": { + "name": "Notion", + "regex": "\\b(secret_[A-Za-z0-9]{43})\\b" + } + }, + { + "pattern": { + "name": "Nozbeteams", + "regex": "(?:nozbe|nozbeteams).{0,40}\\b([0-9A-Za-z]{16}_[0-9A-Za-z\\-_]{64}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Numverify", + "regex": "(?:numverify).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Nutritionix - 1", + "regex": "(?:nutritionix).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Nutritionix - 2", + "regex": "(?:nutritionix).{0,40}\\b([a-z0-9]{8})\\b" + } + }, + { + "pattern": { + "name": "Nylas", + "regex": "(?:nylas).{0,40}\\b([0-9A-Za-z]{30})\\b" + } + }, + { + "pattern": { + "name": "Nytimes", + "regex": "(?:nytimes).{0,40}\\b([a-z0-9A-Z-]{32})\\b" + } + }, + { + "pattern": { + "name": "Oanda", + "regex": "(?:oanda).{0,40}\\b([a-zA-Z0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Omnisend", + "regex": "(?:omnisend).{0,40}\\b([a-z0-9A-Z-]{75})\\b" + } + }, + { + "pattern": { + "name": "Onedesk - 1", + "regex": "(?:onedesk).{0,40}\\b([a-zA-Z0-9!=@#$%^]{8,64})" + } + }, + { + "pattern": { + "name": "Onelogin - 2", + "regex": "secret[a-zA-Z0-9_' \"=]{0,20}([a-z0-9]{64})" + } + }, + { + "pattern": { + "name": "Onepagecrm - 1", + "regex": "(?:onepagecrm).{0,40}\\b([a-zA-Z0-9=]{44})" + } + }, + { + "pattern": { + "name": "Onepagecrm - 2", + "regex": "(?:onepagecrm).{0,40}\\b([a-z0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Onwaterio", + "regex": "(?:onwater).{0,40}\\b([a-zA-Z0-9_-]{20})\\b" + } + }, + { + "pattern": { + "name": "Oopspam", + "regex": "(?:oopspam).{0,40}\\b([a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Opencagedata", + "regex": "(?:opencagedata).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Opengraphr", + "regex": "(?:opengraphr).{0,40}\\b([0-9Aa-zA-Z]{80})\\b" + } + }, + { + "pattern": { + "name": "Openuv", + "regex": "(?:openuv).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Openweather", + "regex": "(?:openweather).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Optimizely", + "regex": "(?:optimizely).{0,40}\\b([0-9A-Za-z-:]{54})\\b" + } + }, + { + "pattern": { + "name": "Owlbot", + "regex": "(?:owlbot).{0,40}\\b([a-z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "PGP private key block", + "regex": "-----BEGIN PGP PRIVATE KEY BLOCK-----" + } + }, + { + "pattern": { + "name": "Pagerdutyapikey", + "regex": "(?:pagerduty).{0,40}\\b([a-z]{1}\\+[a-zA-Z]{9}\\-[a-z]{2}\\-[a-z0-9]{5})\\b" + } + }, + { + "pattern": { + "name": "Pandadoc", + "regex": "(?:pandadoc).{0,40}\\b([a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Pandascore", + "regex": "(?:pandascore).{0,40}([ \\r\\n]{0,1}[0-9A-Za-z\\-\\_]{51}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Paralleldots", + "regex": "(?:paralleldots).{0,40}\\b([0-9A-Za-z]{43})\\b" + } + }, + { + "pattern": { + "name": "Partnerstack", + "regex": "(?:partnerstack).{0,40}\\b([0-9A-Za-z]{64})\\b" + } + }, + { + "pattern": { + "name": "Passbase", + "regex": "(?:passbase).{0,40}\\b([a-zA-Z0-9]{128})\\b" + } + }, + { + "pattern": { + "name": "Password in URL", + "regex": "[a-zA-Z]{3,10}://[^/\\s:@]{3,20}:[^/\\s:@]{3,20}@.{1,100}[\"'\\s]" + } + }, + { + "pattern": { + "name": "Pastebin", + "regex": "(?:pastebin).{0,40}\\b([a-zA-Z0-9_]{32})\\b" + } + }, + { + "pattern": { + "name": "PayPal Braintree access token", + "regex": "access_token\\$production\\$[0-9a-z]{16}\\$[0-9a-f]{32}" + } + }, + { + "pattern": { + "name": "Paymoapp", + "regex": "(?:paymoapp).{0,40}\\b([a-zA-Z0-9]{44})\\b" + } + }, + { + "pattern": { + "name": "Paymongo", + "regex": "(?:paymongo).{0,40}\\b([a-zA-Z0-9_]{32})\\b" + } + }, + { + "pattern": { + "name": "Paypaloauth - 1", + "regex": "\\b([A-Za-z0-9_\\.]{7}-[A-Za-z0-9_\\.]{72})\\b" + } + }, + { + "pattern": { + "name": "Paypaloauth - 2", + "regex": "\\b([A-Za-z0-9_\\.]{69}-[A-Za-z0-9_\\.]{10})\\b" + } + }, + { + "pattern": { + "name": "Paystack", + "regex": "\\b(sk\\_[a-z]{1,}\\_[A-Za-z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Pdflayer", + "regex": "(?:pdflayer).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Pdfshift", + "regex": "(?:pdfshift).{0,40}\\b([0-9a-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Peopledatalabs", + "regex": "(?:peopledatalabs).{0,40}\\b([a-z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Pepipost", + "regex": "(?:pepipost|netcore).{0,40}\\b([a-zA-Z-0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Picatic API key", + "regex": "sk_live_[0-9a-z]{32}" + } + }, + { + "pattern": { + "name": "Pipedream", + "regex": "(?:pipedream).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Pipedrive", + "regex": "(?:pipedrive).{0,40}\\b([a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Pivotaltracker", + "regex": "(?:pivotal).{0,40}([a-z0-9]{32})" + } + }, + { + "pattern": { + "name": "Pixabay", + "regex": "(?:pixabay).{0,40}\\b([a-z0-9-]{34})\\b" + } + }, + { + "pattern": { + "name": "Plaidkey - 1", + "regex": "(?:plaid).{0,40}\\b([a-z0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Plaidkey - 2", + "regex": "(?:plaid).{0,40}\\b([a-z0-9]{30})\\b" + } + }, + { + "pattern": { + "name": "Planviewleankit - 1", + "regex": "(?:planviewleankit|planview).{0,40}\\b([0-9a-f]{128})\\b" + } + }, + { + "pattern": { + "name": "Planviewleankit - 2", + "regex": "(?:planviewleankit|planview).{0,40}(?:subdomain).\\b([a-zA-Z][a-zA-Z0-9.-]{1,23}[a-zA-Z0-9])\\b" + } + }, + { + "pattern": { + "name": "Planyo", + "regex": "(?:planyo).{0,40}\\b([0-9a-z]{62})\\b" + } + }, + { + "pattern": { + "name": "Plivo - 1", + "regex": "(?:plivo).{0,40}\\b([A-Za-z0-9_-]{40})\\b" + } + }, + { + "pattern": { + "name": "Plivo - 2", + "regex": "(?:plivo).{0,40}\\b([A-Z]{20})\\b" + } + }, + { + "pattern": { + "name": "Poloniex - 1", + "regex": "(?:poloniex).{0,40}\\b([0-9a-f]{128})\\b" + } + }, + { + "pattern": { + "name": "Poloniex - 2", + "regex": "(?:poloniex).{0,40}\\b([0-9A-Z]{8}-[0-9A-Z]{8}-[0-9A-Z]{8}-[0-9A-Z]{8})\\b" + } + }, + { + "pattern": { + "name": "Polygon", + "regex": "(?:polygon).{0,40}\\b([a-z0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Positionstack", + "regex": "(?:positionstack).{0,40}\\b([a-zA-Z0-9_]{32})\\b" + } + }, + { + "pattern": { + "name": "Postageapp", + "regex": "(?:postageapp).{0,40}\\b([0-9A-Za-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Posthog", + "regex": "\\b(phc_[a-zA-Z0-9_]{43})\\b" + } + }, + { + "pattern": { + "name": "Postman", + "regex": "\\b(PMAK-[a-zA-Z-0-9]{59})\\b" + } + }, + { + "pattern": { + "name": "Postmark", + "regex": "(?:postmark).{0,40}\\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\\b" + } + }, + { + "pattern": { + "name": "Powrbot", + "regex": "(?:powrbot).{0,40}\\b([a-z0-9A-Z]{40})\\b" + } + }, + { + "pattern": { + "name": "Privatekey", + "regex": "-----\\s*?BEGIN[ A-Z0-9_-]*?PRIVATE KEY\\s*?-----[\\s\\S]*?----\\s*?END[ A-Z0-9_-]*? PRIVATE KEY\\s*?-----" + } + }, + { + "pattern": { + "name": "Prospectcrm", + "regex": "(?:prospect).{0,40}\\b([a-z0-9-]{32})\\b" + } + }, + { + "pattern": { + "name": "Prospectio", + "regex": "(?:prospect).{0,40}\\b([a-z0-9A-Z-]{50})\\b" + } + }, + { + "pattern": { + "name": "Protocolsio", + "regex": "(?:protocols).{0,40}\\b([a-z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Proxycrawl", + "regex": "(?:proxycrawl).{0,40}\\b([a-zA-Z0-9_]{22})\\b" + } + }, + { + "pattern": { + "name": "Pubnubpublishkey - 1", + "regex": "\\b(sub-c-[0-9a-z]{8}-[a-z]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\\b" + } + }, + { + "pattern": { + "name": "Pubnubpublishkey - 2", + "regex": "\\b(pub-c-[0-9a-z]{8}-[0-9a-z]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\\b" + } + }, + { + "pattern": { + "name": "Purestake", + "regex": "(?:purestake).{0,40}\\b([a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Pushbulletapikey", + "regex": "(?:pushbullet).{0,40}\\b([A-Za-z0-9_\\.]{34})\\b" + } + }, + { + "pattern": { + "name": "Pusherchannelkey - 1", + "regex": "(?:key).{0,40}\\b([a-z0-9]{20})\\b" + } + }, + { + "pattern": { + "name": "Pusherchannelkey - 2", + "regex": "(?:pusher).{0,40}\\b([a-z0-9]{20})\\b" + } + }, + { + "pattern": { + "name": "Pusherchannelkey - 3", + "regex": "(?:pusher).{0,40}\\b([0-9]{7})\\b" + } + }, + { + "pattern": { + "name": "PyPI upload token", + "regex": "pypi-AgEIcHlwaS5vcmc[A-Za-z0-9-_]{50,1000}" + } + }, + { + "pattern": { + "name": "Qualaroo", + "regex": "(?:qualaroo).{0,40}\\b([a-z0-9A-Z=]{64})" + } + }, + { + "pattern": { + "name": "Qubole", + "regex": "(?:qubole).{0,40}\\b([0-9a-z]{64})\\b" + } + }, + { + "pattern": { + "name": "Quickmetrics", + "regex": "(?:quickmetrics).{0,40}\\b([a-zA-Z0-9_-]{22})\\b" + } + }, + { + "pattern": { + "name": "REDIS_URL", + "regex": "(REDIS_URL).+" + } + }, + { + "pattern": { + "name": "RKCS8", + "regex": "-----BEGIN PRIVATE KEY-----" + } + }, + { + "pattern": { + "name": "RSA private key", + "regex": "-----BEGIN RSA PRIVATE KEY-----" + } + }, + { + "pattern": { + "name": "Rapidapi", + "regex": "(?:rapidapi).{0,40}\\b([A-Za-z0-9_-]{50})\\b" + } + }, + { + "pattern": { + "name": "Raven", + "regex": "(?:raven).{0,40}\\b([A-Z0-9-]{16})\\b" + } + }, + { + "pattern": { + "name": "Rawg", + "regex": "(?:rawg).{0,40}\\b([0-9Aa-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Razorpay - 1", + "regex": "\\brzp_\\w{2,6}_\\w{10,20}\\b" + } + }, + { + "pattern": { + "name": "Readme", + "regex": "(?:readme).{0,40}\\b([a-zA-Z0-9_]{32})\\b" + } + }, + { + "pattern": { + "name": "Reallysimplesystems", + "regex": "\\b(ey[a-zA-Z0-9-._]{153}.ey[a-zA-Z0-9-._]{916,1000})\\b" + } + }, + { + "pattern": { + "name": "Rebrandly", + "regex": "(?:rebrandly).{0,40}\\b([a-zA-Z0-9_]{32})\\b" + } + }, + { + "pattern": { + "name": "Refiner", + "regex": "(?:refiner).{0,40}\\b([0-9Aa-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Repairshopr - 1", + "regex": "(?:repairshopr).{0,40}\\b([a-zA-Z0-9_.!+$#^*]{3,32})\\b" + } + }, + { + "pattern": { + "name": "Repairshopr - 2", + "regex": "(?:repairshopr).{0,40}\\b([a-zA-Z0-9-]{51})\\b" + } + }, + { + "pattern": { + "name": "Restpack", + "regex": "(?:restpack).{0,40}\\b([a-zA-Z0-9]{48})\\b" + } + }, + { + "pattern": { + "name": "Restpackhtmltopdfapi", + "regex": "(?:restpack).{0,40}\\b([0-9A-Za-z]{48})\\b" + } + }, + { + "pattern": { + "name": "Rev - 1", + "regex": "(?:rev).{0,40}\\b([0-9a-zA-Z\\/\\+]{27}\\=[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Rev - 2", + "regex": "(?:rev).{0,40}\\b([0-9a-zA-Z\\-]{27}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Revampcrm - 1", + "regex": "(?:revamp).{0,40}\\b([a-zA-Z0-9]{40}\\b)" + } + }, + { + "pattern": { + "name": "Revampcrm - 2", + "regex": "(?:revamp).{0,40}\\b([a-zA-Z0-9.-@]{25,30})\\b" + } + }, + { + "pattern": { + "name": "Ringcentral - 1", + "regex": "(?:ringcentral).{0,40}\\b(https://www.[0-9A-Za-z_-]{1,}.com)\\b" + } + }, + { + "pattern": { + "name": "Ringcentral - 2", + "regex": "(?:ringcentral).{0,40}\\b([0-9A-Za-z_-]{22})\\b" + } + }, + { + "pattern": { + "name": "Ritekit", + "regex": "(?:ritekit).{0,40}\\b([0-9a-f]{44})\\b" + } + }, + { + "pattern": { + "name": "Roaring", + "regex": "(?:roaring).{0,40}\\b([0-9A-Za-z_-]{28})\\b" + } + }, + { + "pattern": { + "name": "Rocketreach", + "regex": "(?:rocketreach).{0,40}\\b([a-z0-9-]{39})\\b" + } + }, + { + "pattern": { + "name": "Roninapp - 1", + "regex": "(?:ronin).{0,40}\\b([0-9Aa-zA-Z]{3,32})\\b" + } + }, + { + "pattern": { + "name": "Roninapp - 2", + "regex": "(?:ronin).{0,40}\\b([0-9a-zA-Z]{26})\\b" + } + }, + { + "pattern": { + "name": "Route4me", + "regex": "(?:route4me).{0,40}\\b([0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Rownd - 1", + "regex": "(?:rownd).{0,40}\\b([a-z0-9]{8}\\-[a-z0-9]{4}\\-[a-z0-9]{4}\\-[a-z0-9]{4}\\-[a-z0-9]{12})\\b" + } + }, + { + "pattern": { + "name": "Rownd - 2", + "regex": "(?:rownd).{0,40}\\b([a-z0-9]{48})\\b" + } + }, + { + "pattern": { + "name": "Rownd - 3", + "regex": "(?:rownd).{0,40}\\b([0-9]{18})\\b" + } + }, + { + "pattern": { + "name": "Rubygems", + "regex": "\\b(rubygems_[a-zA0-9]{48})\\b" + } + }, + { + "pattern": { + "name": "Runrunit - 1", + "regex": "(?:runrunit).{0,40}\\b([0-9a-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Runrunit - 2", + "regex": "(?:runrunit).{0,40}\\b([0-9A-Za-z]{18,20})\\b" + } + }, + { + "pattern": { + "name": "SSH", + "regex": "-----BEGIN OPENSSH PRIVATE KEY-----" + } + }, + { + "pattern": { + "name": "SSH (DSA) private key", + "regex": "-----BEGIN DSA PRIVATE KEY-----" + } + }, + { + "pattern": { + "name": "Salesblink", + "regex": "(?:salesblink).{0,40}\\b([a-zA-Z]{16})\\b" + } + }, + { + "pattern": { + "name": "Salescookie", + "regex": "(?:salescookie).{0,40}\\b([a-zA-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Salesflare", + "regex": "(?:salesflare).{0,40}\\b([a-zA-Z0-9_]{45})\\b" + } + }, + { + "pattern": { + "name": "Satismeterprojectkey - 1", + "regex": "(?:satismeter).{0,40}\\b([a-zA-Z0-9]{4,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,12})\\b" + } + }, + { + "pattern": { + "name": "Satismeterprojectkey - 2", + "regex": "(?:satismeter).{0,40}\\b([a-zA-Z0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Satismeterprojectkey - 3", + "regex": "(?:satismeter).{0,40}\\b([a-zA-Z0-9!=@#$%^]{6,32})" + } + }, + { + "pattern": { + "name": "Satismeterwritekey", + "regex": "(?:satismeter).{0,40}\\b([a-z0-9A-Z]{16})\\b" + } + }, + { + "pattern": { + "name": "Saucelabs - 1", + "regex": "\\b(oauth\\-[a-z0-9]{8,}\\-[a-z0-9]{5})\\b" + } + }, + { + "pattern": { + "name": "Saucelabs - 2", + "regex": "(?:saucelabs).{0,40}\\b([a-z0-9]{8}\\-[a-z0-9]{4}\\-[a-z0-9]{4}\\-[a-z0-9]{4}\\-[a-z0-9]{12})\\b" + } + }, + { + "pattern": { + "name": "Scalewaykey", + "regex": "(?:scaleway).{0,40}\\b([0-9a-z]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[0-9a-z]{4}-[0-9a-z]{12})\\b" + } + }, + { + "pattern": { + "name": "Scrapeowl", + "regex": "(?:scrapeowl).{0,40}\\b([0-9a-z]{30})\\b" + } + }, + { + "pattern": { + "name": "Scraperapi", + "regex": "(?:scraperapi).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Scraperbox", + "regex": "(?:scraperbox).{0,40}\\b([A-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Scrapersite", + "regex": "(?:scrapersite).{0,40}\\b([a-zA-Z0-9]{45})\\b" + } + }, + { + "pattern": { + "name": "Scrapestack", + "regex": "(?:scrapestack).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Scrapfly", + "regex": "(?:scrapfly).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Scrapingant", + "regex": "(?:scrapingant).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Scrapingbee", + "regex": "(?:scrapingbee).{0,40}\\b([A-Z0-9]{80})\\b" + } + }, + { + "pattern": { + "name": "Screenshotapi", + "regex": "(?:screenshotapi).{0,40}\\b([0-9A-Z]{7}\\-[0-9A-Z]{7}\\-[0-9A-Z]{7}\\-[0-9A-Z]{7})\\b" + } + }, + { + "pattern": { + "name": "Screenshotlayer", + "regex": "(?:screenshotlayer).{0,40}\\b([a-zA-Z0-9_]{32})\\b" + } + }, + { + "pattern": { + "name": "Securitytrails", + "regex": "(?:securitytrails).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Segmentapikey", + "regex": "(?:segment).{0,40}\\b([A-Za-z0-9_\\-a-zA-Z]{43}\\.[A-Za-z0-9_\\-a-zA-Z]{43})\\b" + } + }, + { + "pattern": { + "name": "Selectpdf", + "regex": "(?:selectpdf).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Semaphore", + "regex": "(?:semaphore).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "SendGrid API Key", + "regex": "SG\\.[\\w_]{16,32}\\.[\\w_]{16,64}" + } + }, + { + "pattern": { + "name": "Sendbird - 1", + "regex": "(?:sendbird).{0,40}\\b([0-9a-f]{40})\\b" + } + }, + { + "pattern": { + "name": "Sendbird - 2", + "regex": "(?:sendbird).{0,40}\\b([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})\\b" + } + }, + { + "pattern": { + "name": "Sendbirdorganizationapi", + "regex": "(?:sendbird).{0,40}\\b([0-9a-f]{24})\\b" + } + }, + { + "pattern": { + "name": "Sendgrid", + "regex": "(?:sendgrid).{0,40}(SG\\.[\\w\\-_]{20,24}\\.[\\w\\-_]{39,50})\\b" + } + }, + { + "pattern": { + "name": "Sendinbluev2", + "regex": "\\b(xkeysib\\-[A-Za-z0-9_-]{81})\\b" + } + }, + { + "pattern": { + "name": "Sentiment - 1", + "regex": "(?:sentiment).{0,40}\\b([0-9]{17})\\b" + } + }, + { + "pattern": { + "name": "Sentiment - 2", + "regex": "(?:sentiment).{0,40}\\b([a-zA-Z0-9]{20})\\b" + } + }, + { + "pattern": { + "name": "Sentrytoken", + "regex": "(?:sentry).{0,40}\\b([a-f0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Serphouse", + "regex": "(?:serphouse).{0,40}\\b([0-9A-Za-z]{60})\\b" + } + }, + { + "pattern": { + "name": "Serpstack", + "regex": "(?:serpstack).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Sheety - 1", + "regex": "(?:sheety).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Sheety - 2", + "regex": "(?:sheety).{0,40}\\b([0-9a-z]{64})\\b" + } + }, + { + "pattern": { + "name": "Sherpadesk", + "regex": "(?:sherpadesk).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Shipday", + "regex": "(?:shipday).{0,40}\\b([a-zA-Z0-9.]{11}[a-zA-Z0-9]{20})\\b" + } + }, + { + "pattern": { + "name": "Shodankey", + "regex": "(?:shodan).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Shopify access token", + "regex": "shpat_[a-fA-F0-9]{32}" + } + }, + { + "pattern": { + "name": "Shopify custom app access token", + "regex": "shpca_[a-fA-F0-9]{32}" + } + }, + { + "pattern": { + "name": "Shopify private app access token", + "regex": "shppa_[a-fA-F0-9]{32}" + } + }, + { + "pattern": { + "name": "Shopify shared secret", + "regex": "shpss_[a-fA-F0-9]{32}" + } + }, + { + "pattern": { + "name": "Shoppable Service Auth", + "regex": "data-shoppable-auth-token.+" + } + }, + { + "pattern": { + "name": "Shortcut", + "regex": "(?:shortcut).{0,40}\\b([0-9a-f-]{36})\\b" + } + }, + { + "pattern": { + "name": "Shotstack", + "regex": "(?:shotstack).{0,40}\\b([a-zA-Z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Shutterstock - 1", + "regex": "(?:shutterstock).{0,40}\\b([0-9a-zA-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Shutterstock - 2", + "regex": "(?:shutterstock).{0,40}\\b([0-9a-zA-Z]{16})\\b" + } + }, + { + "pattern": { + "name": "Shutterstockoauth", + "regex": "(?:shutterstock).{0,40}\\b(v2/[0-9A-Za-z]{388})\\b" + } + }, + { + "pattern": { + "name": "Signalwire - 1", + "regex": "\\b([0-9a-z-]{3,64}.signalwire.com)\\b" + } + }, + { + "pattern": { + "name": "Signalwire - 2", + "regex": "(?:signalwire).{0,40}\\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\\b" + } + }, + { + "pattern": { + "name": "Signalwire - 3", + "regex": "(?:signalwire).{0,40}\\b([0-9A-Za-z]{50})\\b" + } + }, + { + "pattern": { + "name": "Signaturit", + "regex": "(?:signaturit).{0,40}\\b([0-9A-Za-z]{86})\\b" + } + }, + { + "pattern": { + "name": "Signupgenius", + "regex": "(?:signupgenius).{0,40}\\b([0-9A-Za-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Sigopt", + "regex": "(?:sigopt).{0,40}\\b([A-Z0-9]{48})\\b" + } + }, + { + "pattern": { + "name": "Simplesat", + "regex": "(?:simplesat).{0,40}\\b([a-z0-9]{40})" + } + }, + { + "pattern": { + "name": "Simplynoted", + "regex": "(?:simplynoted).{0,40}\\b([a-zA-Z0-9\\S]{340,360})\\b" + } + }, + { + "pattern": { + "name": "Simvoly", + "regex": "(?:simvoly).{0,40}\\b([a-z0-9]{33})\\b" + } + }, + { + "pattern": { + "name": "Sinchmessage", + "regex": "(?:sinch).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Sirv - 1", + "regex": "(?:sirv).{0,40}\\b([a-zA-Z0-9\\S]{88})" + } + }, + { + "pattern": { + "name": "Sirv - 2", + "regex": "(?:sirv).{0,40}\\b([a-zA-Z0-9]{26})\\b" + } + }, + { + "pattern": { + "name": "Siteleaf", + "regex": "(?:siteleaf).{0,40}\\b([0-9Aa-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Skrappio", + "regex": "(?:skrapp).{0,40}\\b([a-z0-9A-Z]{42})\\b" + } + }, + { + "pattern": { + "name": "Skybiometry", + "regex": "(?:skybiometry).{0,40}\\b([0-9a-z]{25,26})\\b" + } + }, + { + "pattern": { + "name": "Slack", + "regex": "xox[baprs]-[0-9a-zA-Z]{10,48}" + } + }, + { + "pattern": { + "name": "Slack Token", + "regex": "(xox[pborsa]-[0-9]{12}-[0-9]{12}-[0-9]{12}-[a-z0-9]{32})" + } + }, + { + "pattern": { + "name": "Slack User token", + "regex": "xoxp-[0-9A-Za-z\\-]{72}" + } + }, + { + "pattern": { + "name": "Slack Webhook", + "regex": "https://hooks.slack.com/services/T[a-zA-Z0-9_]{8,10}/B[a-zA-Z0-9_]{8,12}/[a-zA-Z0-9_]{23,24}" + } + }, + { + "pattern": { + "name": "Slack access token", + "regex": "xoxb-[0-9A-Za-z\\-]{51}" + } + }, + { + "pattern": { + "name": "Slackwebhook", + "regex": "(https:\\/\\/hooks.slack.com\\/services\\/[A-Za-z0-9+\\/]{44,46})" + } + }, + { + "pattern": { + "name": "Smartsheets", + "regex": "(?:smartsheets).{0,40}\\b([a-zA-Z0-9]{37})\\b" + } + }, + { + "pattern": { + "name": "Smartystreets - 1", + "regex": "(?:smartystreets).{0,40}\\b([a-zA-Z0-9]{20})\\b" + } + }, + { + "pattern": { + "name": "Smartystreets - 2", + "regex": "(?:smartystreets).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Smooch - 1", + "regex": "(?:smooch).{0,40}\\b(act_[0-9a-z]{24})\\b" + } + }, + { + "pattern": { + "name": "Smooch - 2", + "regex": "(?:smooch).{0,40}\\b([0-9a-zA-Z_-]{86})\\b" + } + }, + { + "pattern": { + "name": "Snipcart", + "regex": "(?:snipcart).{0,40}\\b([0-9A-Za-z_]{75})\\b" + } + }, + { + "pattern": { + "name": "Snykkey", + "regex": "(?:snyk).{0,40}\\b([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})\\b" + } + }, + { + "pattern": { + "name": "SonarQube Token", + "regex": "sonar.{0,50}(?:\"|'|`)?[0-9a-f]{40}(?:\"|'|`)?" + } + }, + { + "pattern": { + "name": "Splunkobservabilitytoken", + "regex": "(?:splunk).{0,40}\\b([a-z0-9A-Z]{22})\\b" + } + }, + { + "pattern": { + "name": "Spoonacular", + "regex": "(?:spoonacular).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Sportsmonk", + "regex": "(?:sportsmonk).{0,40}\\b([0-9a-zA-Z]{60})\\b" + } + }, + { + "pattern": { + "name": "Square", + "regex": "(?:square).{0,40}(EAAA[a-zA-Z0-9\\-\\+\\=]{60})" + } + }, + { + "pattern": { + "name": "Square API Key", + "regex": "sq0(atp|csp)-[0-9a-z-_]{22,43}" + } + }, + { + "pattern": { + "name": "Square OAuth Secret", + "regex": "sq0csp-[0-9A-Za-z\\-_]{43}" + } + }, + { + "pattern": { + "name": "Square access token", + "regex": "sq0atp-[0-9A-Za-z\\-_]{22}" + } + }, + { + "pattern": { + "name": "Squareapp - 1", + "regex": "[\\w\\-]*sq0i[a-z]{2}-[0-9A-Za-z\\-_]{22,43}" + } + }, + { + "pattern": { + "name": "Squareapp - 2", + "regex": "[\\w\\-]*sq0c[a-z]{2}-[0-9A-Za-z\\-_]{40,50}" + } + }, + { + "pattern": { + "name": "Squarespace", + "regex": "(?:squarespace).{0,40}\\b([0-9Aa-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Squareup", + "regex": "\\b(sq0idp-[0-9A-Za-z]{22})\\b" + } + }, + { + "pattern": { + "name": "Sslmate", + "regex": "(?:sslmate).{0,40}\\b([a-zA-Z0-9]{36})\\b" + } + }, + { + "pattern": { + "name": "Stitchdata", + "regex": "(?:stitchdata).{0,40}\\b([0-9a-z_]{35})\\b" + } + }, + { + "pattern": { + "name": "Stockdata", + "regex": "(?:stockdata).{0,40}\\b([0-9A-Za-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Storecove", + "regex": "(?:storecove).{0,40}\\b([a-zA-Z0-9_-]{43})\\b" + } + }, + { + "pattern": { + "name": "Stormglass", + "regex": "(?:stormglass).{0,40}\\b([0-9Aa-z-]{73})\\b" + } + }, + { + "pattern": { + "name": "Storyblok", + "regex": "(?:storyblok).{0,40}\\b([0-9A-Za-z]{22}t{2})\\b" + } + }, + { + "pattern": { + "name": "Storychief", + "regex": "(?:storychief).{0,40}\\b([a-zA-Z0-9_\\-.]{940,1000})" + } + }, + { + "pattern": { + "name": "Strava - 1", + "regex": "(?:strava).{0,40}\\b([0-9]{5})\\b" + } + }, + { + "pattern": { + "name": "Strava - 2", + "regex": "(?:strava).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Streak", + "regex": "(?:streak).{0,40}\\b([0-9Aa-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Stripe", + "regex": "[rs]k_live_[a-zA-Z0-9]{20,30}" + } + }, + { + "pattern": { + "name": "Stripe API Key - 1", + "regex": "sk_live_[0-9a-zA-Z]{24}" + } + }, + { + "pattern": { + "name": "Stripe API key - 2", + "regex": "stripe[sr]k_live_[0-9a-zA-Z]{24}" + } + }, + { + "pattern": { + "name": "Stripe API key - 3", + "regex": "stripe[sk|rk]_live_[0-9a-zA-Z]{24}" + } + }, + { + "pattern": { + "name": "Stripe Public Live Key", + "regex": "pk_live_[0-9a-z]{24}" + } + }, + { + "pattern": { + "name": "Stripe Public Test Key", + "regex": "pk_test_[0-9a-z]{24}" + } + }, + { + "pattern": { + "name": "Stripe Restriced Key", + "regex": "rk_(?:live|test)_[0-9a-zA-Z]{24}" + } + }, + { + "pattern": { + "name": "Stripe Restricted API Key", + "regex": "rk_live_[0-9a-zA-Z]{24}" + } + }, + { + "pattern": { + "name": "Stripe Secret Key", + "regex": "sk_(?:live|test)_[0-9a-zA-Z]{24}" + } + }, + { + "pattern": { + "name": "Stripe Secret Live Key", + "regex": "(sk|rk)_live_[0-9a-z]{24}" + } + }, + { + "pattern": { + "name": "Stripe Secret Test Key", + "regex": "(sk|rk)_test_[0-9a-z]{24}" + } + }, + { + "pattern": { + "name": "Stytch - 1", + "regex": "(?:stytch).{0,40}\\b([a-zA-Z0-9-_]{47}=)" + } + }, + { + "pattern": { + "name": "Stytch - 2", + "regex": "(?:stytch).{0,40}\\b([a-z0-9-]{49})\\b" + } + }, + { + "pattern": { + "name": "Sugester - 1", + "regex": "(?:sugester).{0,40}\\b([a-zA-Z0-9_.!+$#^*%]{3,32})\\b" + } + }, + { + "pattern": { + "name": "Sugester - 2", + "regex": "(?:sugester).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Sumologickey - 1", + "regex": "(?:sumo).{0,40}\\b([A-Za-z0-9]{14})\\b" + } + }, + { + "pattern": { + "name": "Sumologickey - 2", + "regex": "(?:sumo).{0,40}\\b([A-Za-z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Supernotesapi", + "regex": "(?:supernotes).{0,40}([ \\r\\n]{0,1}[0-9A-Za-z\\-_]{43}[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Surveyanyplace - 1", + "regex": "(?:survey).{0,40}\\b([a-z0-9A-Z-]{36})\\b" + } + }, + { + "pattern": { + "name": "Surveyanyplace - 2", + "regex": "(?:survey).{0,40}\\b([a-z0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Surveybot", + "regex": "(?:surveybot).{0,40}\\b([A-Za-z0-9-]{80})\\b" + } + }, + { + "pattern": { + "name": "Surveysparrow", + "regex": "(?:surveysparrow).{0,40}\\b([a-zA-Z0-9-_]{88})\\b" + } + }, + { + "pattern": { + "name": "Survicate", + "regex": "(?:survicate).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Swell - 1", + "regex": "(?:swell).{0,40}\\b([a-zA-Z0-9]{6,24})\\b" + } + }, + { + "pattern": { + "name": "Swell - 2", + "regex": "(?:swell).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Swiftype", + "regex": "(?:swiftype).{0,40}\\b([a-zA-z-0-9]{6}\\_[a-zA-z-0-9]{6}\\-[a-zA-z-0-9]{6})\\b" + } + }, + { + "pattern": { + "name": "Tallyfy", + "regex": "(?:tallyfy).{0,40}\\b([0-9A-Za-z]{36}\\.[0-9A-Za-z]{264}\\.[0-9A-Za-z\\-\\_]{683})\\b" + } + }, + { + "pattern": { + "name": "Tatumio", + "regex": "(?:tatum).{0,40}\\b([0-9a-z-]{36})\\b" + } + }, + { + "pattern": { + "name": "Taxjar", + "regex": "(?:taxjar).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Teamgate - 1", + "regex": "(?:teamgate).{0,40}\\b([a-z0-9]{40})\\b" + } + }, + { + "pattern": { + "name": "Teamgate - 2", + "regex": "(?:teamgate).{0,40}\\b([a-zA-Z0-9]{80})\\b" + } + }, + { + "pattern": { + "name": "Teamworkcrm", + "regex": "(?:teamwork|teamworkcrm).{0,40}\\b(tkn\\.v1_[0-9A-Za-z]{71}=[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Teamworkdesk", + "regex": "(?:teamwork|teamworkdesk).{0,40}\\b(tkn\\.v1_[0-9A-Za-z]{71}=[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Teamworkspaces", + "regex": "(?:teamwork|teamworkspaces).{0,40}\\b(tkn\\.v1_[0-9A-Za-z]{71}=[ \\r\\n]{1})" + } + }, + { + "pattern": { + "name": "Technicalanalysisapi", + "regex": "(?:technicalanalysisapi).{0,40}\\b([A-Z0-9]{48})\\b" + } + }, + { + "pattern": { + "name": "Telegram Bot API Key", + "regex": "[0-9]+:AA[0-9A-Za-z\\-_]{33}" + } + }, + { + "pattern": { + "name": "Telegram Secret", + "regex": "d{5,}:A[0-9a-z_-]{34,34}" + } + }, + { + "pattern": { + "name": "Telegrambottoken", + "regex": "(?:telegram).{0,40}\\b([0-9]{8,10}:[a-zA-Z0-9_-]{35})\\b" + } + }, + { + "pattern": { + "name": "Telnyx", + "regex": "(?:telnyx).{0,40}\\b(KEY[0-9A-Za-z_-]{55})\\b" + } + }, + { + "pattern": { + "name": "Terraformcloudpersonaltoken", + "regex": "\\b([A-Za-z0-9]{14}.atlasv1.[A-Za-z0-9]{67})\\b" + } + }, + { + "pattern": { + "name": "Text2data", + "regex": "(?:text2data).{0,40}\\b([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})\\b" + } + }, + { + "pattern": { + "name": "Textmagic - 1", + "regex": "(?:textmagic).{0,40}\\b([0-9A-Za-z]{30})\\b" + } + }, + { + "pattern": { + "name": "Textmagic - 2", + "regex": "(?:textmagic).{0,40}\\b([0-9A-Za-z]{1,25})\\b" + } + }, + { + "pattern": { + "name": "Theoddsapi", + "regex": "(?:theoddsapi|the-odds-api).{0,40}\\b([0-9a-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Thinkific - 1", + "regex": "(?:thinkific).{0,40}\\b([0-9a-f]{32})\\b" + } + }, + { + "pattern": { + "name": "Thinkific - 2", + "regex": "(?:thinkific).{0,40}\\b([0-9A-Za-z]{4,40})\\b" + } + }, + { + "pattern": { + "name": "Thousandeyes - 1", + "regex": "(?:thousandeyes).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Thousandeyes - 2", + "regex": "(?:thousandeyes).{0,40}\\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\\b" + } + }, + { + "pattern": { + "name": "Ticketmaster", + "regex": "(?:ticketmaster).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Tiingo", + "regex": "(?:tiingo).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Timezoneapi", + "regex": "(?:timezoneapi).{0,40}\\b([a-zA-Z0-9]{20})\\b" + } + }, + { + "pattern": { + "name": "Tly", + "regex": "(?:tly).{0,40}\\b([0-9A-Za-z]{60})\\b" + } + }, + { + "pattern": { + "name": "Tmetric", + "regex": "(?:tmetric).{0,40}\\b([0-9A-Z]{64})\\b" + } + }, + { + "pattern": { + "name": "Todoist", + "regex": "(?:todoist).{0,40}\\b([0-9a-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Toggltrack", + "regex": "(?:toggl).{0,40}\\b([0-9Aa-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Tomorrowio", + "regex": "(?:tomorrow).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Tomtom", + "regex": "(?:tomtom).{0,40}\\b([0-9Aa-zA-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Tradier", + "regex": "(?:tradier).{0,40}\\b([a-zA-Z0-9]{28})\\b" + } + }, + { + "pattern": { + "name": "Travelpayouts", + "regex": "(?:travelpayouts).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Travisci", + "regex": "(?:travis).{0,40}\\b([a-zA-Z0-9A-Z_]{22})\\b" + } + }, + { + "pattern": { + "name": "Trello URL", + "regex": "https://trello.com/b/[0-9a-z]/[0-9a-z_-]+" + } + }, + { + "pattern": { + "name": "Trelloapikey - 2", + "regex": "(?:trello).{0,40}\\b([a-zA-Z-0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Twelvedata", + "regex": "(?:twelvedata).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Twilio - 1", + "regex": "\\bAC[0-9a-f]{32}\\b" + } + }, + { + "pattern": { + "name": "Twilio API Key", + "regex": "SK[0-9a-fA-F]{32}" + } + }, + { + "pattern": { + "name": "Twitter Access Token", + "regex": "[tT][wW][iI][tT][tT][eE][rR].*[1-9][0-9]+-[0-9a-zA-Z]{40}" + } + }, + { + "pattern": { + "name": "Twitter Client ID", + "regex": "twitter[0-9a-z]{18,25}" + } + }, + { + "pattern": { + "name": "Twitter OAuth", + "regex": "[tT][wW][iI][tT][tT][eE][rR].*['|\"][0-9a-zA-Z]{35,44}['|\"]" + } + }, + { + "pattern": { + "name": "Twitter Secret Key", + "regex": "twitter[0-9a-z]{35,44}" + } + }, + { + "pattern": { + "name": "Tyntec", + "regex": "(?:tyntec).{0,40}\\b([a-zA-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Typeform", + "regex": "(?:typeform).{0,40}\\b([0-9A-Za-z]{44})\\b" + } + }, + { + "pattern": { + "name": "Ubidots", + "regex": "\\b(BBFF-[0-9a-zA-Z]{30})\\b" + } + }, + { + "pattern": { + "name": "Unifyid", + "regex": "(?:unify).{0,40}\\b([0-9A-Za-z_=-]{44})" + } + }, + { + "pattern": { + "name": "Unplugg", + "regex": "(?:unplu).{0,40}\\b([a-z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Unsplash", + "regex": "(?:unsplash).{0,40}\\b([0-9A-Za-z_]{43})\\b" + } + }, + { + "pattern": { + "name": "Upcdatabase", + "regex": "(?:upcdatabase).{0,40}\\b([A-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Uplead", + "regex": "(?:uplead).{0,40}\\b([a-z0-9-]{32})\\b" + } + }, + { + "pattern": { + "name": "Uploadcare", + "regex": "(?:uploadcare).{0,40}\\b([a-z0-9]{20})\\b" + } + }, + { + "pattern": { + "name": "Upwave", + "regex": "(?:upwave).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Uri", + "regex": "\\b[a-zA-Z]{1,10}:?\\/\\/[-.%\\w{}]{1,50}:([-.%\\S]{3,50})@[-.%\\w\\/:]+\\b" + } + }, + { + "pattern": { + "name": "Urlscan", + "regex": "(?:urlscan).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Userstack", + "regex": "(?:userstack).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Vatlayer", + "regex": "(?:vatlayer).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Vercel", + "regex": "(?:vercel).{0,40}\\b([a-zA-Z0-9]{24})\\b" + } + }, + { + "pattern": { + "name": "Verifier - 1", + "regex": "(?:verifier).{0,40}\\b([a-zA-Z-0-9-]{5,16}\\@[a-zA-Z-0-9]{4,16}\\.[a-zA-Z-0-9]{3,6})\\b" + } + }, + { + "pattern": { + "name": "Verifier - 2", + "regex": "(?:verifier).{0,40}\\b([a-z0-9]{96})\\b" + } + }, + { + "pattern": { + "name": "Verimail", + "regex": "(?:verimail).{0,40}\\b([A-Z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Veriphone", + "regex": "(?:veriphone).{0,40}\\b([0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Versioneye", + "regex": "(?:versioneye).{0,40}\\b([a-zA-Z0-9-]{40})\\b" + } + }, + { + "pattern": { + "name": "Viewneo", + "regex": "(?:viewneo).{0,40}\\b([a-z0-9A-Z]{120,300}.[a-z0-9A-Z]{150,300}.[a-z0-9A-Z-_]{600,800})" + } + }, + { + "pattern": { + "name": "Virustotal", + "regex": "(?:virustotal).{0,40}\\b([a-f0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Visualcrossing", + "regex": "(?:visualcrossing).{0,40}\\b([0-9A-Z]{25})\\b" + } + }, + { + "pattern": { + "name": "Voicegain", + "regex": "(?:voicegain).{0,40}\\b(ey[0-9a-zA-Z_-]{34}.ey[0-9a-zA-Z_-]{108}.[0-9a-zA-Z_-]{43})\\b" + } + }, + { + "pattern": { + "name": "Vouchery - 1", + "regex": "(?:vouchery).{0,40}\\b([a-z0-9-]{36})\\b" + } + }, + { + "pattern": { + "name": "Vouchery - 2", + "regex": "(?:vouchery).{0,40}\\b([a-zA-Z0-9-\\S]{2,20})\\b" + } + }, + { + "pattern": { + "name": "Vpnapi", + "regex": "(?:vpnapi).{0,40}\\b([a-z0-9A-Z]{32})\\b" + } + }, + { + "pattern": { + "name": "Vultrapikey", + "regex": "(?:vultr).{0,40} \\b([A-Z0-9]{36})\\b" + } + }, + { + "pattern": { + "name": "Vyte", + "regex": "(?:vyte).{0,40}\\b([0-9a-z]{50})\\b" + } + }, + { + "pattern": { + "name": "Walkscore", + "regex": "(?:walkscore).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Weatherbit", + "regex": "(?:weatherbit).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Weatherstack", + "regex": "(?:weatherstack).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Webex - 1", + "regex": "(?:error).{0,40}(redirect_uri_mismatch)" + } + }, + { + "pattern": { + "name": "Webex - 2", + "regex": "(?:webex).{0,40}\\b([A-Za-z0-9_-]{65})\\b" + } + }, + { + "pattern": { + "name": "Webex - 3", + "regex": "(?:webex).{0,40}\\b([A-Za-z0-9_-]{64})\\b" + } + }, + { + "pattern": { + "name": "Webflow", + "regex": "(?:webflow).{0,40}\\b([a-zA0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Webscraper", + "regex": "(?:webscraper).{0,40}\\b([a-zA-Z0-9]{60})\\b" + } + }, + { + "pattern": { + "name": "Webscraping", + "regex": "(?:webscraping).{0,40}\\b([0-9A-Za-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Wepay - 2", + "regex": "(?:wepay).{0,40}\\b([a-zA-Z0-9_?]{62})\\b" + } + }, + { + "pattern": { + "name": "Whoxy", + "regex": "(?:whoxy).{0,40}\\b([0-9a-z]{33})\\b" + } + }, + { + "pattern": { + "name": "Worksnaps", + "regex": "(?:worksnaps).{0,40}\\b([0-9A-Za-z]{40})\\b" + } + }, + { + "pattern": { + "name": "Workstack", + "regex": "(?:workstack).{0,40}\\b([0-9Aa-zA-Z]{60})\\b" + } + }, + { + "pattern": { + "name": "Worldcoinindex", + "regex": "(?:worldcoinindex).{0,40}\\b([a-zA-Z0-9]{35})\\b" + } + }, + { + "pattern": { + "name": "Worldweather", + "regex": "(?:worldweather).{0,40}\\b([0-9a-z]{31})\\b" + } + }, + { + "pattern": { + "name": "Wrike", + "regex": "(?:wrike).{0,40}\\b(ey[a-zA-Z0-9-._]{333})\\b" + } + }, + { + "pattern": { + "name": "Yandex", + "regex": "(?:yandex).{0,40}\\b([a-z0-9A-Z.]{83})\\b" + } + }, + { + "pattern": { + "name": "Youneedabudget", + "regex": "(?:youneedabudget).{0,40}\\b([0-9a-f]{64})\\b" + } + }, + { + "pattern": { + "name": "Yousign", + "regex": "(?:yousign).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Youtubeapikey - 1", + "regex": "(?:youtube).{0,40}\\b([a-zA-Z-0-9_]{39})\\b" + } + }, + { + "pattern": { + "name": "Zapier Webhook", + "regex": "https://(?:www.)?hooks\\.zapier\\.com/hooks/catch/[A-Za-z0-9]+/[A-Za-z0-9]+/" + } + }, + { + "pattern": { + "name": "Zapierwebhook", + "regex": "(https:\\/\\/hooks.zapier.com\\/hooks\\/catch\\/[A-Za-z0-9\\/]{16})" + } + }, + { + "pattern": { + "name": "Zendeskapi - 3", + "regex": "(?:zendesk).{0,40}([A-Za-z0-9_-]{40})" + } + }, + { + "pattern": { + "name": "Zenkitapi", + "regex": "(?:zenkit).{0,40}\\b([0-9a-z]{8}\\-[0-9A-Za-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Zenscrape", + "regex": "(?:zenscrape).{0,40}\\b([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b" + } + }, + { + "pattern": { + "name": "Zenserp", + "regex": "(?:zenserp).{0,40}\\b([0-9a-z-]{36})\\b" + } + }, + { + "pattern": { + "name": "Zeplin", + "regex": "(?:zeplin).{0,40}\\b([a-zA-Z0-9-.]{350,400})\\b" + } + }, + { + "pattern": { + "name": "Zerobounce", + "regex": "(?:zerobounce).{0,40}\\b([a-z0-9]{32})\\b" + } + }, + { + "pattern": { + "name": "Zipapi - 1", + "regex": "(?:zipapi).{0,40}\\b([a-zA-Z0-9!=@#$%^]{7,})" + } + }, + { + "pattern": { + "name": "Zipapi - 3", + "regex": "(?:zipapi).{0,40}\\b([0-9a-z]{32})\\b" + } + }, + { + "pattern": { + "name": "Zipcodeapi", + "regex": "(?:zipcodeapi).{0,40}\\b([a-zA-Z0-9]{64})\\b" + } + }, + { + "pattern": { + "name": "Zoho Webhook", + "regex": "https://creator\\.zoho\\.com/api/[A-Za-z0-9/\\-_\\.]+\\?authtoken=[A-Za-z0-9]+" + } + }, + { + "pattern": { + "name": "Zonkafeedback", + "regex": "(?:zonka).{0,40}\\b([A-Za-z0-9]{36})\\b" + } + }, + { + "pattern": { + "name": "access_key_secret", + "regex": "access[_-]?key[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "access_secret", + "regex": "access[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "access_token", + "regex": "access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "account_sid", + "regex": "account[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "admin_email", + "regex": "admin[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "adzerk_api_key", + "regex": "adzerk[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "algolia_admin_key_1", + "regex": "algolia[_-]?admin[_-]?key[_-]?1(=| =|:| :)" + } + }, + { + "pattern": { + "name": "algolia_admin_key_2", + "regex": "algolia[_-]?admin[_-]?key[_-]?2(=| =|:| :)" + } + }, + { + "pattern": { + "name": "algolia_admin_key_mcm", + "regex": "algolia[_-]?admin[_-]?key[_-]?mcm(=| =|:| :)" + } + }, + { + "pattern": { + "name": "algolia_api_key", + "regex": "algolia[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "algolia_api_key_mcm", + "regex": "algolia[_-]?api[_-]?key[_-]?mcm(=| =|:| :)" + } + }, + { + "pattern": { + "name": "algolia_api_key_search", + "regex": "algolia[_-]?api[_-]?key[_-]?search(=| =|:| :)" + } + }, + { + "pattern": { + "name": "algolia_search_api_key", + "regex": "algolia[_-]?search[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "algolia_search_key", + "regex": "algolia[_-]?search[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "algolia_search_key_1", + "regex": "algolia[_-]?search[_-]?key[_-]?1(=| =|:| :)" + } + }, + { + "pattern": { + "name": "alias_pass", + "regex": "alias[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "alicloud_access_key", + "regex": "alicloud[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "alicloud_secret_key", + "regex": "alicloud[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "amazon_bucket_name", + "regex": "amazon[_-]?bucket[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "amazon_secret_access_key", + "regex": "amazon[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "anaconda_token", + "regex": "anaconda[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "android_docs_deploy_token", + "regex": "android[_-]?docs[_-]?deploy[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ansible_vault_password", + "regex": "ansible[_-]?vault[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aos_key", + "regex": "aos[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aos_sec", + "regex": "aos[_-]?sec(=| =|:| :)" + } + }, + { + "pattern": { + "name": "api_key", + "regex": "api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "api_key_secret", + "regex": "api[_-]?key[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "api_key_sid", + "regex": "api[_-]?key[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "api_secret", + "regex": "api[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "apiary_api_key", + "regex": "apiary[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "apigw_access_token", + "regex": "apigw[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "apikey_patterns", + "regex": "apikey[:](?:['\"]?[a-zA-Z0-9-_|]+['\"]?)" + } + }, + { + "pattern": { + "name": "app_bucket_perm", + "regex": "app[_-]?bucket[_-]?perm(=| =|:| :)" + } + }, + { + "pattern": { + "name": "app_report_token_key", + "regex": "app[_-]?report[_-]?token[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "app_secrete", + "regex": "app[_-]?secrete(=| =|:| :)" + } + }, + { + "pattern": { + "name": "app_token", + "regex": "app[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "appclientsecret", + "regex": "appclientsecret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "apple_id_password", + "regex": "apple[_-]?id[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "argos_token", + "regex": "argos[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "artifactory", + "regex": "(artifactory.{0,50}(\"|')?[a-zA-Z0-9=]{112}(\"|')?)" + } + }, + { + "pattern": { + "name": "artifactory_key", + "regex": "artifactory[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "artifacts_aws_access_key_id", + "regex": "artifacts[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "artifacts_aws_secret_access_key", + "regex": "artifacts[_-]?aws[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "artifacts_bucket", + "regex": "artifacts[_-]?bucket(=| =|:| :)" + } + }, + { + "pattern": { + "name": "artifacts_key", + "regex": "artifacts[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "artifacts_secret", + "regex": "artifacts[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "assistant_iam_apikey", + "regex": "assistant[_-]?iam[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "auth0_api_clientsecret", + "regex": "auth0[_-]?api[_-]?clientsecret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "auth0_client_secret", + "regex": "auth0[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "auth_token", + "regex": "auth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "author_email_addr", + "regex": "author[_-]?email[_-]?addr(=| =|:| :)" + } + }, + { + "pattern": { + "name": "author_npm_api_key", + "regex": "author[_-]?npm[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_access", + "regex": "aws[_-]?access(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_access_key", + "regex": "aws[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_access_key_id - 1", + "regex": "aws[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_config_accesskeyid", + "regex": "aws[_-]?config[_-]?accesskeyid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_config_secretaccesskey", + "regex": "aws[_-]?config[_-]?secretaccesskey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_key", + "regex": "aws[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_patterns", + "regex": "(?:accesskeyid|secretaccesskey|aws_access_key_id|aws_secret_access_key)" + } + }, + { + "pattern": { + "name": "aws_secret", + "regex": "aws[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_secret_access_key", + "regex": "aws[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_secret_key", + "regex": "aws[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_secrets", + "regex": "aws[_-]?secrets(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_ses_access_key_id", + "regex": "aws[_-]?ses[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "aws_ses_secret_access_key", + "regex": "aws[_-]?ses[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "awsaccesskeyid", + "regex": "awsaccesskeyid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "awscn_access_key_id", + "regex": "awscn[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "awscn_secret_access_key", + "regex": "awscn[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "awssecretkey", + "regex": "awssecretkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "b2_app_key", + "regex": "b2[_-]?app[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "b2_bucket", + "regex": "b2[_-]?bucket(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bintray_api_key", + "regex": "bintray[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bintray_apikey", + "regex": "bintray[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bintray_gpg_password", + "regex": "bintray[_-]?gpg[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bintray_key", + "regex": "bintray[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bintray_token", + "regex": "bintray[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bintraykey", + "regex": "bintraykey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bluemix_api_key", + "regex": "bluemix[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bluemix_auth", + "regex": "bluemix[_-]?auth(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bluemix_pass", + "regex": "bluemix[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bluemix_pass_prod", + "regex": "bluemix[_-]?pass[_-]?prod(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bluemix_password", + "regex": "bluemix[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bluemix_pwd", + "regex": "bluemix[_-]?pwd(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bluemix_username", + "regex": "bluemix[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "brackets_repo_oauth_token", + "regex": "brackets[_-]?repo[_-]?oauth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "browser_stack_access_key", + "regex": "browser[_-]?stack[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "browserstack_access_key", + "regex": "browserstack[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bucketeer_aws_access_key_id", + "regex": "bucketeer[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bucketeer_aws_secret_access_key", + "regex": "bucketeer[_-]?aws[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "built_branch_deploy_key", + "regex": "built[_-]?branch[_-]?deploy[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bundlesize_github_token", + "regex": "bundlesize[_-]?github[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bx_password", + "regex": "bx[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "bx_username", + "regex": "bx[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cache_s3_secret_key", + "regex": "cache[_-]?s3[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cargo_token", + "regex": "cargo[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cattle_access_key", + "regex": "cattle[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cattle_agent_instance_auth", + "regex": "cattle[_-]?agent[_-]?instance[_-]?auth(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cattle_secret_key", + "regex": "cattle[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "censys_secret", + "regex": "censys[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "certificate_password", + "regex": "certificate[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cf_password", + "regex": "cf[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cheverny_token", + "regex": "cheverny[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "chrome_client_secret", + "regex": "chrome[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "chrome_refresh_token", + "regex": "chrome[_-]?refresh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ci_deploy_password", + "regex": "ci[_-]?deploy[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ci_project_url", + "regex": "ci[_-]?project[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ci_registry_user", + "regex": "ci[_-]?registry[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ci_server_name", + "regex": "ci[_-]?server[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ci_user_token", + "regex": "ci[_-]?user[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "claimr_database", + "regex": "claimr[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "claimr_db", + "regex": "claimr[_-]?db(=| =|:| :)" + } + }, + { + "pattern": { + "name": "claimr_superuser", + "regex": "claimr[_-]?superuser(=| =|:| :)" + } + }, + { + "pattern": { + "name": "claimr_token", + "regex": "claimr[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cli_e2e_cma_token", + "regex": "cli[_-]?e2e[_-]?cma[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "client_secret", + "regex": "client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "clojars_password", + "regex": "clojars[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloud_api_key", + "regex": "cloud[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudant_archived_database", + "regex": "cloudant[_-]?archived[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudant_audited_database", + "regex": "cloudant[_-]?audited[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudant_database", + "regex": "cloudant[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudant_instance", + "regex": "cloudant[_-]?instance(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudant_order_database", + "regex": "cloudant[_-]?order[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudant_parsed_database", + "regex": "cloudant[_-]?parsed[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudant_password", + "regex": "cloudant[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudant_processed_database", + "regex": "cloudant[_-]?processed[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudant_service_database", + "regex": "cloudant[_-]?service[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudflare_api_key", + "regex": "cloudflare[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudflare_auth_email", + "regex": "cloudflare[_-]?auth[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudflare_auth_key", + "regex": "cloudflare[_-]?auth[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudflare_email", + "regex": "cloudflare[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudinary_url", + "regex": "cloudinary[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cloudinary_url_staging", + "regex": "cloudinary[_-]?url[_-]?staging(=| =|:| :)" + } + }, + { + "pattern": { + "name": "clu_repo_url", + "regex": "clu[_-]?repo[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "clu_ssh_private_key_base64", + "regex": "clu[_-]?ssh[_-]?private[_-]?key[_-]?base64(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cn_access_key_id", + "regex": "cn[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cn_secret_access_key", + "regex": "cn[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cocoapods_trunk_email", + "regex": "cocoapods[_-]?trunk[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cocoapods_trunk_token", + "regex": "cocoapods[_-]?trunk[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "codacy_project_token", + "regex": "codacy[_-]?project[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "codeclimate", + "regex": "(codeclima.{0,50}(\"|')?[0-9a-f]{64}(\"|')?)" + } + }, + { + "pattern": { + "name": "codeclimate_repo_token", + "regex": "codeclimate[_-]?repo[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "codecov_token", + "regex": "codecov[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "coding_token", + "regex": "coding[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "conekta_apikey", + "regex": "conekta[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "consumer_key", + "regex": "consumer[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "consumerkey", + "regex": "consumerkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "contentful_access_token", + "regex": "contentful[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "contentful_cma_test_token", + "regex": "contentful[_-]?cma[_-]?test[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "contentful_integration_management_token", + "regex": "contentful[_-]?integration[_-]?management[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "contentful_php_management_test_token", + "regex": "contentful[_-]?php[_-]?management[_-]?test[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "contentful_test_org_cma_token", + "regex": "contentful[_-]?test[_-]?org[_-]?cma[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "contentful_v2_access_token", + "regex": "contentful[_-]?v2[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "conversation_password", + "regex": "conversation[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "conversation_username", + "regex": "conversation[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cos_secrets", + "regex": "cos[_-]?secrets(=| =|:| :)" + } + }, + { + "pattern": { + "name": "coveralls_api_token", + "regex": "coveralls[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "coveralls_repo_token", + "regex": "coveralls[_-]?repo[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "coveralls_token", + "regex": "coveralls[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "coverity_scan_token", + "regex": "coverity[_-]?scan[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "cypress_record_key", + "regex": "cypress[_-]?record[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "danger_github_api_token", + "regex": "danger[_-]?github[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "database_host", + "regex": "database[_-]?host(=| =|:| :)" + } + }, + { + "pattern": { + "name": "database_name", + "regex": "database[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "database_password", + "regex": "database[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "database_port", + "regex": "database[_-]?port(=| =|:| :)" + } + }, + { + "pattern": { + "name": "database_user", + "regex": "database[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "database_username", + "regex": "database[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "datadog_api_key", + "regex": "datadog[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "datadog_app_key", + "regex": "datadog[_-]?app[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "db_connection", + "regex": "db[_-]?connection(=| =|:| :)" + } + }, + { + "pattern": { + "name": "db_database", + "regex": "db[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "db_host", + "regex": "db[_-]?host(=| =|:| :)" + } + }, + { + "pattern": { + "name": "db_password", + "regex": "db[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "db_pw", + "regex": "db[_-]?pw(=| =|:| :)" + } + }, + { + "pattern": { + "name": "db_user", + "regex": "db[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "db_username", + "regex": "db[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ddg_test_email", + "regex": "ddg[_-]?test[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ddg_test_email_pw", + "regex": "ddg[_-]?test[_-]?email[_-]?pw(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ddgc_github_token", + "regex": "ddgc[_-]?github[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "deploy_password", + "regex": "deploy[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "deploy_secure", + "regex": "deploy[_-]?secure(=| =|:| :)" + } + }, + { + "pattern": { + "name": "deploy_token", + "regex": "deploy[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "deploy_user", + "regex": "deploy[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "dgpg_passphrase", + "regex": "dgpg[_-]?passphrase(=| =|:| :)" + } + }, + { + "pattern": { + "name": "digitalocean_access_token", + "regex": "digitalocean[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "digitalocean_ssh_key_body", + "regex": "digitalocean[_-]?ssh[_-]?key[_-]?body(=| =|:| :)" + } + }, + { + "pattern": { + "name": "digitalocean_ssh_key_ids", + "regex": "digitalocean[_-]?ssh[_-]?key[_-]?ids(=| =|:| :)" + } + }, + { + "pattern": { + "name": "docker_hub_password", + "regex": "docker[_-]?hub[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "docker_key", + "regex": "docker[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "docker_pass", + "regex": "docker[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "docker_passwd", + "regex": "docker[_-]?passwd(=| =|:| :)" + } + }, + { + "pattern": { + "name": "docker_password", + "regex": "docker[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "docker_postgres_url", + "regex": "docker[_-]?postgres[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "docker_token", + "regex": "docker[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "dockerhub_password", + "regex": "dockerhub[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "dockerhubpassword", + "regex": "dockerhubpassword(=| =|:| :)" + } + }, + { + "pattern": { + "name": "doordash_auth_token", + "regex": "doordash[_-]?auth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "dropbox_oauth_bearer", + "regex": "dropbox[_-]?oauth[_-]?bearer(=| =|:| :)" + } + }, + { + "pattern": { + "name": "droplet_travis_password", + "regex": "droplet[_-]?travis[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "dsonar_login", + "regex": "dsonar[_-]?login(=| =|:| :)" + } + }, + { + "pattern": { + "name": "dsonar_projectkey", + "regex": "dsonar[_-]?projectkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "elastic_cloud_auth", + "regex": "elastic[_-]?cloud[_-]?auth(=| =|:| :)" + } + }, + { + "pattern": { + "name": "elasticsearch_password", + "regex": "elasticsearch[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "encryption_password", + "regex": "encryption[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "end_user_password", + "regex": "end[_-]?user[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "env_github_oauth_token", + "regex": "env[_-]?github[_-]?oauth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "env_heroku_api_key", + "regex": "env[_-]?heroku[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "env_key", + "regex": "env[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "env_secret", + "regex": "env[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "env_secret_access_key", + "regex": "env[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "env_sonatype_password", + "regex": "env[_-]?sonatype[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "eureka_awssecretkey", + "regex": "eureka[_-]?awssecretkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "exp_password", + "regex": "exp[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "facebook_access_token", + "regex": "(EAACEdEose0cBA[0-9A-Za-z]+)" + } + }, + { + "pattern": { + "name": "facebook_oauth", + "regex": "[f|F][a|A][c|C][e|E][b|B][o|O][o|O][k|K].*['|\"][0-9a-f]{32}['|\"]" + } + }, + { + "pattern": { + "name": "file_password", + "regex": "file[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "firebase_api_json", + "regex": "firebase[_-]?api[_-]?json(=| =|:| :)" + } + }, + { + "pattern": { + "name": "firebase_api_token", + "regex": "firebase[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "firebase_key", + "regex": "firebase[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "firebase_project_develop", + "regex": "firebase[_-]?project[_-]?develop(=| =|:| :)" + } + }, + { + "pattern": { + "name": "firebase_token", + "regex": "firebase[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "firefox_secret", + "regex": "firefox[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "flask_secret_key", + "regex": "flask[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "flickr_api_key", + "regex": "flickr[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "flickr_api_secret", + "regex": "flickr[_-]?api[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "fossa_api_key", + "regex": "fossa[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ftp_host", + "regex": "ftp[_-]?host(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ftp_login", + "regex": "ftp[_-]?login(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ftp_password", + "regex": "ftp[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ftp_pw", + "regex": "ftp[_-]?pw(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ftp_user", + "regex": "ftp[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ftp_username", + "regex": "ftp[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gcloud_bucket", + "regex": "gcloud[_-]?bucket(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gcloud_project", + "regex": "gcloud[_-]?project(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gcloud_service_key", + "regex": "gcloud[_-]?service[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gcr_password", + "regex": "gcr[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gcs_bucket", + "regex": "gcs[_-]?bucket(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_api_key", + "regex": "gh[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_email", + "regex": "gh[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_next_oauth_client_secret", + "regex": "gh[_-]?next[_-]?oauth[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_next_unstable_oauth_client_id", + "regex": "gh[_-]?next[_-]?unstable[_-]?oauth[_-]?client[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_next_unstable_oauth_client_secret", + "regex": "gh[_-]?next[_-]?unstable[_-]?oauth[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_oauth_client_secret", + "regex": "gh[_-]?oauth[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_oauth_token", + "regex": "gh[_-]?oauth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_repo_token", + "regex": "gh[_-]?repo[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_token", + "regex": "gh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gh_unstable_oauth_client_secret", + "regex": "gh[_-]?unstable[_-]?oauth[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ghb_token", + "regex": "ghb[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ghost_api_key", + "regex": "ghost[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "git_author_email", + "regex": "git[_-]?author[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "git_author_name", + "regex": "git[_-]?author[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "git_committer_email", + "regex": "git[_-]?committer[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "git_committer_name", + "regex": "git[_-]?committer[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "git_email", + "regex": "git[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "git_name", + "regex": "git[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "git_token", + "regex": "git[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_access_token - 1", + "regex": "github[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_access_token - 2", + "regex": "[a-zA-Z0-9_-]*:[a-zA-Z0-9_-]+@github.com*" + } + }, + { + "pattern": { + "name": "github_api_key", + "regex": "github[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_api_token", + "regex": "github[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_auth", + "regex": "github[_-]?auth(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_auth_token", + "regex": "github[_-]?auth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_client_secret", + "regex": "github[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_deploy_hb_doc_pass", + "regex": "github[_-]?deploy[_-]?hb[_-]?doc[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_deployment_token", + "regex": "github[_-]?deployment[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_hunter_token", + "regex": "github[_-]?hunter[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_hunter_username", + "regex": "github[_-]?hunter[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_key", + "regex": "github[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_oauth", + "regex": "github[_-]?oauth(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_oauth_token", + "regex": "github[_-]?oauth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_password", + "regex": "github[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_pwd", + "regex": "github[_-]?pwd(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_release_token", + "regex": "github[_-]?release[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_repo", + "regex": "github[_-]?repo(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_token", + "regex": "github[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "github_tokens", + "regex": "github[_-]?tokens(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gitlab_user_email", + "regex": "gitlab[_-]?user[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gogs_password", + "regex": "gogs[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "google_account_type", + "regex": "google[_-]?account[_-]?type(=| =|:| :)" + } + }, + { + "pattern": { + "name": "google_client_email", + "regex": "google[_-]?client[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "google_client_id", + "regex": "google[_-]?client[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "google_client_secret", + "regex": "google[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "google_maps_api_key", + "regex": "google[_-]?maps[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "google_oauth", + "regex": "(ya29.[0-9A-Za-z-_]+)" + } + }, + { + "pattern": { + "name": "google_patterns", + "regex": "(?:google_client_id|google_client_secret|google_client_token)" + } + }, + { + "pattern": { + "name": "google_private_key", + "regex": "google[_-]?private[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "google_url", + "regex": "([0-9]{12}-[a-z0-9]{32}.apps.googleusercontent.com)" + } + }, + { + "pattern": { + "name": "gpg_key_name", + "regex": "gpg[_-]?key[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gpg_keyname", + "regex": "gpg[_-]?keyname(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gpg_ownertrust", + "regex": "gpg[_-]?ownertrust(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gpg_passphrase", + "regex": "gpg[_-]?passphrase(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gpg_private_key", + "regex": "gpg[_-]?private[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gpg_secret_keys", + "regex": "gpg[_-]?secret[_-]?keys(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gradle_publish_key", + "regex": "gradle[_-]?publish[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gradle_publish_secret", + "regex": "gradle[_-]?publish[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gradle_signing_key_id", + "regex": "gradle[_-]?signing[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gradle_signing_password", + "regex": "gradle[_-]?signing[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "gren_github_token", + "regex": "gren[_-]?github[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "grgit_user", + "regex": "grgit[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "hab_auth_token", + "regex": "hab[_-]?auth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "hab_key", + "regex": "hab[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "hb_codesign_gpg_pass", + "regex": "hb[_-]?codesign[_-]?gpg[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "hb_codesign_key_pass", + "regex": "hb[_-]?codesign[_-]?key[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "heroku_api_key", + "regex": "heroku[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "heroku_api_key_api_key", + "regex": "([h|H][e|E][r|R][o|O][k|K][u|U].{0,30}[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})" + } + }, + { + "pattern": { + "name": "heroku_email", + "regex": "heroku[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "heroku_token", + "regex": "heroku[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "hockeyapp", + "regex": "hockey.{0,50}(\"|')?[0-9a-f]{32}(\"|')?" + } + }, + { + "pattern": { + "name": "hockeyapp_token", + "regex": "hockeyapp[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "homebrew_github_api_token", + "regex": "homebrew[_-]?github[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "hub_dxia2_password", + "regex": "hub[_-]?dxia2[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ij_repo_password", + "regex": "ij[_-]?repo[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ij_repo_username", + "regex": "ij[_-]?repo[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "index_name", + "regex": "index[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "integration_test_api_key", + "regex": "integration[_-]?test[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "integration_test_appid", + "regex": "integration[_-]?test[_-]?appid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "internal_secrets", + "regex": "internal[_-]?secrets(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ios_docs_deploy_token", + "regex": "ios[_-]?docs[_-]?deploy[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "itest_gh_token", + "regex": "itest[_-]?gh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "jdbc", + "regex": "mysql: jdbc:mysql(=| =|:| :)" + } + }, + { + "pattern": { + "name": "jdbc_databaseurl", + "regex": "jdbc[_-]?databaseurl(=| =|:| :)" + } + }, + { + "pattern": { + "name": "jdbc_host", + "regex": "jdbc[_-]?host(=| =|:| :)" + } + }, + { + "pattern": { + "name": "jwt_secret", + "regex": "jwt[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "kafka_admin_url", + "regex": "kafka[_-]?admin[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "kafka_instance_name", + "regex": "kafka[_-]?instance[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "kafka_rest_url", + "regex": "kafka[_-]?rest[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "keystore_pass", + "regex": "keystore[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "kovan_private_key", + "regex": "kovan[_-]?private[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "kubecfg_s3_path", + "regex": "kubecfg[_-]?s3[_-]?path(=| =|:| :)" + } + }, + { + "pattern": { + "name": "kubeconfig", + "regex": "kubeconfig(=| =|:| :)" + } + }, + { + "pattern": { + "name": "kxoltsn3vogdop92m", + "regex": "kxoltsn3vogdop92m(=| =|:| :)" + } + }, + { + "pattern": { + "name": "leanplum_key", + "regex": "leanplum[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "lektor_deploy_password", + "regex": "lektor[_-]?deploy[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "lektor_deploy_username", + "regex": "lektor[_-]?deploy[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "lighthouse_api_key", + "regex": "lighthouse[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "linux_signing_key", + "regex": "linux[_-]?signing[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ll_publish_url", + "regex": "ll[_-]?publish[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ll_shared_key", + "regex": "ll[_-]?shared[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "looker_test_runner_client_secret", + "regex": "looker[_-]?test[_-]?runner[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "lottie_happo_api_key", + "regex": "lottie[_-]?happo[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "lottie_happo_secret_key", + "regex": "lottie[_-]?happo[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "lottie_s3_secret_key", + "regex": "lottie[_-]?s3[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "lottie_upload_cert_key_password", + "regex": "lottie[_-]?upload[_-]?cert[_-]?key[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "lottie_upload_cert_key_store_password", + "regex": "lottie[_-]?upload[_-]?cert[_-]?key[_-]?store[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "magento_auth_password", + "regex": "magento[_-]?auth[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "magento_auth_username", + "regex": "magento[_-]?auth[_-]?username (=| =|:| :)" + } + }, + { + "pattern": { + "name": "magento_password", + "regex": "magento[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mail_password", + "regex": "mail[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailchimp", + "regex": "(W(?:[a-f0-9]{32}(-us[0-9]{1,2}))a-zA-Z0-9)" + } + }, + { + "pattern": { + "name": "mailchimp_api_key", + "regex": "mailchimp[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailchimp_key", + "regex": "mailchimp[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailer_password", + "regex": "mailer[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailgun", + "regex": "(key-[0-9a-f]{32})" + } + }, + { + "pattern": { + "name": "mailgun_api_key", + "regex": "mailgun[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailgun_apikey", + "regex": "mailgun[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailgun_password", + "regex": "mailgun[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailgun_priv_key", + "regex": "mailgun[_-]?priv[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailgun_pub_apikey", + "regex": "mailgun[_-]?pub[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailgun_pub_key", + "regex": "mailgun[_-]?pub[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mailgun_secret_api_key", + "regex": "mailgun[_-]?secret[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "manage_key", + "regex": "manage[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "manage_secret", + "regex": "manage[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "management_token", + "regex": "management[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "managementapiaccesstoken", + "regex": "managementapiaccesstoken(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mandrill_api_key", + "regex": "mandrill[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "manifest_app_token", + "regex": "manifest[_-]?app[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "manifest_app_url", + "regex": "manifest[_-]?app[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mapbox_access_token", + "regex": "mapbox[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mapbox_api_token", + "regex": "mapbox[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mapbox_aws_access_key_id", + "regex": "mapbox[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mapbox_aws_secret_access_key", + "regex": "mapbox[_-]?aws[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mapboxaccesstoken", + "regex": "mapboxaccesstoken(=| =|:| :)" + } + }, + { + "pattern": { + "name": "master_password", + "regex": "(master_password).+" + } + }, + { + "pattern": { + "name": "mg_api_key", + "regex": "mg[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mg_public_api_key", + "regex": "mg[_-]?public[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mh_apikey", + "regex": "mh[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mh_password", + "regex": "mh[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mile_zero_key", + "regex": "mile[_-]?zero[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "minio_access_key", + "regex": "minio[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "minio_secret_key", + "regex": "minio[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "multi_bob_sid", + "regex": "multi[_-]?bob[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "multi_connect_sid", + "regex": "multi[_-]?connect[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "multi_disconnect_sid", + "regex": "multi[_-]?disconnect[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "multi_workflow_sid", + "regex": "multi[_-]?workflow[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "multi_workspace_sid", + "regex": "multi[_-]?workspace[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "my_secret_env", + "regex": "my[_-]?secret[_-]?env(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mysql_database", + "regex": "mysql[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mysql_hostname", + "regex": "mysql[_-]?hostname(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mysql_password", + "regex": "mysql[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mysql_root_password", + "regex": "mysql[_-]?root[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mysql_user", + "regex": "mysql[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mysql_username", + "regex": "mysql[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mysqlmasteruser", + "regex": "mysqlmasteruser(=| =|:| :)" + } + }, + { + "pattern": { + "name": "mysqlsecret", + "regex": "mysqlsecret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "nativeevents", + "regex": "nativeevents(=| =|:| :)" + } + }, + { + "pattern": { + "name": "netlify_api_key", + "regex": "netlify[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "new_relic_beta_token", + "regex": "new[_-]?relic[_-]?beta[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "nexus_password", + "regex": "nexus[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "nexuspassword", + "regex": "nexuspassword(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ngrok_auth_token", + "regex": "ngrok[_-]?auth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ngrok_token", + "regex": "ngrok[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "node_env", + "regex": "node[_-]?env(=| =|:| :)" + } + }, + { + "pattern": { + "name": "node_pre_gyp_accesskeyid", + "regex": "node[_-]?pre[_-]?gyp[_-]?accesskeyid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "node_pre_gyp_github_token", + "regex": "node[_-]?pre[_-]?gyp[_-]?github[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "node_pre_gyp_secretaccesskey", + "regex": "node[_-]?pre[_-]?gyp[_-]?secretaccesskey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "non_token", + "regex": "non[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "now_token", + "regex": "now[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "npm_api_key", + "regex": "npm[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "npm_api_token", + "regex": "npm[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "npm_auth_token", + "regex": "npm[_-]?auth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "npm_email", + "regex": "npm[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "npm_password", + "regex": "npm[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "npm_secret_key", + "regex": "npm[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "npm_token - 1", + "regex": "npm[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "nuget_api_key - 1", + "regex": "(oy2[a-z0-9]{43})" + } + }, + { + "pattern": { + "name": "nuget_api_key - 2", + "regex": "nuget[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "numbers_service_pass", + "regex": "numbers[_-]?service[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "oauth_token", + "regex": "oauth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "object_storage_password", + "regex": "object[_-]?storage[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "object_storage_region_name", + "regex": "object[_-]?storage[_-]?region[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "object_store_bucket", + "regex": "object[_-]?store[_-]?bucket(=| =|:| :)" + } + }, + { + "pattern": { + "name": "object_store_creds", + "regex": "object[_-]?store[_-]?creds(=| =|:| :)" + } + }, + { + "pattern": { + "name": "oc_pass", + "regex": "oc[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "octest_app_password", + "regex": "octest[_-]?app[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "octest_app_username", + "regex": "octest[_-]?app[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "octest_password", + "regex": "octest[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ofta_key", + "regex": "ofta[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ofta_region", + "regex": "ofta[_-]?region(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ofta_secret", + "regex": "ofta[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "okta_client_token", + "regex": "okta[_-]?client[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "okta_oauth2_client_secret", + "regex": "okta[_-]?oauth2[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "okta_oauth2_clientsecret", + "regex": "okta[_-]?oauth2[_-]?clientsecret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "omise_key", + "regex": "omise[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "omise_pkey", + "regex": "omise[_-]?pkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "omise_pubkey", + "regex": "omise[_-]?pubkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "omise_skey", + "regex": "omise[_-]?skey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "onesignal_api_key", + "regex": "onesignal[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "onesignal_user_auth_key", + "regex": "onesignal[_-]?user[_-]?auth[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "open_whisk_key", + "regex": "open[_-]?whisk[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "openwhisk_key", + "regex": "openwhisk[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "os_auth_url", + "regex": "os[_-]?auth[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "os_password", + "regex": "os[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ossrh_jira_password", + "regex": "ossrh[_-]?jira[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ossrh_pass", + "regex": "ossrh[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ossrh_password", + "regex": "ossrh[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ossrh_secret", + "regex": "ossrh[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ossrh_username", + "regex": "ossrh[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "outlook_team", + "regex": "(https://outlook.office.com/webhook/[0-9a-f-]{36}@)" + } + }, + { + "pattern": { + "name": "packagecloud_token", + "regex": "packagecloud[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "pagerduty_apikey", + "regex": "pagerduty[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "parse_js_key", + "regex": "parse[_-]?js[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "passwordtravis", + "regex": "passwordtravis(=| =|:| :)" + } + }, + { + "pattern": { + "name": "paypal_braintree_access_token", + "regex": "(access_token$production$[0-9a-z]{16}$[0-9a-f]{32})" + } + }, + { + "pattern": { + "name": "paypal_client_secret", + "regex": "paypal[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "percy_project", + "regex": "percy[_-]?project(=| =|:| :)" + } + }, + { + "pattern": { + "name": "percy_token", + "regex": "percy[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "personal_key", + "regex": "personal[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "personal_secret", + "regex": "personal[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "pg_database", + "regex": "pg[_-]?database(=| =|:| :)" + } + }, + { + "pattern": { + "name": "pg_host", + "regex": "pg[_-]?host(=| =|:| :)" + } + }, + { + "pattern": { + "name": "places_api_key", + "regex": "places[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "places_apikey", + "regex": "places[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "plotly_apikey", + "regex": "plotly[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "plugin_password", + "regex": "plugin[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "postgres_env_postgres_db", + "regex": "postgres[_-]?env[_-]?postgres[_-]?db(=| =|:| :)" + } + }, + { + "pattern": { + "name": "postgres_env_postgres_password", + "regex": "postgres[_-]?env[_-]?postgres[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "postgresql_db", + "regex": "postgresql[_-]?db(=| =|:| :)" + } + }, + { + "pattern": { + "name": "postgresql_pass", + "regex": "postgresql[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "prebuild_auth", + "regex": "prebuild[_-]?auth(=| =|:| :)" + } + }, + { + "pattern": { + "name": "preferred_username", + "regex": "preferred[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "pring_mail_username", + "regex": "pring[_-]?mail[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "private_key", + "regex": "-----(?:(?:BEGIN|END) )(?:(?:EC|PGP|DSA|RSA|OPENSSH).)?PRIVATE.KEY(.BLOCK)?-----" + } + }, + { + "pattern": { + "name": "private_signing_password", + "regex": "private[_-]?signing[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "prod_access_key_id", + "regex": "prod[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "prod_password", + "regex": "prod[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "prod_secret_key", + "regex": "prod[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "project_config", + "regex": "project[_-]?config(=| =|:| :)" + } + }, + { + "pattern": { + "name": "publish_access", + "regex": "publish[_-]?access(=| =|:| :)" + } + }, + { + "pattern": { + "name": "publish_key", + "regex": "publish[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "publish_secret", + "regex": "publish[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "pushover_token", + "regex": "pushover[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "pypi_passowrd", + "regex": "pypi[_-]?passowrd(=| =|:| :)" + } + }, + { + "pattern": { + "name": "qiita_token", + "regex": "qiita[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "quip_token", + "regex": "quip[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "rabbitmq_password", + "regex": "rabbitmq[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "randrmusicapiaccesstoken", + "regex": "randrmusicapiaccesstoken(=| =|:| :)" + } + }, + { + "pattern": { + "name": "redis_stunnel_urls", + "regex": "redis[_-]?stunnel[_-]?urls(=| =|:| :)" + } + }, + { + "pattern": { + "name": "rediscloud_url", + "regex": "rediscloud[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "refresh_token", + "regex": "refresh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "registry_pass", + "regex": "registry[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "registry_secure", + "regex": "registry[_-]?secure(=| =|:| :)" + } + }, + { + "pattern": { + "name": "release_gh_token", + "regex": "release[_-]?gh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "release_token", + "regex": "release[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "reporting_webdav_pwd", + "regex": "reporting[_-]?webdav[_-]?pwd(=| =|:| :)" + } + }, + { + "pattern": { + "name": "reporting_webdav_url", + "regex": "reporting[_-]?webdav[_-]?url(=| =|:| :)" + } + }, + { + "pattern": { + "name": "repotoken", + "regex": "repotoken(=| =|:| :)" + } + }, + { + "pattern": { + "name": "rest_api_key", + "regex": "rest[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "rinkeby_private_key", + "regex": "rinkeby[_-]?private[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ropsten_private_key", + "regex": "ropsten[_-]?private[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "route53_access_key_id", + "regex": "route53[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "rtd_key_pass", + "regex": "rtd[_-]?key[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "rtd_store_pass", + "regex": "rtd[_-]?store[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "rubygems_auth_token", + "regex": "rubygems[_-]?auth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_access_key", + "regex": "s3[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_access_key_id", + "regex": "s3[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_bucket_name_app_logs", + "regex": "s3[_-]?bucket[_-]?name[_-]?app[_-]?logs(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_bucket_name_assets", + "regex": "s3[_-]?bucket[_-]?name[_-]?assets(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_external_3_amazonaws_com", + "regex": "s3[_-]?external[_-]?3[_-]?amazonaws[_-]?com(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_key", + "regex": "s3[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_key_app_logs", + "regex": "s3[_-]?key[_-]?app[_-]?logs(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_key_assets", + "regex": "s3[_-]?key[_-]?assets(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_secret_app_logs", + "regex": "s3[_-]?secret[_-]?app[_-]?logs(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_secret_assets", + "regex": "s3[_-]?secret[_-]?assets(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_secret_key", + "regex": "s3[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "s3_user_secret", + "regex": "s3[_-]?user[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sacloud_access_token", + "regex": "sacloud[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sacloud_access_token_secret", + "regex": "sacloud[_-]?access[_-]?token[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sacloud_api", + "regex": "sacloud[_-]?api(=| =|:| :)" + } + }, + { + "pattern": { + "name": "salesforce_bulk_test_password", + "regex": "salesforce[_-]?bulk[_-]?test[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "salesforce_bulk_test_security_token", + "regex": "salesforce[_-]?bulk[_-]?test[_-]?security[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sandbox_access_token", + "regex": "sandbox[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sandbox_aws_access_key_id", + "regex": "sandbox[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sandbox_aws_secret_access_key", + "regex": "sandbox[_-]?aws[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sauce_access_key", + "regex": "sauce[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sauce_token", + "regex": "(sauce.{0,50}(\"|')?[0-9a-f-]{36}(\"|')?)" + } + }, + { + "pattern": { + "name": "scrutinizer_token", + "regex": "scrutinizer[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sdr_token", + "regex": "sdr[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_0", + "regex": "secret[_-]?0(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_1", + "regex": "secret[_-]?1(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_10", + "regex": "secret[_-]?10(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_11", + "regex": "secret[_-]?11(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_2", + "regex": "secret[_-]?2(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_3", + "regex": "secret[_-]?3(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_4", + "regex": "secret[_-]?4(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_5", + "regex": "secret[_-]?5(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_6", + "regex": "secret[_-]?6(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_7", + "regex": "secret[_-]?7(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_8", + "regex": "secret[_-]?8(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_9", + "regex": "secret[_-]?9(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secret_key_base", + "regex": "secret[_-]?key[_-]?base(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secretaccesskey", + "regex": "secretaccesskey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "secretkey", + "regex": "secretkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "segment_api_key", + "regex": "segment[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "selion_log_level_dev", + "regex": "selion[_-]?log[_-]?level[_-]?dev(=| =|:| :)" + } + }, + { + "pattern": { + "name": "selion_selenium_host", + "regex": "selion[_-]?selenium[_-]?host(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sendgrid - 2", + "regex": "sendgrid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sendgrid_api_key - 1", + "regex": "sendgrid[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sendgrid_key", + "regex": "sendgrid[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sendgrid_password", + "regex": "sendgrid[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sendgrid_user", + "regex": "sendgrid[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sendgrid_username", + "regex": "sendgrid[_-]?username(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sendwithus_key", + "regex": "sendwithus[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sentry_auth_token", + "regex": "sentry[_-]?auth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sentry_default_org", + "regex": "sentry[_-]?default[_-]?org(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sentry_endpoint", + "regex": "sentry[_-]?endpoint(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sentry_key", + "regex": "sentry[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "service_account_secret", + "regex": "service[_-]?account[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ses_access_key", + "regex": "ses[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ses_secret_key", + "regex": "ses[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "setdstaccesskey", + "regex": "setdstaccesskey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "setdstsecretkey", + "regex": "setdstsecretkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "setsecretkey", + "regex": "setsecretkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "signing_key", + "regex": "signing[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "signing_key_password", + "regex": "signing[_-]?key[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "signing_key_secret", + "regex": "signing[_-]?key[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "signing_key_sid", + "regex": "signing[_-]?key[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "slack_webhook_url", + "regex": "(hooks.slack.com/services/T[A-Z0-9]{8}/B[A-Z0-9]{8}/[a-zA-Z0-9]{1,})" + } + }, + { + "pattern": { + "name": "slash_developer_space", + "regex": "slash[_-]?developer[_-]?space(=| =|:| :)" + } + }, + { + "pattern": { + "name": "slash_developer_space_key", + "regex": "slash[_-]?developer[_-]?space[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "slate_user_email", + "regex": "slate[_-]?user[_-]?email(=| =|:| :)" + } + }, + { + "pattern": { + "name": "snoowrap_client_secret", + "regex": "snoowrap[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "snoowrap_password", + "regex": "snoowrap[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "snoowrap_refresh_token", + "regex": "snoowrap[_-]?refresh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "snyk_api_token", + "regex": "snyk[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "snyk_token", + "regex": "snyk[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "socrata_app_token", + "regex": "socrata[_-]?app[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "socrata_password", + "regex": "socrata[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonar_organization_key", + "regex": "sonar[_-]?organization[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonar_project_key", + "regex": "sonar[_-]?project[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonar_token", + "regex": "sonar[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonarqube_docs_api_key", + "regex": "(sonar.{0,50}(\"|')?[0-9a-f]{40}(\"|')?)" + } + }, + { + "pattern": { + "name": "sonatype_gpg_key_name", + "regex": "sonatype[_-]?gpg[_-]?key[_-]?name(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonatype_gpg_passphrase", + "regex": "sonatype[_-]?gpg[_-]?passphrase(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonatype_nexus_password", + "regex": "sonatype[_-]?nexus[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonatype_pass", + "regex": "sonatype[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonatype_password", + "regex": "sonatype[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonatype_token_password", + "regex": "sonatype[_-]?token[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonatype_token_user", + "regex": "sonatype[_-]?token[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sonatypepassword", + "regex": "sonatypepassword(=| =|:| :)" + } + }, + { + "pattern": { + "name": "soundcloud_client_secret", + "regex": "soundcloud[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "soundcloud_password", + "regex": "soundcloud[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "spaces_access_key_id", + "regex": "spaces[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "spaces_secret_access_key", + "regex": "spaces[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "spotify_api_access_token", + "regex": "spotify[_-]?api[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "spotify_api_client_secret", + "regex": "spotify[_-]?api[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "spring_mail_password", + "regex": "spring[_-]?mail[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sqsaccesskey", + "regex": "sqsaccesskey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "sqssecretkey", + "regex": "sqssecretkey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "square_app_secret", + "regex": "(sq0[a-z]{3}-[0-9A-Za-z-_]{20,50})" + } + }, + { + "pattern": { + "name": "square_reader_sdk_repository_password", + "regex": "square[_-]?reader[_-]?sdk[_-]?repository[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "srcclr_api_token", + "regex": "srcclr[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ssh_password", + "regex": "(sshpass -p.*['|\"])" + } + }, + { + "pattern": { + "name": "sshpass", + "regex": "sshpass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "ssmtp_config", + "regex": "ssmtp[_-]?config(=| =|:| :)" + } + }, + { + "pattern": { + "name": "staging_base_url_runscope", + "regex": "staging[_-]?base[_-]?url[_-]?runscope(=| =|:| :)" + } + }, + { + "pattern": { + "name": "star_test_aws_access_key_id", + "regex": "star[_-]?test[_-]?aws[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "star_test_bucket", + "regex": "star[_-]?test[_-]?bucket(=| =|:| :)" + } + }, + { + "pattern": { + "name": "star_test_location", + "regex": "star[_-]?test[_-]?location(=| =|:| :)" + } + }, + { + "pattern": { + "name": "star_test_secret_access_key", + "regex": "star[_-]?test[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "starship_account_sid", + "regex": "starship[_-]?account[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "starship_auth_token", + "regex": "starship[_-]?auth[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "stormpath_api_key_id", + "regex": "stormpath[_-]?api[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "stormpath_api_key_secret", + "regex": "stormpath[_-]?api[_-]?key[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "strip_publishable_key", + "regex": "strip[_-]?publishable[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "strip_secret_key", + "regex": "strip[_-]?secret[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "stripe_private", + "regex": "stripe[_-]?private(=| =|:| :)" + } + }, + { + "pattern": { + "name": "stripe_public", + "regex": "stripe[_-]?public(=| =|:| :)" + } + }, + { + "pattern": { + "name": "stripe_restricted_api", + "regex": "(rk_live_[0-9a-zA-Z]{24,34})" + } + }, + { + "pattern": { + "name": "stripe_standard_api", + "regex": "(sk_live_[0-9a-zA-Z]{24,34})" + } + }, + { + "pattern": { + "name": "surge_login", + "regex": "surge[_-]?login(=| =|:| :)" + } + }, + { + "pattern": { + "name": "surge_token", + "regex": "surge[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "svn_pass", + "regex": "svn[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "tesco_api_key", + "regex": "tesco[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "test_github_token", + "regex": "test[_-]?github[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "test_test", + "regex": "test[_-]?test(=| =|:| :)" + } + }, + { + "pattern": { + "name": "tester_keys_password", + "regex": "tester[_-]?keys[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "thera_oss_access_key", + "regex": "thera[_-]?oss[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "token_core_java", + "regex": "token[_-]?core[_-]?java(=| =|:| :)" + } + }, + { + "pattern": { + "name": "travis_access_token", + "regex": "travis[_-]?access[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "travis_api_token", + "regex": "travis[_-]?api[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "travis_branch", + "regex": "travis[_-]?branch(=| =|:| :)" + } + }, + { + "pattern": { + "name": "travis_com_token", + "regex": "travis[_-]?com[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "travis_e2e_token", + "regex": "travis[_-]?e2e[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "travis_gh_token", + "regex": "travis[_-]?gh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "travis_pull_request", + "regex": "travis[_-]?pull[_-]?request(=| =|:| :)" + } + }, + { + "pattern": { + "name": "travis_secure_env_vars", + "regex": "travis[_-]?secure[_-]?env[_-]?vars(=| =|:| :)" + } + }, + { + "pattern": { + "name": "travis_token", + "regex": "travis[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "trex_client_token", + "regex": "trex[_-]?client[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "trex_okta_client_token", + "regex": "trex[_-]?okta[_-]?client[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twilio_api_key", + "regex": "twilio[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twilio_api_secret", + "regex": "twilio[_-]?api[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twilio_chat_account_api_service", + "regex": "twilio[_-]?chat[_-]?account[_-]?api[_-]?service(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twilio_configuration_sid", + "regex": "twilio[_-]?configuration[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twilio_sid", + "regex": "twilio[_-]?sid(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twilio_token", + "regex": "twilio[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twine_password", + "regex": "twine[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twitter_consumer_key", + "regex": "twitter[_-]?consumer[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twitter_consumer_secret", + "regex": "twitter[_-]?consumer[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twitteroauthaccesssecret", + "regex": "twitteroauthaccesssecret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "twitteroauthaccesstoken", + "regex": "twitteroauthaccesstoken(=| =|:| :)" + } + }, + { + "pattern": { + "name": "unity_password", + "regex": "unity[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "unity_serial", + "regex": "unity[_-]?serial(=| =|:| :)" + } + }, + { + "pattern": { + "name": "urban_key", + "regex": "urban[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "urban_master_secret", + "regex": "urban[_-]?master[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "urban_secret", + "regex": "urban[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "us_east_1_elb_amazonaws_com", + "regex": "us[_-]?east[_-]?1[_-]?elb[_-]?amazonaws[_-]?com(=| =|:| :)" + } + }, + { + "pattern": { + "name": "use_ssh", + "regex": "use[_-]?ssh(=| =|:| :)" + } + }, + { + "pattern": { + "name": "user_assets_access_key_id", + "regex": "user[_-]?assets[_-]?access[_-]?key[_-]?id(=| =|:| :)" + } + }, + { + "pattern": { + "name": "user_assets_secret_access_key", + "regex": "user[_-]?assets[_-]?secret[_-]?access[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "usertravis", + "regex": "usertravis(=| =|:| :)" + } + }, + { + "pattern": { + "name": "v_sfdc_client_secret", + "regex": "v[_-]?sfdc[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "v_sfdc_password", + "regex": "v[_-]?sfdc[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "vip_github_build_repo_deploy_key", + "regex": "vip[_-]?github[_-]?build[_-]?repo[_-]?deploy[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "vip_github_deploy_key", + "regex": "vip[_-]?github[_-]?deploy[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "vip_github_deploy_key_pass", + "regex": "vip[_-]?github[_-]?deploy[_-]?key[_-]?pass(=| =|:| :)" + } + }, + { + "pattern": { + "name": "virustotal_apikey", + "regex": "virustotal[_-]?apikey(=| =|:| :)" + } + }, + { + "pattern": { + "name": "visual_recognition_api_key", + "regex": "visual[_-]?recognition[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "vscetoken", + "regex": "vscetoken(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wakatime_api_key", + "regex": "wakatime[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "watson_conversation_password", + "regex": "watson[_-]?conversation[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "watson_device_password", + "regex": "watson[_-]?device[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "watson_password", + "regex": "watson[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "widget_basic_password", + "regex": "widget[_-]?basic[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "widget_basic_password_2", + "regex": "widget[_-]?basic[_-]?password[_-]?2(=| =|:| :)" + } + }, + { + "pattern": { + "name": "widget_basic_password_3", + "regex": "widget[_-]?basic[_-]?password[_-]?3(=| =|:| :)" + } + }, + { + "pattern": { + "name": "widget_basic_password_4", + "regex": "widget[_-]?basic[_-]?password[_-]?4(=| =|:| :)" + } + }, + { + "pattern": { + "name": "widget_basic_password_5", + "regex": "widget[_-]?basic[_-]?password[_-]?5(=| =|:| :)" + } + }, + { + "pattern": { + "name": "widget_fb_password", + "regex": "widget[_-]?fb[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "widget_fb_password_2", + "regex": "widget[_-]?fb[_-]?password[_-]?2(=| =|:| :)" + } + }, + { + "pattern": { + "name": "widget_fb_password_3", + "regex": "widget[_-]?fb[_-]?password[_-]?3(=| =|:| :)" + } + }, + { + "pattern": { + "name": "widget_test_server", + "regex": "widget[_-]?test[_-]?server(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wincert_password", + "regex": "wincert[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wordpress_db_password", + "regex": "wordpress[_-]?db[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wordpress_db_user", + "regex": "wordpress[_-]?db[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wpjm_phpunit_google_geocode_api_key", + "regex": "wpjm[_-]?phpunit[_-]?google[_-]?geocode[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wporg_password", + "regex": "wporg[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wpt_db_password", + "regex": "wpt[_-]?db[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wpt_db_user", + "regex": "wpt[_-]?db[_-]?user(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wpt_prepare_dir", + "regex": "wpt[_-]?prepare[_-]?dir(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wpt_report_api_key", + "regex": "wpt[_-]?report[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wpt_ssh_connect", + "regex": "wpt[_-]?ssh[_-]?connect(=| =|:| :)" + } + }, + { + "pattern": { + "name": "wpt_ssh_private_key_base64", + "regex": "wpt[_-]?ssh[_-]?private[_-]?key[_-]?base64(=| =|:| :)" + } + }, + { + "pattern": { + "name": "www_googleapis_com", + "regex": "www[_-]?googleapis[_-]?com(=| =|:| :)" + } + }, + { + "pattern": { + "name": "yangshun_gh_password", + "regex": "yangshun[_-]?gh[_-]?password(=| =|:| :)" + } + }, + { + "pattern": { + "name": "yangshun_gh_token", + "regex": "yangshun[_-]?gh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "yt_account_client_secret", + "regex": "yt[_-]?account[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "yt_account_refresh_token", + "regex": "yt[_-]?account[_-]?refresh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "yt_api_key", + "regex": "yt[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "yt_client_secret", + "regex": "yt[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "yt_partner_client_secret", + "regex": "yt[_-]?partner[_-]?client[_-]?secret(=| =|:| :)" + } + }, + { + "pattern": { + "name": "yt_partner_refresh_token", + "regex": "yt[_-]?partner[_-]?refresh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "yt_server_api_key", + "regex": "yt[_-]?server[_-]?api[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "zendesk_travis_github", + "regex": "zendesk[_-]?travis[_-]?github(=| =|:| :)" + } + }, + { + "pattern": { + "name": "zensonatypepassword", + "regex": "zensonatypepassword(=| =|:| :)" + } + }, + { + "pattern": { + "name": "zhuliang_gh_token", + "regex": "zhuliang[_-]?gh[_-]?token(=| =|:| :)" + } + }, + { + "pattern": { + "name": "zopim_account_key", + "regex": "zopim[_-]?account[_-]?key(=| =|:| :)" + } + }, + { + "pattern": { + "name": "times", + "regex": "\\d{1,2}:\\d{2} ?(?:[ap]\\.?m\\.?)?|\\d[ap]\\.?m\\.?", + "confidence": "high" + } + }, + { + "pattern": { + "name": "phones", + "regex": "((?:(?\\s*?[\\S\\s]*?[\\S\\s]*?<\\/pwentry>\\s*?<\\/pwlist>", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Large number of US Phone Numbers", + "regex": "\\d{3}-\\d{3}-\\d{4}|\\(\\d{3}\\)\\ ?\\d{3}-?\\d{4}", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Large number of US Zip Codes", + "regex": "^(\\d{5}-\\d{4}|\\d{5})$", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Lightweight Directory Access Protocol", + "regex": "(?:dn|cn|dc|sn):\\s*[a-zA-Z0-9=, ]*", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Metasploit Module", + "regex": "require\\ 'msf/core'|class\\ Metasploit|include\\ Msf::Exploit::\\w+::\\w+", + "confidence": "high" + } + }, + { + "pattern": { + "name": "MySQL database dump", + "regex": "DROP DATABASE IF EXISTS(?:.|\\n){5,300}CREATE DATABASE(?:.|\\n){5,300}DROP TABLE IF EXISTS(?:.|\\n){5,300}CREATE TABLE", + "confidence": "high" + } + }, + { + "pattern": { + "name": "MySQLite database dump", + "regex": "DROP\\ TABLE\\ IF\\ EXISTS\\ \\[[a-zA-Z]*\\];|CREATE\\ TABLE\\ \\[[a-zA-Z]*\\];", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Network Proxy Auto-Config", + "regex": "proxy\\.pac|function\\ FindProxyForURL\\(\\w+,\\ \\w+\\)", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Nmap Scan Report", + "regex": "Nmap\\ scan\\ report\\ for\\ [a-zA-Z0-9.]+", + "confidence": "high" + } + }, + { + "pattern": { + "name": "PGP Header", + "regex": "-{5}(?:BEGIN|END)\\ PGP\\ MESSAGE-{5}", + "confidence": "high" + } + }, + { + "pattern": { + "name": "PGP Private Key Block", + "regex": "-----BEGIN PGP PRIVATE KEY BLOCK-----(?:.|\\s)+?-----END PGP PRIVATE KEY BLOCK-----", + "confidence": "high" + } + }, + { + "pattern": { + "name": "PKCS7 Encrypted Data", + "regex": "(?:Signer|Recipient)Info(?:s)?\\ ::=\\ \\w+|[D|d]igest(?:Encryption)?Algorithm|EncryptedKey\\ ::= \\w+", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Password etc passwd", + "regex": "[a-zA-Z0-9\\-]+:[x|\\*]:\\d+:\\d+:[a-zA-Z0-9/\\- \"]*:/[a-zA-Z0-9/\\-]*:/[a-zA-Z0-9/\\-]+", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Password etc shadow", + "regex": "[a-zA-Z0-9\\-]+:(?:(?:!!?)|(?:\\*LOCK\\*?)|\\*|(?:\\*LCK\\*?)|(?:\\$.*\\$.*\\$.*?)?):\\d*:\\d*:\\d*:\\d*:\\d*:\\d*:", + "confidence": "high" + } + }, + { + "pattern": { + "name": "PlainText Private Key", + "regex": "-----BEGIN PRIVATE KEY-----(?:.|\\s)+?-----END PRIVATE KEY-----", + "confidence": "high" + } + }, + { + "pattern": { + "name": "PuTTY SSH DSA Key", + "regex": "PuTTY-User-Key-File-2: ssh-dss\\s*Encryption: none(?:.|\\s?)*?Private-MAC:", + "confidence": "high" + } + }, + { + "pattern": { + "name": "PuTTY SSH RSA Key", + "regex": "PuTTY-User-Key-File-2: ssh-rsa\\s*Encryption: none(?:.|\\s?)*?Private-MAC:", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Public Key Cryptography System (PKCS)", + "regex": "protocol=\"application/x-pkcs[0-9]{0,2}-signature\"", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Public encrypted key", + "regex": "-----BEGIN PUBLIC KEY-----(?:.|\\s)+?-----END PUBLIC KEY-----", + "confidence": "high" + } + }, + { + "pattern": { + "name": "RSA Private Key", + "regex": "-----BEGIN RSA PRIVATE KEY-----(?:[a-zA-Z0-9\\+\\=\\/\"']|\\s)+?-----END RSA PRIVATE KEY-----", + "confidence": "high" + } + }, + { + "pattern": { + "name": "SSL Certificate", + "regex": "-----BEGIN CERTIFICATE-----(?:.|\\n)+?\\s-----END CERTIFICATE-----", + "confidence": "high" + } + }, + { + "pattern": { + "name": "SWIFT Codes", + "regex": "[A-Za-z]{4}(?:GB|US|DE|RU|CA|JP|CN)[0-9a-zA-Z]{2,5}$", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Samba Password config file", + "regex": "[a-z]*:\\d{3}:[0-9a-zA-Z]*:[0-9a-zA-Z]*:\\[U\\ \\]:.*", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Slack 2FA Backup Codes", + "regex": "Two-Factor\\s*\\S*Authentication\\s*\\S*Backup\\s*\\S*Codes(?:.|\\n)*[Ss]lack(?:.|\\n)*\\d{9}", + "confidence": "high" + } + }, + { + "pattern": { + "name": "UK Drivers License Numbers", + "regex": "[A-Z]{5}\\d{6}[A-Z]{2}\\d{1}[A-Z]{2}", + "confidence": "high" + } + }, + { + "pattern": { + "name": "UK Passport Number", + "regex": "\\d{10}GB[RP]\\d{7}[UMF]{1}\\d{9}", + "confidence": "high" + } + }, + { + "pattern": { + "name": "USBank Routing Numbers - California", + "regex": "^12(?:1122676|2235821)$", + "confidence": "high" + } + }, + { + "pattern": { + "name": "United Bank Routing Number - California", + "regex": "^122243350$", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Wells Fargo Routing Numbers - California", + "regex": "^121042882$", + "confidence": "high" + } + }, + { + "pattern": { + "name": "aws_access_key", + "regex": "((access[-_]?key[-_]?id)|(ACCESS[-_]?KEY[-_]?ID)|([Aa]ccessKeyId)|(access[_-]?id)).{0,20}AKIA[a-zA-Z0-9+/]{16}[^a-zA-Z0-9+/]", + "confidence": "high" + } + }, + { + "pattern": { + "name": "aws_credentials_context", + "regex": "access_key_id|secret_access_key|AssetSync.configure", + "confidence": "high" + } + }, + { + "pattern": { + "name": "aws_secret_key", + "regex": "((secret[-_]?access[-_]?key)|(SECRET[-_]?ACCESS[-_]?KEY|(private[-_]?key))|([Ss]ecretAccessKey)).{0,20}[^a-zA-Z0-9+/][a-zA-Z0-9+/]{40}\\b", + "confidence": "high" + } + }, + { + "pattern": { + "name": "facebook_secret", + "regex": "(facebook_secret|FACEBOOK_SECRET|facebook_app_secret|FACEBOOK_APP_SECRET)[a-z_ =\\s\"'\\:]{0,5}[^a-zA-Z0-9][a-f0-9]{32}[^a-zA-Z0-9]", + "confidence": "high" + } + }, + { + "pattern": { + "name": "github_key", + "regex": "(GITHUB_SECRET|GITHUB_KEY|github_secret|github_key|github_token|GITHUB_TOKEN|github_api_key|GITHUB_API_KEY)[a-z_ =\\s\"'\\:]{0,10}[^a-zA-Z0-9][a-zA-Z0-9]{40}[^a-zA-Z0-9]", + "confidence": "high" + } + }, + { + "pattern": { + "name": "google_two_factor_backup", + "regex": "(?:BACKUP VERIFICATION CODES|SAVE YOUR BACKUP CODES)[\\s\\S]{0,300}@", + "confidence": "high" + } + }, + { + "pattern": { + "name": "heroku_key", + "regex": "(heroku_api_key|HEROKU_API_KEY|heroku_secret|HEROKU_SECRET)[a-z_ =\\s\"'\\:]{0,10}[^a-zA-Z0-9-]\\w{8}(?:-\\w{4}){3}-\\w{12}[^a-zA-Z0-9\\-]", + "confidence": "high" + } + }, + { + "pattern": { + "name": "microsoft_office_365_oauth_context", + "regex": "https://login.microsoftonline.com/common/oauth2/v2.0/token|https://login.windows.net/common/oauth2/token", + "confidence": "high" + } + }, + { + "pattern": { + "name": "pgSQL Connection Information", + "regex": "(?:postgres|pgsql)\\:\\/\\/", + "confidence": "high" + } + }, + { + "pattern": { + "name": "slack_api_key", + "regex": "(slack_api_key|SLACK_API_KEY|slack_key|SLACK_KEY)[a-z_ =\\s\"'\\:]{0,10}[^a-f0-9][a-f0-9]{32}[^a-f0-9]", + "confidence": "high" + } + }, + { + "pattern": { + "name": "slack_api_token", + "regex": "(xox[pb](?:-[a-zA-Z0-9]+){4,})", + "confidence": "high" + } + }, + { + "pattern": { + "name": "ssh_dss_public", + "regex": "ssh-dss [0-9A-Za-z+/]+[=]{2}", + "confidence": "high" + } + }, + { + "pattern": { + "name": "ssh_rsa_public", + "regex": "ssh-rsa AAAA[0-9A-Za-z+/]+[=]{0,3} [^@]+@[^@]+", + "confidence": "high" + } + }, + { + "pattern": { + "name": "IBAN", + "regex": "[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}", + "confidence": "high" + } + }, + { + "pattern": { + "name": "GPS Data", + "regex": "^([-+]?)([\\d]{1,2})(((\\.)(\\d+)(,)))(\\s*)(([-+]?)([\\d]{1,3})((\\.)(\\d+))?)", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Blood Type", + "regex": "^(A|B|AB|O)[-+]$", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Date of Birth - 2", + "regex": "^([1-9]|[12][0-9]|3[01])(\\/?\\.\\-?\\-?\\s?)(0[1-9]|1[12])(\\/?\\.?\\-?\\s?)(19[0-9][0-9]|20[0][0-9]|20[1][0-8])$", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Tax Number", + "regex": "^[0-9]{10}$", + "confidence": "high" + } + }, + { + "pattern": { + "name": "Bitcoin Address", + "regex": "^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$", + "confidence": "high" + } + } + ] +} \ No newline at end of file diff --git a/packages/logger/test/helpers.js b/packages/logger/test/helpers.js index 869665533..b0551c1fc 100644 --- a/packages/logger/test/helpers.js +++ b/packages/logger/test/helpers.js @@ -77,9 +77,22 @@ const helpers = { } }, + // Sync hard/soft reset. Clearing memory before detaching the singleton + // closes a race where a group bound to the old instance (e.g. percy.log + // captured at construction time) pushes entries after the detach. reset(soft) { - if (soft) logger.loglevel('info'); - else delete logger.constructor.instance; + if (soft) { + logger.loglevel('info'); + } else { + const existing = logger.constructor.instance; + if (existing) { + try { existing.clearMemory?.(); } catch (_) {} + // Fire-and-forget disk cleanup; the process-exit registry is the + // ultimate backstop. + existing.dispose?.().catch(() => {}); + } + delete logger.constructor.instance; + } helpers.stdout.length = 0; helpers.stderr.length = 0; @@ -92,7 +105,7 @@ const helpers = { }, dump() { - let msgs = Array.from(logger.instance.messages); + let msgs = logger.instance.toArray ? logger.instance.toArray() : []; if (!msgs.length) return; let log = m => process.env.__PERCY_BROWSERIFIED__ ? ( diff --git a/packages/logger/test/hybrid-log-store.test.js b/packages/logger/test/hybrid-log-store.test.js new file mode 100644 index 000000000..6ca60fc5e --- /dev/null +++ b/packages/logger/test/hybrid-log-store.test.js @@ -0,0 +1,472 @@ +import os from 'os'; +import path from 'path'; +import { promises as fsp } from 'fs'; +import { + HybridLogStore, snapshotKey, safeStringify, sanitizeMeta, + sweepOrphans, __resetOrphanGuard, DIR_PREFIX, + isUnsafeWindowsTmpdir, raceEndAgainstDestroy, tryDiskWrite +} from '@percy/logger/hybrid-log-store'; + +const wait = ms => new Promise(r => setTimeout(r, ms)); + +function mkEntry(over = {}) { + return { + debug: 'test', + level: 'info', + message: 'hello', + meta: {}, + timestamp: Date.now(), + error: false, + ...over + }; +} + +describe('HybridLogStore', () => { + let store; + + afterEach(async () => { + if (store) { try { await store.reset(); } catch (_) {} } + store = null; + }); + + describe('push + query', () => { + it('stores global entries in the ring', () => { + store = new HybridLogStore({ forceInMemory: true }); + store.push(mkEntry({ message: 'one' })); + store.push(mkEntry({ message: 'two' })); + const results = store.query(() => true); + expect(results.length).toBe(2); + expect(results[0].message).toBe('one'); + expect(results[1].message).toBe('two'); + }); + + it('routes snapshot-tagged entries to buckets and keeps them in the ring', () => { + store = new HybridLogStore({ forceInMemory: true }); + store.push(mkEntry({ meta: { snapshot: { name: 'home' } } })); + store.push(mkEntry({ meta: { snapshot: { name: 'home' } } })); + store.push(mkEntry({ meta: { snapshot: { name: 'about' } } })); + store.push(mkEntry({ message: 'global' })); + + expect(store.query(e => e.meta?.snapshot?.name === 'home').length).toBe(2); + expect(store.query(e => e.meta?.snapshot?.name === 'about').length).toBe(1); + expect(store.query(e => e.message === 'global').length).toBe(1); + }); + + it('applies filter predicate', () => { + store = new HybridLogStore({ forceInMemory: true }); + store.push(mkEntry({ level: 'info' })); + store.push(mkEntry({ level: 'warn' })); + store.push(mkEntry({ level: 'error' })); + expect(store.query(e => e.level === 'warn').length).toBe(1); + }); + }); + + describe('evictSnapshot', () => { + it('deletes the bucket index but leaves ring entries visible', () => { + store = new HybridLogStore({ forceInMemory: true }); + store.push(mkEntry({ meta: { snapshot: { name: 'a' } } })); + store.push(mkEntry({ meta: { snapshot: { name: 'b' } } })); + store.evictSnapshot(snapshotKey({ snapshot: { name: 'a' } })); + expect(store.query(e => e.meta?.snapshot?.name === 'a').length).toBe(1); + expect(store.query(e => e.meta?.snapshot?.name === 'b').length).toBe(1); + }); + + it('is idempotent on unknown key', () => { + store = new HybridLogStore({ forceInMemory: true }); + expect(() => store.evictSnapshot('never-existed')).not.toThrow(); + expect(() => store.evictSnapshot(null)).not.toThrow(); + }); + }); + + describe('ring wrap', () => { + it('overwrites oldest entries when ringCap exceeded', () => { + store = new HybridLogStore({ ringCap: 3, forceInMemory: true }); + store.push(mkEntry({ message: 'a' })); + store.push(mkEntry({ message: 'b' })); + store.push(mkEntry({ message: 'c' })); + store.push(mkEntry({ message: 'd' })); + const all = store.query(() => true); + expect(all.map(e => e.message)).toEqual(['b', 'c', 'd']); + }); + }); + + describe('reset and dispose', () => { + it('reset clears in-memory state', async () => { + store = new HybridLogStore({ forceInMemory: true }); + store.push(mkEntry()); + expect(store.query(() => true).length).toBe(1); + await store.reset(); + expect(store.query(() => true).length).toBe(0); + }); + + it('dispose tears down without reinit', async () => { + store = new HybridLogStore({ forceInMemory: true }); + store.push(mkEntry()); + await store.dispose(); + expect(store.query(() => true).length).toBe(0); + expect(store.inMemoryOnly).toBeTrue(); + store = null; + }); + }); + + describe('disk mode', () => { + it('writes a JSONL file and readBack yields all entries', async () => { + store = new HybridLogStore({}); + store.push(mkEntry({ message: 'a' })); + store.push(mkEntry({ message: 'b' })); + store.push(mkEntry({ message: 'c' })); + await wait(50); + + const back = []; + for await (const e of store.readBack()) back.push(e); + expect(back.map(e => e.message).sort()).toEqual(['a', 'b', 'c']); + + const files = await fsp.readdir(store.spillDir); + expect(files).toContain('build.log.jsonl'); + expect(files).toContain('pid'); + }); + + it('forceInMemory skips disk entirely', () => { + store = new HybridLogStore({ forceInMemory: true }); + expect(store.inMemoryOnly).toBeTrue(); + expect(store.spillDir).toBeNull(); + }); + }); + + describe('memory-first invariant', () => { + it('keeps the in-memory copy even when disk is off', () => { + store = new HybridLogStore({ forceInMemory: true }); + store.push(mkEntry({ message: 'must-survive' })); + expect(store.query(e => e.message === 'must-survive').length).toBe(1); + }); + }); + + describe('readBack fallback', () => { + it('yields in-memory entries when disk is unavailable', async () => { + store = new HybridLogStore({ forceInMemory: true }); + store.push(mkEntry({ message: 'x' })); + store.push(mkEntry({ message: 'y' })); + const back = []; + for await (const e of store.readBack()) back.push(e); + expect(back.map(e => e.message)).toEqual(['x', 'y']); + }); + + it('falls back to in-memory when the spill file cannot be read', async () => { + store = new HybridLogStore({}); + store.push(mkEntry({ message: 'pre-unlink', timestamp: Date.now() })); + await wait(50); + await fsp.unlink(path.join(store.spillDir, 'build.log.jsonl')); + store.push(mkEntry({ message: 'post-unlink', timestamp: Date.now() + 1 })); + + const back = []; + for await (const e of store.readBack()) back.push(e); + const messages = back.map(e => e.message); + expect(messages).toContain('pre-unlink'); + expect(messages).toContain('post-unlink'); + }); + }); + + describe('disk-mode failure paths', () => { + it('falls back to in-memory when initDisk fails', async () => { + // Force os.tmpdir() to resolve to a non-existent path. mkdtempSync + // throws ENOENT, the constructor's catch calls transitionToMemory, + // and the store is usable in memory-only mode. + const oldTmp = process.env.TMPDIR; + process.env.TMPDIR = '/no/such/dir/per-7809-' + Date.now(); + try { + const s = new HybridLogStore({}); + expect(s.inMemoryOnly).toBeTrue(); + expect(s.spillDir).toBeNull(); + expect(s.lastFallbackError).toBeDefined(); + s.push(mkEntry({ message: 'memory-only' })); + expect(s.query(() => true).length).toBe(1); + await s.dispose(); + } finally { + if (oldTmp == null) delete process.env.TMPDIR; + else process.env.TMPDIR = oldTmp; + } + }); + }); +}); + +describe('isUnsafeWindowsTmpdir', () => { + it('returns false on non-Windows regardless of path shape', () => { + expect(isUnsafeWindowsTmpdir('C:\\Windows\\Temp', false)).toBeFalse(); + expect(isUnsafeWindowsTmpdir('/tmp', false)).toBeFalse(); + }); + + it('flags C:\\Windows\\Temp on Windows (case-insensitive)', () => { + expect(isUnsafeWindowsTmpdir('C:\\Windows\\Temp', true)).toBeTrue(); + expect(isUnsafeWindowsTmpdir('c:\\windows\\temp', true)).toBeTrue(); + expect(isUnsafeWindowsTmpdir('D:\\Windows\\Temp', true)).toBeTrue(); + }); + + it('allows any other path on Windows', () => { + expect(isUnsafeWindowsTmpdir('C:\\Users\\me\\AppData\\Local\\Temp', true)).toBeFalse(); + expect(isUnsafeWindowsTmpdir('C:\\tmp', true)).toBeFalse(); + }); +}); + +describe('tryDiskWrite', () => { + function fakeWriter({ writableLength = 0, writeReturns = true, throwOnWrite = null } = {}) { + return { + writableLength, + written: [], + write(chunk) { + if (throwOnWrite) throw throwOnWrite; + this.written.push(chunk); + return writeReturns; + } + }; + } + + it('writes straight through when under the buffer cap', () => { + const w = fakeWriter({ writableLength: 0 }); + const res = tryDiskWrite(w, { message: 'x' }, { needsDrain: false, maxBuffer: 1024 }); + expect(res.needsDrain).toBeFalse(); + expect(res.queuedOnly).toBeUndefined(); + expect(res.err).toBeUndefined(); + expect(w.written.length).toBe(1); + }); + + it('skips disk and flips needsDrain once writableLength exceeds the cap', () => { + const w = fakeWriter({ writableLength: 2048 }); + const res = tryDiskWrite(w, { message: 'x' }, { needsDrain: false, maxBuffer: 1024 }); + expect(res.needsDrain).toBeTrue(); + expect(res.queuedOnly).toBeTrue(); + expect(w.written.length).toBe(0); + }); + + it('stays queuedOnly when needsDrain was already true', () => { + const w = fakeWriter({ writableLength: 0 }); + const res = tryDiskWrite(w, { message: 'x' }, { needsDrain: true, maxBuffer: 1024 }); + expect(res.needsDrain).toBeTrue(); + expect(res.queuedOnly).toBeTrue(); + expect(w.written.length).toBe(0); + }); + + it('flips needsDrain when write() returns false (kernel pushback)', () => { + const w = fakeWriter({ writableLength: 0, writeReturns: false }); + const res = tryDiskWrite(w, { message: 'x' }, { needsDrain: false, maxBuffer: 1024 }); + expect(res.needsDrain).toBeTrue(); + expect(res.queuedOnly).toBeUndefined(); + expect(w.written.length).toBe(1); + }); + + it('captures a sync write() exception in the err field', () => { + const boom = new Error('boom'); + const w = fakeWriter({ throwOnWrite: boom }); + const res = tryDiskWrite(w, { message: 'x' }, { needsDrain: false, maxBuffer: 1024 }); + expect(res.err).toBe(boom); + expect(w.written.length).toBe(0); + }); +}); + +describe('raceEndAgainstDestroy', () => { + it('resolves on the first end() callback', async () => { + let destroyed = false; + const writer = { + end(cb) { setImmediate(cb); }, + destroy() { destroyed = true; } + }; + await raceEndAgainstDestroy(writer, 200); + expect(destroyed).toBeFalse(); + }); + + it('calls destroy() when end() hangs past the timeout', async () => { + let destroyed = false; + const writer = { + end() { /* never call the callback */ }, + destroy() { destroyed = true; } + }; + await raceEndAgainstDestroy(writer, 10); + expect(destroyed).toBeTrue(); + }); + + it('swallows destroy() errors', async () => { + const writer = { + end() { /* never */ }, + destroy() { throw new Error('destroy failed'); } + }; + await expectAsync(raceEndAgainstDestroy(writer, 10)).toBeResolved(); + }); +}); + +describe('snapshotKey', () => { + it('returns null when meta is missing', () => { + expect(snapshotKey()).toBe(null); + expect(snapshotKey(null)).toBe(null); + expect(snapshotKey({})).toBe(null); + expect(snapshotKey({ snapshot: {} })).toBe(null); + }); + + it('returns a key when name is present', () => { + expect(snapshotKey({ snapshot: { name: 'home' } })).toBe(' home'); + }); + + it('includes testCase when present', () => { + expect(snapshotKey({ snapshot: { testCase: 'auth', name: 'login' } })) + .toBe('auth login'); + }); + + it('treats null and empty testCase equivalently', () => { + expect(snapshotKey({ snapshot: { testCase: null, name: 'x' } })) + .toBe(snapshotKey({ snapshot: { testCase: '', name: 'x' } })); + }); + + it('is stable across equal meta shapes', () => { + const k1 = snapshotKey({ snapshot: { testCase: 'a', name: 'b' } }); + const k2 = snapshotKey({ snapshot: { testCase: 'a', name: 'b' } }); + expect(k1).toBe(k2); + }); +}); + +describe('safeStringify', () => { + it('survives circular references', () => { + const a = { name: 'root' }; + a.self = a; + expect(safeStringify(a)).toBe('{"name":"root","self":"[Circular]"}'); + }); + + it('flattens Error instances', () => { + const err = new TypeError('boom'); + const parsed = JSON.parse(safeStringify({ err })); + expect(parsed.err.name).toBe('TypeError'); + expect(parsed.err.message).toBe('boom'); + expect(typeof parsed.err.stack).toBe('string'); + }); + + it('encodes Buffer as base64', () => { + const parsed = JSON.parse(safeStringify({ b: Buffer.from('hello') })); + expect(parsed.b).toEqual({ type: 'Buffer', base64: 'aGVsbG8=' }); + }); + + it('encodes a top-level Buffer via the Buffer.isBuffer fallback', () => { + // When a Buffer is not the value of a key, its toJSON() still fires + // and yields {type, data}. We also handle the defensive case where + // someone passes a raw Buffer whose toJSON has been stripped. + const bareBuffer = Buffer.from('raw'); + Object.defineProperty(bareBuffer, 'toJSON', { value: undefined, configurable: true }); + const out = JSON.parse(safeStringify({ b: bareBuffer })); + expect(out.b).toEqual({ type: 'Buffer', base64: 'cmF3' }); + }); + + it('stringifies BigInt', () => { + expect(safeStringify({ n: BigInt(42) })).toBe('{"n":"42"}'); + }); + + it('drops Function and Symbol', () => { + expect(safeStringify({ f: () => 1, s: Symbol('x'), ok: 1 })) + .toBe('{"ok":1}'); + }); + + it('redacts secrets in deeply nested strings', () => { + const out = JSON.parse(safeStringify({ + request: { headers: { Authorization: 'Bearer AKIAIOSFODNN7EXAMPLE' } } + })); + expect(out.request.headers.Authorization).not.toContain('AKIAIOSFODNN7EXAMPLE'); + expect(out.request.headers.Authorization).toContain('[REDACTED]'); + }); +}); + +describe('sanitizeMeta', () => { + it('returns primitives unchanged', () => { + expect(sanitizeMeta(null)).toBe(null); + expect(sanitizeMeta(undefined)).toBe(undefined); + expect(sanitizeMeta(5)).toBe(5); + }); + + it('returns a plain redacted clone', () => { + const out = sanitizeMeta({ token: 'AKIAIOSFODNN7EXAMPLE', name: 'home' }); + expect(out.token).toBe('[REDACTED]'); + expect(out.name).toBe('home'); + }); + + it('handles circular without throwing', () => { + const a = { name: 'x' }; a.self = a; + expect(() => sanitizeMeta(a)).not.toThrow(); + }); +}); + +describe('sweepOrphans', () => { + let base; + beforeEach(async () => { + __resetOrphanGuard(); + base = await fsp.mkdtemp(path.join(os.tmpdir(), 'percy-sweep-test-')); + }); + afterEach(async () => { + try { await fsp.rm(base, { recursive: true, force: true }); } catch (_) {} + }); + + async function mkSpillDir(name, { mtime, pid, withPidFile = true } = {}) { + const dir = path.join(base, name); + await fsp.mkdir(dir, { recursive: true }); + await fsp.writeFile(path.join(dir, 'build.log.jsonl'), 'x'.repeat(100)); + if (withPidFile) await fsp.writeFile(path.join(dir, 'pid'), String(pid ?? 999999999)); + if (mtime) await fsp.utimes(dir, mtime, mtime); + return dir; + } + + it('removes directories older than 24h', async () => { + const old = await mkSpillDir(`${DIR_PREFIX}old-aaaa`, { + mtime: new Date(Date.now() - 48 * 3600 * 1000) + }); + const fresh = await mkSpillDir(`${DIR_PREFIX}fresh-bbbb`, { mtime: new Date() }); + + const res = await sweepOrphans(base); + expect(res.removed).toBe(1); + await expectAsync(fsp.stat(old)).toBeRejected(); + await expectAsync(fsp.stat(fresh)).toBeResolved(); + }); + + it('ignores non-matching directories', async () => { + const other = path.join(base, 'other-dir'); + await fsp.mkdir(other, { recursive: true }); + await fsp.utimes(other, new Date(Date.now() - 48 * 3600 * 1000), new Date(Date.now() - 48 * 3600 * 1000)); + const res = await sweepOrphans(base); + expect(res.removed).toBe(0); + await expectAsync(fsp.stat(other)).toBeResolved(); + }); + + it('skips directories whose pid file names a live process', async () => { + const mine = await mkSpillDir(`${DIR_PREFIX}mine-cccc`, { + mtime: new Date(Date.now() - 48 * 3600 * 1000), + pid: process.pid + }); + const res = await sweepOrphans(base); + expect(res.removed).toBe(0); + await expectAsync(fsp.stat(mine)).toBeResolved(); + }); + + it('runs at most once per process', async () => { + await mkSpillDir(`${DIR_PREFIX}old-dddd`, { + mtime: new Date(Date.now() - 48 * 3600 * 1000) + }); + await sweepOrphans(base); + const second = await sweepOrphans(base); + expect(second.skipped).toBeTrue(); + }); + + it('returns zero when tmpdir is missing', async () => { + const res = await sweepOrphans(path.join(base, 'does-not-exist')); + expect(res).toEqual({ removed: 0, bytes: 0 }); + }); + + it('reports bytes reclaimed', async () => { + await mkSpillDir(`${DIR_PREFIX}old-eeee`, { + mtime: new Date(Date.now() - 48 * 3600 * 1000) + }); + const res = await sweepOrphans(base); + expect(res.removed).toBe(1); + expect(res.bytes).toBeGreaterThan(0); + }); + + it('skips entries that vanish mid-sweep', async () => { + await mkSpillDir(`${DIR_PREFIX}vanish-ffff`, { + mtime: new Date(Date.now() - 48 * 3600 * 1000), + withPidFile: false + }); + const res = await sweepOrphans(base); + expect(res.removed).toBeGreaterThanOrEqual(0); + }); +}); diff --git a/packages/logger/test/logger.test.js b/packages/logger/test/logger.test.js index 92b1a7a8b..f4aa50594 100644 --- a/packages/logger/test/logger.test.js +++ b/packages/logger/test/logger.test.js @@ -46,13 +46,13 @@ describe('logger', () => { meta }); - expect(inst.messages).toEqual(new Set([ + expect(inst.toArray()).toEqual([ entry('info', 'Info log', { foo: 'bar' }), entry('warn', 'Warn log', { bar: 'baz' }), entry('error', 'Error log', { to: 'be' }), entry('debug', 'Debug log', { not: 'to be' }), entry('warn', 'Warning: Deprecation log', { test: 'me' }) - ])); + ]); }); it('writes info logs to stdout', () => { @@ -88,14 +88,12 @@ describe('logger', () => { let error = new Error('test'); log.error(error); - expect(inst.messages).toContain({ - debug: 'test', - level: 'error', - message: error.stack, - timestamp: jasmine.any(Number), - error: true, - meta: {} - }); + // Stack traces may contain file:line:col segments that look like + // secret patterns and get partially redacted; assert shape, not bytes. + const errorEntry = inst.toArray().find(e => e.level === 'error' && e.error); + expect(errorEntry).toBeDefined(); + expect(errorEntry.debug).toBe('test'); + expect(errorEntry.message).toContain('Error: test'); expect(helpers.stderr).toEqual([ `[${colors.magenta('percy')}] ${colors.red('Error: test')}` @@ -489,10 +487,15 @@ describe('logger', () => { const meta = { abc: '123' }; // Logger internally calls Date.now, so need to mock // response for it as well. - spyOn(Date, 'now').and.returnValues(date1, date1, date2, date1); + // After the store-layer sanitization pass, Date.now may be called + // more than 4 times. Return date1 for all calls up until the + // async callback settles, then date2 for the logtime() call. + let callbackDone = false; + spyOn(Date, 'now').and.callFake(() => callbackDone ? date2 : date1); const callback = async () => { await new Promise((res, _) => setTimeout(res, 20)); log.info('abcd'); + callbackDone = true; return 10; }; @@ -511,10 +514,9 @@ describe('logger', () => { const date1 = new Date(2024, 4, 11, 13, 30, 0); const date2 = new Date(2024, 4, 11, 13, 31, 0); const meta = { abc: '123' }; - // Logger internally calls Date.now, so need to mock - // response for it as well. - spyOn(Date, 'now').and.returnValues(date1, date1, date2, date1); - const callback = () => { log.info('abcd'); return 10; }; + let callbackDone = false; + spyOn(Date, 'now').and.callFake(() => callbackDone ? date2 : date1); + const callback = () => { log.info('abcd'); callbackDone = true; return 10; }; logger.loglevel('debug'); const ret = logger.measure('step', 'test', meta, callback); @@ -566,4 +568,66 @@ describe('logger', () => { }); }); }); + + describe('hybrid store APIs', () => { + it('reset clears all in-memory entries', async () => { + log.info('first'); + log.warn('second'); + expect(inst.toArray().length).toBeGreaterThan(0); + await inst.reset(); + expect(inst.toArray().length).toBe(0); + }); + + it('evictSnapshot drops the bucket index but keeps ring entries', async () => { + const { snapshotKey } = await import('@percy/logger/hybrid-log-store'); + log.info('global only'); + log.debug('a', { snapshot: { name: 'home' } }); + log.debug('b', { snapshot: { name: 'about' } }); + + inst.evictSnapshot(snapshotKey({ snapshot: { name: 'home' } })); + + expect(inst.query(e => e.meta?.snapshot?.name === 'home').length).toBe(1); + expect(inst.query(e => e.meta?.snapshot?.name === 'about').length).toBe(1); + expect(inst.query(e => e.message === 'global only').length).toBe(1); + }); + + it('toArray returns ring entries', () => { + log.info('global'); + log.debug('snap-entry', { snapshot: { name: 'checkout' } }); + const messages = inst.toArray().map(e => e.message); + expect(messages).toContain('global'); + expect(messages).toContain('snap-entry'); + }); + + it('readBack yields every persisted entry', async () => { + log.info('one'); + log.info('two'); + await new Promise(r => setTimeout(r, 50)); + + const back = []; + for await (const e of inst.readBack()) back.push(e); + const messages = back.map(e => e.message); + expect(messages).toContain('one'); + expect(messages).toContain('two'); + }); + + it('forces in-memory mode via PERCY_LOGS_IN_MEMORY=1', async () => { + process.env.PERCY_LOGS_IN_MEMORY = '1'; + await helpers.reset(); + await helpers.mock({ ansi: true, isTTY: true }); + expect(logger.instance.inMemoryOnly).toBe(true); + delete process.env.PERCY_LOGS_IN_MEMORY; + }); + + it('exposes reset / clearMemory / toArray on the module surface', async () => { + log.info('a'); + log.warn('b'); + expect(logger.toArray().length).toBeGreaterThan(0); + logger.clearMemory(); + expect(logger.toArray().length).toBe(0); + log.info('again'); + await logger.reset(); + expect(logger.toArray().length).toBe(0); + }); + }); }); diff --git a/packages/logger/test/redact.test.js b/packages/logger/test/redact.test.js new file mode 100644 index 000000000..96370051e --- /dev/null +++ b/packages/logger/test/redact.test.js @@ -0,0 +1,207 @@ +import { + redactString, redactSecrets, + extractLiteralMarkers, escapeForRegex, + createRedactor, + PATTERNS_COUNT, MARKER_COUNT +} from '@percy/logger/redact'; + +describe('redact', () => { + describe('supply-chain integrity', () => { + it('loaded a non-trivial pattern set', () => { + expect(PATTERNS_COUNT).toBeGreaterThan(1500); + }); + + it('extracted markers for the majority of patterns', () => { + expect(MARKER_COUNT).toBeGreaterThan(500); + }); + }); + + describe('redactString', () => { + it('redacts an AWS-shaped secret', () => { + expect(redactString('key=AKIAIOSFODNN7EXAMPLE trailing')) + .toBe('key=[REDACTED] trailing'); + }); + + it('returns clean lines unchanged', () => { + const clean = 'Received snapshot: home'; + expect(redactString(clean)).toBe(clean); + }); + + it('handles empty / non-string input', () => { + expect(redactString('')).toBe(''); + expect(redactString(null)).toBe(null); + expect(redactString(undefined)).toBe(undefined); + expect(redactString(42)).toBe(42); + }); + + it('is fail-open on very long input', () => { + expect(() => redactString('a'.repeat(100000))).not.toThrow(); + }); + }); + + describe('redactSecrets back-compat', () => { + it('redacts a string', () => { + expect(redactSecrets('secret: ASIAY34FZKBOKMUTVV7A')) + .toBe('secret: [REDACTED]'); + }); + + it('redacts object.message', () => { + expect(redactSecrets({ message: 'secret: ASIAY34FZKBOKMUTVV7A' })) + .toEqual({ message: 'secret: [REDACTED]' }); + }); + + it('maps over arrays', () => { + expect(redactSecrets([{ message: 'secret: ASIAY34FZKBOKMUTVV7A' }])) + .toEqual([{ message: 'secret: [REDACTED]' }]); + }); + + it('passes primitives through unchanged', () => { + expect(redactSecrets(42)).toBe(42); + expect(redactSecrets(null)).toBe(null); + }); + + it('leaves an object without a message untouched', () => { + const obj = { something: 'else' }; + expect(redactSecrets(obj)).toBe(obj); + }); + }); + + describe('createRedactor', () => { + it('is a no-op when the pattern set is empty', () => { + const r = createRedactor([]); + expect(r.patternsCount).toBe(0); + expect(r.markerCount).toBe(0); + expect(r.redactString('AKIAIOSFODNN7EXAMPLE')).toBe('AKIAIOSFODNN7EXAMPLE'); + expect(r.redactSecrets('plain')).toBe('plain'); + expect(r.redactSecrets({ message: 'anything' })).toEqual({ message: 'anything' }); + }); + + it('runs only anchored patterns when no entropy patterns exist', () => { + const r = createRedactor([{ pattern: { regex: 'AKIA[A-Z0-9]{10}' } }]); + expect(r.redactString('prefix AKIABCDEFGHIJK suffix')).toBe('prefix [REDACTED] suffix'); + expect(r.redactString('no marker here')).toBe('no marker here'); + }); + + it('runs only entropy patterns when no anchored patterns exist', () => { + const r = createRedactor([{ pattern: { regex: '\\b[a-f0-9]{32}\\b' } }]); + expect(r.redactString('hash a1b2c3d4e5f60718293a4b5c6d7e8f90 end')) + .toBe('hash [REDACTED] end'); + }); + + it('skips patterns that fail to compile', () => { + const r = createRedactor([ + { pattern: { regex: '(invalid' } }, + { pattern: { regex: 'VALID_MARKER_XYZ' } } + ]); + expect(r.redactString('hit VALID_MARKER_XYZ here')).toBe('hit [REDACTED] here'); + }); + + it('handles empty / non-string input on a custom redactor', () => { + const r = createRedactor([]); + expect(r.redactString('')).toBe(''); + expect(r.redactString(null)).toBe(null); + expect(r.redactString(42)).toBe(42); + }); + }); +}); + +describe('extractLiteralMarkers', () => { + it('extracts a plain literal prefix', () => { + expect(extractLiteralMarkers('AKIA[0-9A-Z]{16}')).toEqual(['AKIA']); + }); + + it('extracts the keyword from a non-capturing prefix', () => { + expect(extractLiteralMarkers('(?:abbysale).{0,40}\\b([a-z0-9A-Z]{40})\\b')) + .toEqual(['abbysale']); + }); + + it('extracts each branch of a top-level alternation', () => { + const out = extractLiteralMarkers('(A3T[A-Z0-9]|AKIA|AGPA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}'); + for (const m of ['AKIA', 'AGPA', 'AROA', 'AIPA', 'ANPA', 'ANVA', 'ASIA', 'A3T']) { + expect(out).toContain(m); + } + }); + + it('extracts two alternative literals', () => { + expect(extractLiteralMarkers('(aws_access_key_id|aws_secret_access_key)')) + .toEqual(['aws_access_key_id', 'aws_secret_access_key']); + }); + + it('skips character class content and picks up later literals', () => { + const out = extractLiteralMarkers('[0-9a-z]+.execute-api.[0-9a-z._-]+.amazonaws.com'); + expect(out).toContain('execute-api'); + expect(out).toContain('amazonaws'); + expect(out).not.toContain('com'); + }); + + it('handles escaped dots as literal continuations', () => { + expect(extractLiteralMarkers('mzn\\.mws\\.[0-9a-f]{8}')) + .toEqual(['mzn.mws.']); + }); + + it('returns empty for pure-entropy regex', () => { + expect(extractLiteralMarkers('\\b[a-f0-9]{32}\\b')).toEqual([]); + }); + + it('drops quantified trailing literal', () => { + expect(extractLiteralMarkers('abc?def')).toContain('def'); + expect(extractLiteralMarkers('abc?def')).not.toContain('abc'); + }); + + it('excludes noise words', () => { + const out = extractLiteralMarkers('https://example/path/(token|pass)'); + expect(out).not.toContain('https'); + expect(out).not.toContain('token'); + expect(out).not.toContain('pass'); + }); + + it('deduplicates identical markers', () => { + const out = extractLiteralMarkers('amazonaws.amazonaws.somethingelse'); + expect(out.filter(m => m === 'amazonaws').length).toBe(1); + expect(out).toContain('amazonaws'); + expect(out).toContain('somethingelse'); + }); + + it('handles a character class with embedded escape', () => { + expect(extractLiteralMarkers('[\\w-]+')).toEqual([]); + }); + + it('handles anchors', () => { + expect(extractLiteralMarkers('^prefix[0-9]+$')).toEqual(['prefix']); + }); + + it('handles empty source', () => { + expect(extractLiteralMarkers('')).toEqual([]); + }); + + it('survives a `{n,m}` quantifier', () => { + expect(extractLiteralMarkers('prefix[0-9]{3,5}suffix')) + .toEqual(['prefix', 'suffix']); + }); + + it('handles (?) capture groups', () => { + expect(extractLiteralMarkers('(?alpha)beta')) + .toEqual(['alpha', 'beta']); + }); + + it('handles (?P) Python-style capture groups', () => { + expect(extractLiteralMarkers('(?Palpha)beta')) + .toEqual(['alpha', 'beta']); + }); + + it('does not hang on an unterminated (? group', () => { + expect(() => extractLiteralMarkers('(? { + it('escapes regex metacharacters', () => { + expect(escapeForRegex('a.b*c+')).toBe('a\\.b\\*c\\+'); + expect(escapeForRegex('(foo)')).toBe('\\(foo\\)'); + expect(escapeForRegex('[abc]')).toBe('\\[abc\\]'); + }); + + it('passes plain strings through', () => { + expect(escapeForRegex('AKIA')).toBe('AKIA'); + }); +});