1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
diff --git a/httpmuxer/httpmuxer.go b/httpmuxer/httpmuxer.go
index ef3ece3..1e3560a 100644
--- a/httpmuxer/httpmuxer.go
+++ b/httpmuxer/httpmuxer.go
@@ -32,6 +32,54 @@ import (
"github.com/gin-gonic/gin"
)
+func createMetricDrainMdw(state *utils.State) func(*gin.Context) {
+ return func(c *gin.Context) {
+ fmt.Println(c.Keys)
+ originalURI := c.Keys["originalURI"].(string)
+
+ if viper.GetString("admin-console-token") != "" && strings.Contains(originalURI, viper.GetString("admin-console-token")) {
+ originalURI = strings.Replace(originalURI, viper.GetString("admin-console-token"), "[REDACTED]", 1)
+ }
+
+ if viper.GetString("service-console-token") != "" && strings.Contains(originalURI, viper.GetString("service-console-token")) {
+ originalURI = strings.Replace(originalURI, viper.GetString("service-console-token"), "[REDACTED]", 1)
+ }
+
+ if c.Keys["httpHolder"] != nil {
+ currentListener := c.Keys["httpHolder"].(*utils.HTTPHolder)
+
+ if currentListener != nil {
+ currentListener.SSHConnections.Range(func(I string, conn *utils.SSHConnection) bool {
+ userId := conn.UserId()
+
+ visit := &utils.MetricDrainVisit{
+ Namespace: "tuns",
+ UserID: userId,
+ Host: c.Request.Host,
+ IpAddress: c.ClientIP(),
+ Status: c.Writer.Status(),
+ Path: originalURI,
+ UserAgent: c.Request.UserAgent(),
+ Referer: c.Request.Referer(),
+ }
+
+ visit.ContentType = c.Writer.Header().Get("content-type")
+
+ select {
+ case state.MetricDrain <- visit:
+ default:
+ slog.Error("unable to send metric drain visit", slog.Any("visit", visit))
+ }
+
+ return true
+ })
+ }
+ }
+
+ c.Next()
+ }
+}
+
// Start initializes the HTTP service.
func Start(state *utils.State) {
releaseMode := gin.ReleaseMode
@@ -128,23 +176,6 @@ func Start(state *utils.State) {
slog.Info(logLine, "user", user, "userId", userId)
- visit := &utils.MetricDrainVisit{
- Namespace: "tuns",
- UserID: userId,
- Host: param.Request.Host,
- IpAddress: param.ClientIP,
- Status: param.StatusCode,
- Path: originalURI,
- UserAgent: param.Request.UserAgent(),
- Referer: param.Request.Referer(),
- }
-
- select {
- case state.MetricDrain <- visit:
- default:
- slog.Error("unable to send metric drain visit", slog.Any("visit", visit))
- }
-
return true
})
}
@@ -379,7 +410,7 @@ func Start(state *utils.State) {
}
gin.WrapH(currentListener.Balancer)(c)
- })
+ }, createMetricDrainMdw(state))
var acmeIssuer *certmagic.ACMEIssuer = nil
|