Browse Source

Release Fixes: v1.2.0 (#3713)

* feat(go): allow put and post requests to self;

* feat(go): add old objects to delete events;

* feat(go): add search domains to UserRemoteGws;
Vishal Dalwadi 1 month ago
parent
commit
b1e4d1158b

+ 4 - 0
controllers/acls.go

@@ -426,6 +426,10 @@ func deleteAcl(w http.ResponseWriter, r *http.Request) {
 		},
 		},
 		NetworkID: acl.NetworkID,
 		NetworkID: acl.NetworkID,
 		Origin:    models.Dashboard,
 		Origin:    models.Dashboard,
+		Diff: models.Diff{
+			Old: acl,
+			New: nil,
+		},
 	})
 	})
 	go mq.PublishPeerUpdate(true)
 	go mq.PublishPeerUpdate(true)
 	logic.ReturnSuccessResponse(w, r, "deleted acl "+acl.Name)
 	logic.ReturnSuccessResponse(w, r, "deleted acl "+acl.Name)

+ 4 - 0
controllers/dns.go

@@ -316,6 +316,10 @@ func deleteNs(w http.ResponseWriter, r *http.Request) {
 		},
 		},
 		NetworkID: models.NetworkID(ns.NetworkID),
 		NetworkID: models.NetworkID(ns.NetworkID),
 		Origin:    models.Dashboard,
 		Origin:    models.Dashboard,
+		Diff: models.Diff{
+			Old: ns,
+			New: nil,
+		},
 	})
 	})
 
 
 	go mq.PublishPeerUpdate(false)
 	go mq.PublishPeerUpdate(false)

+ 4 - 0
controllers/egress.go

@@ -400,6 +400,10 @@ func deleteEgress(w http.ResponseWriter, r *http.Request) {
 		},
 		},
 		NetworkID: models.NetworkID(e.Network),
 		NetworkID: models.NetworkID(e.Network),
 		Origin:    models.Dashboard,
 		Origin:    models.Dashboard,
+		Diff: models.Diff{
+			Old: e,
+			New: nil,
+		},
 	})
 	})
 	// delete related acl policies
 	// delete related acl policies
 	acls := logic.ListAcls()
 	acls := logic.ListAcls()

+ 4 - 0
controllers/enrollmentkeys.go

@@ -97,6 +97,10 @@ func deleteEnrollmentKey(w http.ResponseWriter, r *http.Request) {
 			Type: models.EnrollmentKeySub,
 			Type: models.EnrollmentKeySub,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: key,
+			New: nil,
+		},
 	})
 	})
 	logger.Log(2, r.Header.Get("user"), "deleted enrollment key", keyID)
 	logger.Log(2, r.Header.Get("user"), "deleted enrollment key", keyID)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)

+ 4 - 0
controllers/gateway.go

@@ -278,6 +278,10 @@ func deleteGateway(w http.ResponseWriter, r *http.Request) {
 			Type: models.GatewaySub,
 			Type: models.GatewaySub,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: node,
+			New: node,
+		},
 	})
 	})
 	logic.GetNodeStatus(&node, false)
 	logic.GetNodeStatus(&node, false)
 	apiNode := node.ConvertToAPINode()
 	apiNode := node.ConvertToAPINode()

+ 4 - 0
controllers/hosts.go

@@ -498,6 +498,10 @@ func deleteHost(w http.ResponseWriter, r *http.Request) {
 			Type: models.DeviceSub,
 			Type: models.DeviceSub,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: currHost,
+			New: nil,
+		},
 	})
 	})
 	apiHostData := currHost.ConvertNMHostToAPI()
 	apiHostData := currHost.ConvertNMHostToAPI()
 	logger.Log(2, r.Header.Get("user"), "removed host", currHost.Name)
 	logger.Log(2, r.Header.Get("user"), "removed host", currHost.Name)

+ 4 - 0
controllers/network.go

@@ -565,6 +565,10 @@ func deleteNetwork(w http.ResponseWriter, r *http.Request) {
 			Type: models.NetworkSub,
 			Type: models.NetworkSub,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: network,
+			New: nil,
+		},
 	})
 	})
 	logger.Log(1, r.Header.Get("user"), "deleted network", network)
 	logger.Log(1, r.Header.Get("user"), "deleted network", network)
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)

+ 8 - 0
controllers/user.go

@@ -244,6 +244,10 @@ func deleteUserAccessTokens(w http.ResponseWriter, r *http.Request) {
 			Info: a,
 			Info: a,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: a,
+			New: nil,
+		},
 	})
 	})
 	logic.ReturnSuccessResponseWithJson(w, r, nil, "revoked access token")
 	logic.ReturnSuccessResponseWithJson(w, r, nil, "revoked access token")
 }
 }
@@ -1580,6 +1584,10 @@ func deleteUser(w http.ResponseWriter, r *http.Request) {
 			Type: models.UserSub,
 			Type: models.UserSub,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: user,
+			New: nil,
+		},
 	})
 	})
 	// check and delete extclient with this ownerID
 	// check and delete extclient with this ownerID
 	go func() {
 	go func() {

+ 1 - 0
models/structs.go

@@ -56,6 +56,7 @@ type UserRemoteGws struct {
 	DnsAddress        string     `json:"dns_address"`
 	DnsAddress        string     `json:"dns_address"`
 	Addresses         string     `json:"addresses"`
 	Addresses         string     `json:"addresses"`
 	MatchDomains      []string   `json:"match_domains"`
 	MatchDomains      []string   `json:"match_domains"`
+	SearchDomains     []string   `json:"search_domains"`
 }
 }
 
 
 // UserRAGs - struct for user access gws
 // UserRAGs - struct for user access gws

+ 4 - 0
pro/controllers/tags.go

@@ -293,6 +293,10 @@ func deleteTag(w http.ResponseWriter, r *http.Request) {
 		},
 		},
 		NetworkID: tag.Network,
 		NetworkID: tag.Network,
 		Origin:    models.Dashboard,
 		Origin:    models.Dashboard,
