mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-26 21:01:32 +08:00
@@ -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",
|
||||
|
@@ -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",
|
||||
|
@@ -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)
|
||||
|
@@ -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())
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user