From 26788bb3a6bcc47b1ce6f0efbc913d69f1c5078a Mon Sep 17 00:00:00 2001 From: RoyUP9 <87927115+RoyUP9@users.noreply.github.com> Date: Wed, 13 Oct 2021 17:31:15 +0300 Subject: [PATCH] organize routes (#348) --- acceptanceTests/tap_test.go | 26 +++---- agent/pkg/controllers/entries_controller.go | 78 +------------------ agent/pkg/controllers/resolving_controller.go | 12 --- agent/pkg/controllers/status_controller.go | 22 ++++++ agent/pkg/models/models.go | 5 -- agent/pkg/routes/entries_routes.go | 15 +--- agent/pkg/routes/status_routes.go | 10 ++- cli/apiserver/provider.go | 2 +- ui/src/helpers/api.js | 10 +-- 9 files changed, 55 insertions(+), 125 deletions(-) delete mode 100644 agent/pkg/controllers/resolving_controller.go diff --git a/acceptanceTests/tap_test.go b/acceptanceTests/tap_test.go index e5dd33855..7bd7805d7 100644 --- a/acceptanceTests/tap_test.go +++ b/acceptanceTests/tap_test.go @@ -66,7 +66,7 @@ func TestTap(t *testing.T) { entriesCheckFunc := func() error { timestamp := time.Now().UnixNano() / int64(time.Millisecond) - entriesUrl := fmt.Sprintf("%v/api/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, entriesCount, timestamp) + entriesUrl := fmt.Sprintf("%v/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, entriesCount, timestamp) requestResult, requestErr := executeHttpGetRequest(entriesUrl) if requestErr != nil { return fmt.Errorf("failed to get entries, err: %v", requestErr) @@ -79,7 +79,7 @@ func TestTap(t *testing.T) { entry := entries[0].(map[string]interface{}) - entryUrl := fmt.Sprintf("%v/api/entries/%v", apiServerUrl, entry["id"]) + entryUrl := fmt.Sprintf("%v/entries/%v", apiServerUrl, entry["id"]) requestResult, requestErr = executeHttpGetRequest(entryUrl) if requestErr != nil { return fmt.Errorf("failed to get entry, err: %v", requestErr) @@ -188,7 +188,7 @@ func TestTapAllNamespaces(t *testing.T) { return } - podsUrl := fmt.Sprintf("%v/api/tapStatus", apiServerUrl) + podsUrl := fmt.Sprintf("%v/status/tap", apiServerUrl) requestResult, requestErr := executeHttpGetRequest(podsUrl) if requestErr != nil { t.Errorf("failed to get tap status, err: %v", requestErr) @@ -269,7 +269,7 @@ func TestTapMultipleNamespaces(t *testing.T) { return } - podsUrl := fmt.Sprintf("%v/api/tapStatus", apiServerUrl) + podsUrl := fmt.Sprintf("%v/status/tap", apiServerUrl) requestResult, requestErr := executeHttpGetRequest(podsUrl) if requestErr != nil { t.Errorf("failed to get tap status, err: %v", requestErr) @@ -352,7 +352,7 @@ func TestTapRegex(t *testing.T) { return } - podsUrl := fmt.Sprintf("%v/api/tapStatus", apiServerUrl) + podsUrl := fmt.Sprintf("%v/status/tap", apiServerUrl) requestResult, requestErr := executeHttpGetRequest(podsUrl) if requestErr != nil { t.Errorf("failed to get tap status, err: %v", requestErr) @@ -486,7 +486,7 @@ func TestTapRedact(t *testing.T) { redactCheckFunc := func() error { timestamp := time.Now().UnixNano() / int64(time.Millisecond) - entriesUrl := fmt.Sprintf("%v/api/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, defaultEntriesCount, timestamp) + entriesUrl := fmt.Sprintf("%v/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, defaultEntriesCount, timestamp) requestResult, requestErr := executeHttpGetRequest(entriesUrl) if requestErr != nil { return fmt.Errorf("failed to get entries, err: %v", requestErr) @@ -499,7 +499,7 @@ func TestTapRedact(t *testing.T) { firstEntry := entries[0].(map[string]interface{}) - entryUrl := fmt.Sprintf("%v/api/entries/%v", apiServerUrl, firstEntry["id"]) + entryUrl := fmt.Sprintf("%v/entries/%v", apiServerUrl, firstEntry["id"]) requestResult, requestErr = executeHttpGetRequest(entryUrl) if requestErr != nil { return fmt.Errorf("failed to get entry, err: %v", requestErr) @@ -601,7 +601,7 @@ func TestTapNoRedact(t *testing.T) { redactCheckFunc := func() error { timestamp := time.Now().UnixNano() / int64(time.Millisecond) - entriesUrl := fmt.Sprintf("%v/api/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, defaultEntriesCount, timestamp) + entriesUrl := fmt.Sprintf("%v/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, defaultEntriesCount, timestamp) requestResult, requestErr := executeHttpGetRequest(entriesUrl) if requestErr != nil { return fmt.Errorf("failed to get entries, err: %v", requestErr) @@ -614,7 +614,7 @@ func TestTapNoRedact(t *testing.T) { firstEntry := entries[0].(map[string]interface{}) - entryUrl := fmt.Sprintf("%v/api/entries/%v", apiServerUrl, firstEntry["id"]) + entryUrl := fmt.Sprintf("%v/entries/%v", apiServerUrl, firstEntry["id"]) requestResult, requestErr = executeHttpGetRequest(entryUrl) if requestErr != nil { return fmt.Errorf("failed to get entry, err: %v", requestErr) @@ -716,7 +716,7 @@ func TestTapRegexMasking(t *testing.T) { redactCheckFunc := func() error { timestamp := time.Now().UnixNano() / int64(time.Millisecond) - entriesUrl := fmt.Sprintf("%v/api/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, defaultEntriesCount, timestamp) + entriesUrl := fmt.Sprintf("%v/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, defaultEntriesCount, timestamp) requestResult, requestErr := executeHttpGetRequest(entriesUrl) if requestErr != nil { return fmt.Errorf("failed to get entries, err: %v", requestErr) @@ -729,7 +729,7 @@ func TestTapRegexMasking(t *testing.T) { firstEntry := entries[0].(map[string]interface{}) - entryUrl := fmt.Sprintf("%v/api/entries/%v", apiServerUrl, firstEntry["id"]) + entryUrl := fmt.Sprintf("%v/entries/%v", apiServerUrl, firstEntry["id"]) requestResult, requestErr = executeHttpGetRequest(entryUrl) if requestErr != nil { return fmt.Errorf("failed to get entry, err: %v", requestErr) @@ -823,7 +823,7 @@ func TestTapIgnoredUserAgents(t *testing.T) { ignoredUserAgentsCheckFunc := func() error { timestamp := time.Now().UnixNano() / int64(time.Millisecond) - entriesUrl := fmt.Sprintf("%v/api/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, defaultEntriesCount * 2, timestamp) + entriesUrl := fmt.Sprintf("%v/entries?limit=%v&operator=lt×tamp=%v", apiServerUrl, defaultEntriesCount * 2, timestamp) requestResult, requestErr := executeHttpGetRequest(entriesUrl) if requestErr != nil { return fmt.Errorf("failed to get entries, err: %v", requestErr) @@ -835,7 +835,7 @@ func TestTapIgnoredUserAgents(t *testing.T) { } for _, entryInterface := range entries { - entryUrl := fmt.Sprintf("%v/api/entries/%v", apiServerUrl, entryInterface.(map[string]interface{})["id"]) + entryUrl := fmt.Sprintf("%v/entries/%v", apiServerUrl, entryInterface.(map[string]interface{})["id"]) requestResult, requestErr = executeHttpGetRequest(entryUrl) if requestErr != nil { return fmt.Errorf("failed to get entry, err: %v", requestErr) diff --git a/agent/pkg/controllers/entries_controller.go b/agent/pkg/controllers/entries_controller.go index 99fe7fb4a..ee166a435 100644 --- a/agent/pkg/controllers/entries_controller.go +++ b/agent/pkg/controllers/entries_controller.go @@ -3,19 +3,13 @@ package controllers import ( "encoding/json" "fmt" + "github.com/gin-gonic/gin" + tapApi "github.com/up9inc/mizu/tap/api" "mizuserver/pkg/database" "mizuserver/pkg/models" - "mizuserver/pkg/providers" - "mizuserver/pkg/up9" "mizuserver/pkg/utils" "mizuserver/pkg/validation" "net/http" - "time" - - "github.com/google/martian/har" - - "github.com/gin-gonic/gin" - tapApi "github.com/up9inc/mizu/tap/api" ) var extensionsMap map[string]*tapApi.Extension // global @@ -62,47 +56,6 @@ func GetEntries(c *gin.Context) { c.JSON(http.StatusOK, baseEntries) } -func GetFullEntries(c *gin.Context) { - entriesFilter := &models.HarFetchRequestQuery{} - if err := c.BindQuery(entriesFilter); err != nil { - c.JSON(http.StatusBadRequest, err) - } - err := validation.Validate(entriesFilter) - if err != nil { - c.JSON(http.StatusBadRequest, err) - } - - var timestampFrom, timestampTo int64 - - if entriesFilter.From < 0 { - timestampFrom = 0 - } else { - timestampFrom = entriesFilter.From - } - if entriesFilter.To <= 0 { - timestampTo = time.Now().UnixNano() / int64(time.Millisecond) - } else { - timestampTo = entriesFilter.To - } - - entriesArray := database.GetEntriesFromDb(timestampFrom, timestampTo, nil) - - result := make([]har.Entry, 0) - for _, data := range entriesArray { - var pair tapApi.RequestResponsePair - if err := json.Unmarshal([]byte(data.Entry), &pair); err != nil { - continue - } - harEntry, err := utils.NewEntry(&pair) - if err != nil { - continue - } - result = append(result, *harEntry) - } - - c.JSON(http.StatusOK, result) -} - func GetEntry(c *gin.Context) { var entryData tapApi.MizuEntry database.GetEntriesTable(). @@ -133,30 +86,3 @@ func GetEntry(c *gin.Context) { IsRulesEnabled: isRulesEnabled, }) } - -func DeleteAllEntries(c *gin.Context) { - database.GetEntriesTable(). - Where("1 = 1"). - Delete(&tapApi.MizuEntry{}) - - c.JSON(http.StatusOK, map[string]string{ - "msg": "Success", - }) - -} - -func GetGeneralStats(c *gin.Context) { - c.JSON(http.StatusOK, providers.GetGeneralStats()) -} - -func GetTappingStatus(c *gin.Context) { - c.JSON(http.StatusOK, providers.TapStatus) -} - -func AnalyzeInformation(c *gin.Context) { - c.JSON(http.StatusOK, up9.GetAnalyzeInfo()) -} - -func GetRecentTLSLinks(c *gin.Context) { - c.JSON(http.StatusOK, providers.GetAllRecentTLSAddresses()) -} diff --git a/agent/pkg/controllers/resolving_controller.go b/agent/pkg/controllers/resolving_controller.go deleted file mode 100644 index dd9cc08bf..000000000 --- a/agent/pkg/controllers/resolving_controller.go +++ /dev/null @@ -1,12 +0,0 @@ -package controllers - -import ( - "github.com/gin-gonic/gin" - "mizuserver/pkg/holder" - "net/http" -) - -func GetCurrentResolvingInformation(c *gin.Context) { - c.JSON(http.StatusOK, holder.GetResolver().GetMap()) -} - diff --git a/agent/pkg/controllers/status_controller.go b/agent/pkg/controllers/status_controller.go index 2965acf17..bfb4f1ad2 100644 --- a/agent/pkg/controllers/status_controller.go +++ b/agent/pkg/controllers/status_controller.go @@ -6,7 +6,9 @@ import ( "github.com/romana/rlog" "github.com/up9inc/mizu/shared" "mizuserver/pkg/api" + "mizuserver/pkg/holder" "mizuserver/pkg/providers" + "mizuserver/pkg/up9" "mizuserver/pkg/validation" "net/http" ) @@ -44,3 +46,23 @@ func GetAuthStatus(c *gin.Context) { c.JSON(http.StatusOK, authStatus) } + +func GetTappingStatus(c *gin.Context) { + c.JSON(http.StatusOK, providers.TapStatus) +} + +func AnalyzeInformation(c *gin.Context) { + c.JSON(http.StatusOK, up9.GetAnalyzeInfo()) +} + +func GetGeneralStats(c *gin.Context) { + c.JSON(http.StatusOK, providers.GetGeneralStats()) +} + +func GetRecentTLSLinks(c *gin.Context) { + c.JSON(http.StatusOK, providers.GetAllRecentTLSAddresses()) +} + +func GetCurrentResolvingInformation(c *gin.Context) { + c.JSON(http.StatusOK, holder.GetResolver().GetMap()) +} diff --git a/agent/pkg/models/models.go b/agent/pkg/models/models.go index abb5d1e3f..0209f3675 100644 --- a/agent/pkg/models/models.go +++ b/agent/pkg/models/models.go @@ -22,11 +22,6 @@ type EntriesFilter struct { Timestamp int64 `form:"timestamp" validate:"required,min=1"` } -type HarFetchRequestQuery struct { - From int64 `form:"from"` - To int64 `form:"to"` -} - type WebSocketEntryMessage struct { *shared.WebSocketMessageMetadata Data *tapApi.BaseEntryDetails `json:"data,omitempty"` diff --git a/agent/pkg/routes/entries_routes.go b/agent/pkg/routes/entries_routes.go index aa4066506..8e578fea4 100644 --- a/agent/pkg/routes/entries_routes.go +++ b/agent/pkg/routes/entries_routes.go @@ -7,17 +7,8 @@ import ( // EntriesRoutes defines the group of har entries routes. func EntriesRoutes(ginApp *gin.Engine) { - routeGroup := ginApp.Group("/api") + routeGroup := ginApp.Group("/entries") - routeGroup.GET("/entries", controllers.GetEntries) // get entries (base/thin entries) - routeGroup.GET("/entries/:entryId", controllers.GetEntry) // get single (full) entry - routeGroup.GET("/exportEntries", controllers.GetFullEntries) - routeGroup.GET("/resolving", controllers.GetCurrentResolvingInformation) - - routeGroup.GET("/resetDB", controllers.DeleteAllEntries) // get single (full) entry - routeGroup.GET("/generalStats", controllers.GetGeneralStats) // get general stats about entries in DB - - routeGroup.GET("/tapStatus", controllers.GetTappingStatus) // get tapping status - routeGroup.GET("/analyzeStatus", controllers.AnalyzeInformation) - routeGroup.GET("/recentTLSLinks", controllers.GetRecentTLSLinks) + routeGroup.GET("/", controllers.GetEntries) // get entries (base/thin entries) + routeGroup.GET("/:entryId", controllers.GetEntry) // get single (full) entry } diff --git a/agent/pkg/routes/status_routes.go b/agent/pkg/routes/status_routes.go index 8ae559d60..54d623aae 100644 --- a/agent/pkg/routes/status_routes.go +++ b/agent/pkg/routes/status_routes.go @@ -9,8 +9,16 @@ func StatusRoutes(ginApp *gin.Engine) { routeGroup := ginApp.Group("/status") routeGroup.POST("/tappedPods", controllers.PostTappedPods) - routeGroup.GET("/tappersCount", controllers.GetTappersCount) + routeGroup.GET("/tap", controllers.GetTappingStatus) routeGroup.GET("/auth", controllers.GetAuthStatus) + + routeGroup.GET("/analyze", controllers.AnalyzeInformation) + + routeGroup.GET("/general", controllers.GetGeneralStats) // get general stats about entries in DB + + routeGroup.GET("/recentTLSLinks", controllers.GetRecentTLSLinks) + + routeGroup.GET("/resolving", controllers.GetCurrentResolvingInformation) } diff --git a/cli/apiserver/provider.go b/cli/apiserver/provider.go index 6369a4a34..7ac39f178 100644 --- a/cli/apiserver/provider.go +++ b/cli/apiserver/provider.go @@ -85,7 +85,7 @@ func (provider *apiServerProvider) GetGeneralStats() (map[string]interface{}, er if !provider.isReady { return nil, fmt.Errorf("trying to reach api server when not initialized yet") } - generalStatsUrl := fmt.Sprintf("%s/api/generalStats", provider.url) + generalStatsUrl := fmt.Sprintf("%s/status/general", provider.url) response, requestErr := http.Get(generalStatsUrl) if requestErr != nil { diff --git a/ui/src/helpers/api.js b/ui/src/helpers/api.js index 14b15ff9d..216b5b0c4 100644 --- a/ui/src/helpers/api.js +++ b/ui/src/helpers/api.js @@ -22,27 +22,27 @@ export default class Api { } tapStatus = async () => { - const response = await this.client.get("/api/tapStatus"); + const response = await this.client.get("/status/tap"); return response.data; } analyzeStatus = async () => { - const response = await this.client.get("/api/analyzeStatus"); + const response = await this.client.get("/status/analyze"); return response.data; } getEntry = async (entryId) => { - const response = await this.client.get(`/api/entries/${entryId}`); + const response = await this.client.get(`/entries/${entryId}`); return response.data; } fetchEntries = async (operator, timestamp) => { - const response = await this.client.get(`/api/entries?limit=50&operator=${operator}×tamp=${timestamp}`); + const response = await this.client.get(`/entries?limit=50&operator=${operator}×tamp=${timestamp}`); return response.data; } getRecentTLSLinks = async () => { - const response = await this.client.get("/api/recentTLSLinks"); + const response = await this.client.get("/status/recentTLSLinks"); return response.data; }