+		Diff: models.Diff{
+			Old: tag,
+			New: nil,
+		},
 	})
 	})
 	logic.ReturnSuccessResponse(w, r, "deleted tag "+tagID)
 	logic.ReturnSuccessResponse(w, r, "deleted tag "+tagID)
 }
 }

+ 26 - 0
pro/controllers/users.go

@@ -352,6 +352,12 @@ func deleteUserInvite(w http.ResponseWriter, r *http.Request) {
 			Type: models.UserInviteSub,
 			Type: models.UserInviteSub,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: models.UserInvite{
+				Email: email,
+			},
+			New: nil,
+		},
 	})
 	})
 	logic.ReturnSuccessResponse(w, r, "deleted user invite")
 	logic.ReturnSuccessResponse(w, r, "deleted user invite")
 }
 }
@@ -872,6 +878,10 @@ func deleteUserGroup(w http.ResponseWriter, r *http.Request) {
 			Type: models.UserGroupSub,
 			Type: models.UserGroupSub,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: userG,
+			New: nil,
+		},
 	})
 	})
 
 
 	logic.ReturnSuccessResponseWithJson(w, r, nil, "deleted user group")
 	logic.ReturnSuccessResponseWithJson(w, r, nil, "deleted user group")
@@ -1063,6 +1073,10 @@ func deleteRole(w http.ResponseWriter, r *http.Request) {
 			Type: models.UserRoleSub,
 			Type: models.UserRoleSub,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: role,
+			New: nil,
+		},
 	})
 	})
 	go proLogic.UpdatesUserGwAccessOnRoleUpdates(role.NetworkLevelAccess, make(map[models.RsrcType]map[models.RsrcID]models.RsrcPermissionScope), role.NetworkID.String())
 	go proLogic.UpdatesUserGwAccessOnRoleUpdates(role.NetworkLevelAccess, make(map[models.RsrcType]map[models.RsrcID]models.RsrcPermissionScope), role.NetworkID.String())
 	logic.ReturnSuccessResponseWithJson(w, r, nil, "deleted user role")
 	logic.ReturnSuccessResponseWithJson(w, r, nil, "deleted user role")
@@ -1602,6 +1616,9 @@ func getUserRemoteAccessGwsV1(w http.ResponseWriter, r *http.Request) {
 			hNs := logic.GetNameserversForNode(&node)
 			hNs := logic.GetNameserversForNode(&node)
 			for _, nsI := range hNs {
 			for _, nsI := range hNs {
 				gw.MatchDomains = append(gw.MatchDomains, nsI.MatchDomain)
 				gw.MatchDomains = append(gw.MatchDomains, nsI.MatchDomain)
+				if nsI.IsSearchDomain {
+					gw.SearchDomains = append(gw.SearchDomains, nsI.MatchDomain)
+				}
 			}
 			}
 		}
 		}
 		gw.MatchDomains = append(gw.MatchDomains, logic.GetEgressDomainsByAccess(user, models.NetworkID(node.Network))...)
 		gw.MatchDomains = append(gw.MatchDomains, logic.GetEgressDomainsByAccess(user, models.NetworkID(node.Network))...)
@@ -1654,6 +1671,9 @@ func getUserRemoteAccessGwsV1(w http.ResponseWriter, r *http.Request) {
 			hNs := logic.GetNameserversForNode(&node)
 			hNs := logic.GetNameserversForNode(&node)
 			for _, nsI := range hNs {
 			for _, nsI := range hNs {
 				gw.MatchDomains = append(gw.MatchDomains, nsI.MatchDomain)
 				gw.MatchDomains = append(gw.MatchDomains, nsI.MatchDomain)
+				if nsI.IsSearchDomain {
+					gw.SearchDomains = append(gw.SearchDomains, nsI.MatchDomain)
+				}
 			}
 			}
 		}
 		}
 		gw.MatchDomains = append(gw.MatchDomains, logic.GetEgressDomainsByAccess(user, models.NetworkID(node.Network))...)
 		gw.MatchDomains = append(gw.MatchDomains, logic.GetEgressDomainsByAccess(user, models.NetworkID(node.Network))...)
@@ -1854,6 +1874,12 @@ func deletePendingUser(w http.ResponseWriter, r *http.Request) {
 			Type: models.PendingUserSub,
 			Type: models.PendingUserSub,
 		},
 		},
 		Origin: models.Dashboard,
 		Origin: models.Dashboard,
+		Diff: models.Diff{
+			Old: models.User{
+				UserName: username,
+			},
+			New: nil,
+		},
 	})
 	})
 	logic.ReturnSuccessResponse(w, r, "deleted pending "+username)
 	logic.ReturnSuccessResponse(w, r, "deleted pending "+username)
 }
 }

+ 5 - 0
pro/logic/security.go

@@ -174,6 +174,11 @@ func GlobalPermissionsCheck(username string, r *http.Request) error {
 		if r.Method == http.MethodGet {
 		if r.Method == http.MethodGet {
 			return nil
 			return nil
 		} else {
 		} else {
+			if (r.Method == http.MethodPut || r.Method == http.MethodPost) &&
+				strings.Contains(r.URL.Path, "/api/users/"+username) {
+				return nil
+			}
+
 			return errors.New("access denied")
 			return errors.New("access denied")
 		}
 		}
 	}
 	}