11package common
22
33import (
4- "fmt"
54 "math/big"
6- "regexp"
7- "strings"
85)
96
107func SliceToChunks [T any ](values []T , chunkSize int ) [][]T {
@@ -22,68 +19,6 @@ func SliceToChunks[T any](values []T, chunkSize int) [][]T {
2219 return chunks
2320}
2421
25- var allowedFunctions = map [string ]struct {}{
26- "sum" : {},
27- "count" : {},
28- "countdistinct" : {},
29- "avg" : {},
30- "max" : {},
31- "min" : {},
32- "reinterpretasuint256" : {},
33- "reverse" : {},
34- "unhex" : {},
35- "substring" : {},
36- "length" : {},
37- "touint256" : {},
38- "if" : {},
39- "tostartofmonth" : {},
40- "tostartofday" : {},
41- "tostartofhour" : {},
42- "tostartofminute" : {},
43- "todate" : {},
44- "todatetime" : {},
45- "concat" : {},
46- "in" : {},
47- "and" : {},
48- "or" : {},
49- }
50-
51- var disallowedPatterns = []string {
52- `(?i)\b(INSERT|DELETE|UPDATE|DROP|CREATE|ALTER|TRUNCATE|EXEC|;|--)` ,
53- }
54-
55- // ValidateQuery checks the query for disallowed patterns and ensures only allowed functions are used.
56- func ValidateQuery (query string ) error {
57- // Check for disallowed patterns
58- for _ , pattern := range disallowedPatterns {
59- matched , err := regexp .MatchString (pattern , query )
60- if err != nil {
61- return fmt .Errorf ("error checking disallowed patterns: %v" , err )
62- }
63- if matched {
64- return fmt .Errorf ("query contains disallowed keywords or patterns" )
65- }
66- }
67-
68- // Ensure the query is a SELECT statement
69- trimmedQuery := strings .TrimSpace (strings .ToUpper (query ))
70- if ! strings .HasPrefix (trimmedQuery , "SELECT" ) {
71- return fmt .Errorf ("only SELECT queries are allowed" )
72- }
73-
74- // Extract function names and validate them
75- functionPattern := regexp .MustCompile (`(?i)(\b\w+\b)\s*\(` )
76- matches := functionPattern .FindAllStringSubmatch (query , - 1 )
77- for _ , match := range matches {
78- funcName := match [1 ]
79- if _ , ok := allowedFunctions [strings .ToLower (funcName )]; ! ok {
80- return fmt .Errorf ("function '%s' is not allowed" , funcName )
81- }
82- }
83-
84- return nil
85- }
86-
8722func ConvertBigNumbersToString (data interface {}) interface {} {
8823 switch v := data .(type ) {
8924 case map [string ]interface {}:
0 commit comments