| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // == WARNING ==
- // These functions are used to generate GitLeak's default config.
- // You are free to use these in your own project, HOWEVER, no API stability is guaranteed.
- package utils
- import (
- "fmt"
- "regexp"
- "strings"
- )
- const (
- // case insensitive prefix
- caseInsensitive = `(?i)`
- // identifier prefix (just an ignore group)
- identifierCaseInsensitivePrefix = `(?i:`
- identifierCaseInsensitiveSuffix = `)`
- identifierPrefix = `(?:`
- identifierSuffix = `)(?:[0-9a-z\-_\t .]{0,20})(?:[\s|']|[\s|"]){0,3}`
- // commonly used assignment operators or function call
- operator = `(?:=|>|:{1,3}=|\|\|:|<=|=>|:|\?=)`
- // boundaries for the secret
- // \x60 = `
- secretPrefixUnique = `\b(`
- secretPrefix = `(?:'|\"|\s|=|\x60){0,5}(`
- secretSuffix = `)(?:['|\"|\n|\r|\s|\x60|;]|$)`
- )
- func GenerateSemiGenericRegex(identifiers []string, secretRegex string, isCaseInsensitive bool) *regexp.Regexp {
- var sb strings.Builder
- // The identifiers should always be case-insensitive.
- // This is inelegant but prevents an extraneous `(?i:)` from being added to the pattern; it could be removed.
- if isCaseInsensitive {
- sb.WriteString(caseInsensitive)
- writeIdentifiers(&sb, identifiers)
- } else {
- sb.WriteString(identifierCaseInsensitivePrefix)
- writeIdentifiers(&sb, identifiers)
- sb.WriteString(identifierCaseInsensitiveSuffix)
- }
- sb.WriteString(operator)
- sb.WriteString(secretPrefix)
- sb.WriteString(secretRegex)
- sb.WriteString(secretSuffix)
- return regexp.MustCompile(sb.String())
- }
- func writeIdentifiers(sb *strings.Builder, identifiers []string) {
- sb.WriteString(identifierPrefix)
- sb.WriteString(strings.Join(identifiers, "|"))
- sb.WriteString(identifierSuffix)
- }
- func GenerateUniqueTokenRegex(secretRegex string, isCaseInsensitive bool) *regexp.Regexp {
- var sb strings.Builder
- if isCaseInsensitive {
- sb.WriteString(caseInsensitive)
- }
- sb.WriteString(secretPrefixUnique)
- sb.WriteString(secretRegex)
- sb.WriteString(secretSuffix)
- return regexp.MustCompile(sb.String())
- }
- func GenerateSampleSecret(identifier string, secret string) string {
- return fmt.Sprintf("%s_api_token = \"%s\"", identifier, secret)
- }
|