-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[TT-2539] added access/transaction logs #6616
base: master
Are you sure you want to change the base?
Changes from 1 commit
44c3967
f4470c9
d0a04e0
9b1ff8d
0acea13
8ef7c6d
667a549
86a3d28
e31a08f
849d346
71941ea
69344f9
74c514c
6b687a2
2b577bd
24058e8
35500ee
e004269
8f37f4b
33db0e2
cf5aeb0
aee8137
1fcb4fd
14d8e3e
93f430c
c1b4429
cea1df4
917f0ef
deaa79e
29bc56a
f1b55b5
bb09d39
dafbab6
b42113c
479dcd9
0c8a86a
3114d14
3633678
4a14e3a
85e8a94
9335a51
fa63dbe
2611a47
d7bed08
810f981
36afb48
79a393e
6db3156
adb1f25
43ac641
f0fcb3f
c8f21dc
cb62825
e19f5cf
6eb5178
72dd619
7081f2e
35f58ac
8bd75f0
b0206d2
7fbd718
3162814
7fc67f7
e805241
ff3679e
178848d
9439737
9c5a43b
4af6152
9916296
abc3fa6
accfde0
f48eb98
524a6b6
1b2df0e
2887a4a
2df5817
1deb1e6
51e50c3
d59ae8c
3a9b536
465d3ac
d46c967
0276c06
f65d41a
acb2e19
1d1ba4e
1c320f7
5f3448d
2319ba9
af3465b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -50,6 +50,7 @@ session_state_gen_test.go | |
__pycache__/ | ||
tyk.test | ||
tyk-gateway.pid | ||
*.go-e | ||
|
||
tyk_linux_* | ||
.aider* | ||
|
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
@@ -250,6 +250,12 @@ type AnalyticsConfigConfig struct { | |||||||||
SerializerType string `json:"serializer_type"` | ||||||||||
} | ||||||||||
|
||||||||||
// AccessLogsConfig defines the type of transactions logs printed to stdout | ||||||||||
type AccessLogsConfig struct { | ||||||||||
// Enable the transaction logs. Default: false | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
Enabled bool `json:"enabled"` | ||||||||||
} | ||||||||||
|
||||||||||
type HealthCheckConfig struct { | ||||||||||
// Setting this value to `true` will enable the health-check endpoint on /Tyk/health. | ||||||||||
EnableHealthChecks bool `json:"enable_health_checks"` | ||||||||||
|
@@ -1009,6 +1015,10 @@ type Config struct { | |||||||||
// If not set or left empty, it will default to `standard`. | ||||||||||
LogFormat string `json:"log_format"` | ||||||||||
|
||||||||||
// You can configure the transaction logs to be turned on | ||||||||||
// If not set or left empty, it will default to 'false' | ||||||||||
Comment on lines
+1025
to
+1026
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
AccessLogs AccessLogsConfig `json:"access_logs"` | ||||||||||
|
||||||||||
// Section for configuring OpenTracing support | ||||||||||
// Deprecated: use OpenTelemetry instead. | ||||||||||
Tracer Tracer `json:"tracing"` | ||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package crypto | ||
|
||
import ( | ||
"crypto/sha256" | ||
"encoding/hex" | ||
"fmt" | ||
"hash" | ||
|
||
"github.com/TykTechnologies/murmur3" | ||
) | ||
|
||
const ( | ||
HashSha256 = "sha256" | ||
HashMurmur32 = "murmur32" | ||
HashMurmur64 = "murmur64" | ||
HashMurmur128 = "murmur128" | ||
) | ||
|
||
func hashFunction(algorithm string) (hash.Hash, error) { | ||
switch algorithm { | ||
case HashSha256: | ||
return sha256.New(), nil | ||
case HashMurmur64: | ||
return murmur3.New64(), nil | ||
case HashMurmur128: | ||
return murmur3.New128(), nil | ||
case "", HashMurmur32: | ||
return murmur3.New32(), nil | ||
default: | ||
return murmur3.New32(), fmt.Errorf("Unknown key hash function: %s. Falling back to murmur32.", algorithm) | ||
} | ||
} | ||
|
||
func HashStr(in string, withAlg ...string) string { | ||
var algo string | ||
if len(withAlg) > 0 && withAlg[0] != "" { | ||
algo = withAlg[0] | ||
} else { | ||
algo = TokenHashAlgo(in) | ||
} | ||
|
||
h, _ := hashFunction(algo) | ||
h.Write([]byte(in)) | ||
return hex.EncodeToString(h.Sum(nil)) | ||
} | ||
|
||
func HashKey(in string, hashKey bool) string { | ||
if !hashKey { | ||
// Not hashing? Return the raw key | ||
return in | ||
} | ||
return HashStr(in) | ||
} |
Original file line number | Diff line number | Diff line change | |||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,83 @@ | |||||||||||||||||||||||||||||||||||||||||||||||
package crypto | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
import ( | |||||||||||||||||||||||||||||||||||||||||||||||
"encoding/base64" | |||||||||||||||||||||||||||||||||||||||||||||||
"encoding/hex" | |||||||||||||||||||||||||||||||||||||||||||||||
"fmt" | |||||||||||||||||||||||||||||||||||||||||||||||
"strings" | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
"github.com/buger/jsonparser" | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
"github.com/TykTechnologies/tyk/internal/uuid" | |||||||||||||||||||||||||||||||||||||||||||||||
) | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
// `{"` in base64 | |||||||||||||||||||||||||||||||||||||||||||||||
const B64JSONPrefix = "ey" | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
const DefaultHashAlgorithm = "murmur64" | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
const MongoBsonIdLength = 24 | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
// GenerateToken generates a token. | |||||||||||||||||||||||||||||||||||||||||||||||
// If hashing algorithm is empty, it uses legacy key generation. | |||||||||||||||||||||||||||||||||||||||||||||||
func GenerateToken(orgID, keyID, hashAlgorithm string) (string, error) { | |||||||||||||||||||||||||||||||||||||||||||||||
if keyID == "" { | |||||||||||||||||||||||||||||||||||||||||||||||
keyID = uuid.NewHex() | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
if hashAlgorithm != "" { | |||||||||||||||||||||||||||||||||||||||||||||||
_, err := hashFunction(hashAlgorithm) | |||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | |||||||||||||||||||||||||||||||||||||||||||||||
hashAlgorithm = DefaultHashAlgorithm | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
jsonToken := fmt.Sprintf(`{"org":"%s","id":"%s","h":"%s"}`, orgID, keyID, hashAlgorithm) | |||||||||||||||||||||||||||||||||||||||||||||||
Check failure Code scanning / CodeQL Potentially unsafe quoting Critical
If this
JSON value Error loading related location Loading If this JSON value Error loading related location Loading If this JSON value Error loading related location Loading
Copilot Autofix AI about 17 hours ago To fix the problem, we need to ensure that any user-provided data embedded in the JSON string is properly escaped. This can be achieved by using a JSON library to construct the JSON string instead of manually formatting it. This approach ensures that all special characters are correctly escaped.
Suggested changeset
1
internal/crypto/token.go
Copilot is powered by AI and may make mistakes. Always verify output.
Refresh and try again.
|
|||||||||||||||||||||||||||||||||||||||||||||||
return base64.StdEncoding.EncodeToString([]byte(jsonToken)), err | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
// Legacy keys | |||||||||||||||||||||||||||||||||||||||||||||||
return orgID + keyID, nil | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
func TokenHashAlgo(token string) string { | |||||||||||||||||||||||||||||||||||||||||||||||
// Legacy tokens not b64 and not JSON records | |||||||||||||||||||||||||||||||||||||||||||||||
if strings.HasPrefix(token, B64JSONPrefix) { | |||||||||||||||||||||||||||||||||||||||||||||||
if jsonToken, err := base64.StdEncoding.DecodeString(token); err == nil { | |||||||||||||||||||||||||||||||||||||||||||||||
hashAlgo, _ := jsonparser.GetString(jsonToken, "h") | |||||||||||||||||||||||||||||||||||||||||||||||
return hashAlgo | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
return "" | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
func TokenID(token string) (id string, err error) { | |||||||||||||||||||||||||||||||||||||||||||||||
jsonToken, err := base64.StdEncoding.DecodeString(token) | |||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | |||||||||||||||||||||||||||||||||||||||||||||||
return "", err | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
return jsonparser.GetString(jsonToken, "id") | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
func TokenOrg(token string) string { | |||||||||||||||||||||||||||||||||||||||||||||||
if strings.HasPrefix(token, B64JSONPrefix) { | |||||||||||||||||||||||||||||||||||||||||||||||
if jsonToken, err := base64.StdEncoding.DecodeString(token); err == nil { | |||||||||||||||||||||||||||||||||||||||||||||||
// Checking error in case if it is a legacy tooken which just by accided has the same b64JSON prefix | |||||||||||||||||||||||||||||||||||||||||||||||
if org, err := jsonparser.GetString(jsonToken, "org"); err == nil { | |||||||||||||||||||||||||||||||||||||||||||||||
return org | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
// 24 is mongo bson id length | |||||||||||||||||||||||||||||||||||||||||||||||
if len(token) > MongoBsonIdLength { | |||||||||||||||||||||||||||||||||||||||||||||||
newToken := token[:MongoBsonIdLength] | |||||||||||||||||||||||||||||||||||||||||||||||
_, err := hex.DecodeString(newToken) | |||||||||||||||||||||||||||||||||||||||||||||||
if err == nil { | |||||||||||||||||||||||||||||||||||||||||||||||
return newToken | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
return "" | |||||||||||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.