Merge pull request #3637 from gravitl/NM-100

v1.1.0 Release Fixes
This commit is contained in:
Vishal Dalwadi
2025-09-08 07:36:43 +05:30
committed by GitHub
parent ed913c1fb2
commit 0eb7792c71
7 changed files with 50 additions and 10 deletions

View File

@@ -908,7 +908,7 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) {
update.Location = logic.GetHostLocInfo(logic.GetClientIP(r), os.Getenv("IP_INFO_TOKEN"))
}
newclient := logic.UpdateExtClient(&oldExtClient, &update)
if err := logic.DeleteExtClient(oldExtClient.Network, oldExtClient.ClientID); err != nil {
if err := logic.DeleteExtClient(oldExtClient.Network, oldExtClient.ClientID, true); err != nil {
slog.Error(
"failed to delete ext client",
"user",

View File

@@ -330,7 +330,7 @@ func updateNetworkACLv2(w http.ResponseWriter, r *http.Request) {
if servercfg.IsPro {
for _, client := range networkClientsMap {
client := client
err := logic.DeleteExtClient(client.Network, client.ClientID)
err := logic.DeleteExtClient(client.Network, client.ClientID, true)
if err != nil {
slog.Error(
"failed to delete client during update",

View File

@@ -683,8 +683,11 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
logic.SetInternetGw(newNode, newNode.InetNodeReq)
}
if currentNode.IsInternetGateway && newNode.IsInternetGateway {
// logic.UnsetInternetGw resets newNode.InetNodeReq.
// So, keeping a copy to pass into logic.SetInternetGw.
req := newNode.InetNodeReq
logic.UnsetInternetGw(newNode)
logic.SetInternetGw(newNode, newNode.InetNodeReq)
logic.SetInternetGw(newNode, req)
}
if !newNode.IsInternetGateway {
logic.UnsetInternetGw(newNode)

View File

@@ -309,9 +309,17 @@ func UpdateUser(userchange, user *models.User) (*models.User, error) {
user.Password = userchange.Password
}
if err := IsGroupsValid(userchange.UserGroups); err != nil {
return userchange, errors.New("invalid groups: " + err.Error())
validUserGroups := make(map[models.UserGroupID]struct{})
for userGroupID := range userchange.UserGroups {
_, err := GetUserGroup(userGroupID)
if err == nil {
validUserGroups[userGroupID] = struct{}{}
}
}
userchange.UserGroups = validUserGroups
if err := IsNetworkRolesValid(userchange.NetworkRoles); err != nil {
return userchange, errors.New("invalid network roles: " + err.Error())
}

View File

@@ -123,7 +123,7 @@ func UniqueIPNetStrList(ipnets []string) []string {
}
// DeleteExtClient - deletes an existing ext client
func DeleteExtClient(network string, clientid string) error {
func DeleteExtClient(network string, clientid string, isUpdate bool) error {
key, err := GetRecordKey(clientid, network)
if err != nil {
return err
@@ -146,7 +146,7 @@ func DeleteExtClient(network string, clientid string) error {
}
deleteExtClientFromCache(key)
}
if extClient.RemoteAccessClientID != "" {
if !isUpdate && extClient.RemoteAccessClientID != "" {
LogEvent(&models.Event{
Action: models.Disconnect,
Source: models.Subject{
@@ -173,7 +173,7 @@ func DeleteExtClient(network string, clientid string) error {
func DeleteExtClientAndCleanup(extClient models.ExtClient) error {
//delete extClient record
err := DeleteExtClient(extClient.Network, extClient.ClientID)
err := DeleteExtClient(extClient.Network, extClient.ClientID, false)
if err != nil {
slog.Error("DeleteExtClientAndCleanup-remove extClient record: ", "Error", err.Error())
return err
@@ -511,7 +511,7 @@ func ToggleExtClientConnectivity(client *models.ExtClient, enable bool) (models.
// update in DB
newClient := UpdateExtClient(client, &update)
if err := DeleteExtClient(client.Network, client.ClientID); err != nil {
if err := DeleteExtClient(client.Network, client.ClientID, true); err != nil {
slog.Error("failed to delete ext client during update", "id", client.ClientID, "network", client.Network, "error", err)
return newClient, err
}

View File

@@ -298,7 +298,7 @@ func DeleteGatewayExtClients(gatewayID string, networkName string) error {
}
for _, extClient := range currentExtClients {
if extClient.IngressGatewayID == gatewayID {
if err = DeleteExtClient(networkName, extClient.ClientID); err != nil {
if err = DeleteExtClient(networkName, extClient.ClientID, false); err != nil {
logger.Log(1, "failed to remove ext client", extClient.ClientID)
continue
}

View File

@@ -41,6 +41,7 @@ func Run() {
updateNetworks()
migrateNameservers()
resync()
deleteOldExtclients()
}
func updateNetworks() {
@@ -797,3 +798,31 @@ func migrateSettings() {
}
logic.UpsertServerSettings(settings)
}
func deleteOldExtclients() {
extclients, _ := logic.GetAllExtClients()
userExtclientMap := make(map[string][]models.ExtClient)
for _, extclient := range extclients {
if extclient.RemoteAccessClientID == "" {
continue
}
if extclient.Enabled {
continue
}
if _, ok := userExtclientMap[extclient.OwnerID]; !ok {
userExtclientMap[extclient.OwnerID] = make([]models.ExtClient, 0)
}
userExtclientMap[extclient.OwnerID] = append(userExtclientMap[extclient.OwnerID], extclient)
}
for _, userExtclients := range userExtclientMap {
if len(userExtclients) > 1 {
for _, extclient := range userExtclients[1:] {
_ = logic.DeleteExtClient(extclient.Network, extclient.Network, false)
}
}
}
}