瀏覽代碼

log user crud events

abhishek9686 4 月之前
父節點
當前提交
699ebd087a
共有 6 個文件被更改,包括 99 次插入13 次删除
  1. 15 0
      controllers/ext_client.go
  2. 50 3
      controllers/user.go
  3. 16 0
      logic/extpeers.go
  4. 1 1
      logic/telemetry.go
  5. 14 6
      models/events.go
  6. 3 3
      pro/logic/events.go

+ 15 - 0
controllers/ext_client.go

@@ -798,6 +798,21 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
 		"clientid",
 		extclient.ClientID,
 	)
+	// if created by user from client app, log event
+	logic.LogEvent(&models.Event{
+		Action: models.Connect,
+		Source: models.Subject{
+			ID:   userName,
+			Name: userName,
+			Type: models.UserSub,
+		},
+		Target: models.Subject{
+			ID:   extclient.Network,
+			Name: extclient.Network,
+			Type: models.NetworkSub,
+		},
+		Origin: models.ClientApp,
+	})
 	w.WriteHeader(http.StatusOK)
 	go func() {
 		if err := logic.SetClientDefaultACLs(&extclient); err != nil {

+ 50 - 3
controllers/user.go

@@ -260,7 +260,7 @@ func authenticateUser(response http.ResponseWriter, request *http.Request) {
 			return
 		}
 		// log user activity
-		logic.LogEvent(models.Activity{
+		logic.LogEvent(&models.Event{
 			Action: models.Login,
 			Source: models.Subject{
 				ID:   user.UserName,
@@ -275,7 +275,7 @@ func authenticateUser(response http.ResponseWriter, request *http.Request) {
 			Origin: models.Dashboard,
 		})
 	} else {
-		logic.LogEvent(models.Activity{
+		logic.LogEvent(&models.Event{
 			Action: models.Login,
 			Source: models.Subject{
 				ID:   user.UserName,
@@ -645,6 +645,20 @@ func createUser(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
 		return
 	}
+	logic.LogEvent(&models.Event{
+		Action: models.Create,
+		Source: models.Subject{
+			ID:   caller.UserName,
+			Name: caller.UserName,
+			Type: models.UserSub,
+		},
+		Target: models.Subject{
+			ID:   user.UserName,
+			Name: user.UserName,
+			Type: models.UserSub,
+		},
+		Origin: models.Dashboard,
+	})
 	logic.DeleteUserInvite(user.UserName)
 	logic.DeletePendingUser(user.UserName)
 	go mq.PublishPeerUpdate(false)
@@ -783,6 +797,24 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
 	if userchange.PlatformRoleID != user.PlatformRoleID || !logic.CompareMaps(user.UserGroups, userchange.UserGroups) {
 		(&schema.UserAccessToken{UserName: user.UserName}).DeleteAllUserTokens(r.Context())
 	}
+	e := models.Event{
+		Action: models.Update,
+		Source: models.Subject{
+			ID:   caller.UserName,
+			Name: caller.UserName,
+			Type: models.UserSub,
+		},
+		Target: models.Subject{
+			ID:   user.UserName,
+			Name: user.UserName,
+			Type: models.UserSub,
+		},
+		Diff: models.Diff{
+			Old: user,
+			New: userchange,
+		},
+		Origin: models.Dashboard,
+	}
 	user, err = logic.UpdateUser(&userchange, user)
 	if err != nil {
 		logger.Log(0, username,
@@ -790,6 +822,7 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
 		return
 	}
+	logic.LogEvent(&e)
 	go mq.PublishPeerUpdate(false)
 	logger.Log(1, username, "was updated")
 	json.NewEncoder(w).Encode(logic.ToReturnUser(*user))
@@ -868,6 +901,20 @@ func deleteUser(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
 		return
 	}
+	logic.LogEvent(&models.Event{
+		Action: models.Delete,
+		Source: models.Subject{
+			ID:   caller.UserName,
+			Name: caller.UserName,
+			Type: models.UserSub,
+		},
+		Target: models.Subject{
+			ID:   user.UserName,
+			Name: user.UserName,
+			Type: models.UserSub,
+		},
+		Origin: models.Dashboard,
+	})
 	// check and delete extclient with this ownerID
 	go func() {
 		extclients, err := logic.GetAllExtClients()
@@ -961,7 +1008,7 @@ func logout(w http.ResponseWriter, r *http.Request) {
 		target = models.ClientAppSub
 	}
 	if target != "" {
-		logic.LogEvent(models.Activity{
+		logic.LogEvent(&models.Event{
 			Action: models.LogOut,
 			Source: models.Subject{
 				ID:   user.UserName,

+ 16 - 0
logic/extpeers.go

@@ -119,6 +119,22 @@ func DeleteExtClient(network string, clientid string) error {
 		}
 		deleteExtClientFromCache(key)
 	}
+	if extClient.OwnerID != "" {
+		LogEvent(&models.Event{
+			Action: models.Disconnect,
+			Source: models.Subject{
+				ID:   extClient.OwnerID,
+				Name: extClient.OwnerID,
+				Type: models.UserSub,
+			},
+			Target: models.Subject{
+				ID:   extClient.Network,
+				Name: extClient.Network,
+				Type: models.NetworkSub,
+			},
+			Origin: models.ClientApp,
+		})
+	}
 	go RemoveNodeFromAclPolicy(extClient.ConvertToStaticNode())
 	return nil
 }

+ 1 - 1
logic/telemetry.go

@@ -20,7 +20,7 @@ var (
 	telServerRecord = models.Telemetry{}
 )
 
-var LogEvent = func(a models.Activity) {}
+var LogEvent = func(a *models.Event) {}
 
 // posthog_pub_key - Key for sending data to PostHog
 const posthog_pub_key = "phc_1vEXhPOA1P7HP5jP2dVU9xDTUqXHAelmtravyZ1vvES"

+ 14 - 6
models/events.go

@@ -3,11 +3,13 @@ package models
 type Action string
 
 const (
-	Create Action = "CREATE"
-	Update Action = "UPDATE"
-	Delete Action = "DELETE"
-	Login  Action = "LOGIN"
-	LogOut Action = "LOGOUT"
+	Create     Action = "CREATE"
+	Update     Action = "UPDATE"
+	Delete     Action = "DELETE"
+	Login      Action = "LOGIN"
+	LogOut     Action = "LOGOUT"
+	Connect    Action = "CONNECT"
+	Disconnect Action = "DISCONNECT"
 )
 
 type SubjectType string
@@ -43,10 +45,16 @@ type Subject struct {
 	Type SubjectType `json:"subject_type"`
 }
 
-type Activity struct {
+type Diff struct {
+	Old interface{}
+	New interface{}
+}
+
+type Event struct {
 	Action    Action
 	Source    Subject
 	Origin    Origin
 	Target    Subject
 	NetworkID NetworkID
+	Diff      Diff
 }

+ 3 - 3
pro/logic/events.go

@@ -11,10 +11,10 @@ import (
 	"github.com/gravitl/netmaker/schema"
 )
 
-var EventActivityCh = make(chan models.Activity, 100)
+var EventActivityCh = make(chan models.Event, 100)
 
-func LogEvent(a models.Activity) {
-	EventActivityCh <- a
+func LogEvent(a *models.Event) {
+	EventActivityCh <- *a
 }
 
 func EventWatcher() {