mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-10-16 20:30:42 +08:00
feat: upgrade client-go version to v0.29.0 (#109)
* feat: upgrade client-go version to v0.29.0 * feat: upgrade coredns version * chore: update README.md
This commit is contained in:
128
vendor/github.com/DataDog/go-sqllexer/obfuscator.go
generated
vendored
Normal file
128
vendor/github.com/DataDog/go-sqllexer/obfuscator.go
generated
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
package sqllexer
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
type obfuscatorConfig struct {
|
||||
DollarQuotedFunc bool `json:"dollar_quoted_func"`
|
||||
ReplaceDigits bool `json:"replace_digits"`
|
||||
ReplacePositionalParameter bool `json:"replace_positional_parameter"`
|
||||
ReplaceBoolean bool `json:"replace_boolean"`
|
||||
ReplaceNull bool `json:"replace_null"`
|
||||
}
|
||||
|
||||
type obfuscatorOption func(*obfuscatorConfig)
|
||||
|
||||
func WithReplaceDigits(replaceDigits bool) obfuscatorOption {
|
||||
return func(c *obfuscatorConfig) {
|
||||
c.ReplaceDigits = replaceDigits
|
||||
}
|
||||
}
|
||||
|
||||
func WithReplacePositionalParameter(replacePositionalParameter bool) obfuscatorOption {
|
||||
return func(c *obfuscatorConfig) {
|
||||
c.ReplacePositionalParameter = replacePositionalParameter
|
||||
}
|
||||
}
|
||||
|
||||
func WithReplaceBoolean(replaceBoolean bool) obfuscatorOption {
|
||||
return func(c *obfuscatorConfig) {
|
||||
c.ReplaceBoolean = replaceBoolean
|
||||
}
|
||||
}
|
||||
|
||||
func WithReplaceNull(replaceNull bool) obfuscatorOption {
|
||||
return func(c *obfuscatorConfig) {
|
||||
c.ReplaceNull = replaceNull
|
||||
}
|
||||
}
|
||||
|
||||
func WithDollarQuotedFunc(dollarQuotedFunc bool) obfuscatorOption {
|
||||
return func(c *obfuscatorConfig) {
|
||||
c.DollarQuotedFunc = dollarQuotedFunc
|
||||
}
|
||||
}
|
||||
|
||||
type Obfuscator struct {
|
||||
config *obfuscatorConfig
|
||||
}
|
||||
|
||||
func NewObfuscator(opts ...obfuscatorOption) *Obfuscator {
|
||||
obfuscator := &Obfuscator{
|
||||
config: &obfuscatorConfig{},
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
opt(obfuscator.config)
|
||||
}
|
||||
|
||||
return obfuscator
|
||||
}
|
||||
|
||||
const (
|
||||
StringPlaceholder = "?"
|
||||
NumberPlaceholder = "?"
|
||||
)
|
||||
|
||||
// Obfuscate takes an input SQL string and returns an obfuscated SQL string.
|
||||
// The obfuscator replaces all literal values with a single placeholder
|
||||
func (o *Obfuscator) Obfuscate(input string, lexerOpts ...lexerOption) string {
|
||||
var obfuscatedSQL strings.Builder
|
||||
|
||||
lexer := New(
|
||||
input,
|
||||
lexerOpts...,
|
||||
)
|
||||
for {
|
||||
token := lexer.Scan()
|
||||
if token.Type == EOF {
|
||||
break
|
||||
}
|
||||
obfuscatedSQL.WriteString(o.ObfuscateTokenValue(token, lexerOpts...))
|
||||
}
|
||||
|
||||
return strings.TrimSpace(obfuscatedSQL.String())
|
||||
}
|
||||
|
||||
func (o *Obfuscator) ObfuscateTokenValue(token Token, lexerOpts ...lexerOption) string {
|
||||
switch token.Type {
|
||||
case NUMBER:
|
||||
return NumberPlaceholder
|
||||
case DOLLAR_QUOTED_FUNCTION:
|
||||
if o.config.DollarQuotedFunc {
|
||||
// obfuscate the content of dollar quoted function
|
||||
quotedFunc := token.Value[6 : len(token.Value)-6] // remove the $func$ prefix and suffix
|
||||
var obfuscatedDollarQuotedFunc strings.Builder
|
||||
obfuscatedDollarQuotedFunc.WriteString("$func$")
|
||||
obfuscatedDollarQuotedFunc.WriteString(o.Obfuscate(quotedFunc, lexerOpts...))
|
||||
obfuscatedDollarQuotedFunc.WriteString("$func$")
|
||||
return obfuscatedDollarQuotedFunc.String()
|
||||
} else {
|
||||
return StringPlaceholder
|
||||
}
|
||||
case STRING, INCOMPLETE_STRING, DOLLAR_QUOTED_STRING:
|
||||
return StringPlaceholder
|
||||
case POSITIONAL_PARAMETER:
|
||||
if o.config.ReplacePositionalParameter {
|
||||
return StringPlaceholder
|
||||
} else {
|
||||
return token.Value
|
||||
}
|
||||
case IDENT, QUOTED_IDENT:
|
||||
if o.config.ReplaceBoolean && isBoolean(token.Value) {
|
||||
return StringPlaceholder
|
||||
}
|
||||
if o.config.ReplaceNull && isNull(token.Value) {
|
||||
return StringPlaceholder
|
||||
}
|
||||
|
||||
if o.config.ReplaceDigits {
|
||||
return replaceDigits(token.Value, NumberPlaceholder)
|
||||
} else {
|
||||
return token.Value
|
||||
}
|
||||
default:
|
||||
return token.Value
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user