|
@@ -344,39 +344,44 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- caller, err := logic.GetUser(r.Header.Get("user"))
|
|
|
|
- if err != nil {
|
|
|
|
- logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- if !caller.IsAdmin && !caller.IsSuperAdmin {
|
|
|
|
- if _, ok := caller.RemoteGwIDs[nodeid]; !ok {
|
|
|
|
- err = errors.New("permission denied")
|
|
|
|
- slog.Error("failed to create extclient", "error", err)
|
|
|
|
- logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- // check if user has a config already for remote access client
|
|
|
|
- extclients, err := logic.GetNetworkExtClients(node.Network)
|
|
|
|
|
|
+ var userName string
|
|
|
|
+ if r.Header.Get("ismaster") == "yes" {
|
|
|
|
+ userName = logic.Master_uname
|
|
|
|
+ } else {
|
|
|
|
+ caller, err := logic.GetUser(r.Header.Get("user"))
|
|
if err != nil {
|
|
if err != nil {
|
|
- slog.Error("failed to get extclients", "error", err)
|
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- for _, extclient := range extclients {
|
|
|
|
- if extclient.RemoteAccessClientID != "" &&
|
|
|
|
- extclient.RemoteAccessClientID == customExtClient.RemoteAccessClientID && nodeid == extclient.IngressGatewayID {
|
|
|
|
- // extclient on the gw already exists for the remote access client
|
|
|
|
- err = errors.New("remote client config already exists on the gateway")
|
|
|
|
|
|
+ if !caller.IsAdmin && !caller.IsSuperAdmin {
|
|
|
|
+ if _, ok := caller.RemoteGwIDs[nodeid]; !ok {
|
|
|
|
+ err = errors.New("permission denied")
|
|
|
|
+ slog.Error("failed to create extclient", "error", err)
|
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ // check if user has a config already for remote access client
|
|
|
|
+ extclients, err := logic.GetNetworkExtClients(node.Network)
|
|
|
|
+ if err != nil {
|
|
slog.Error("failed to get extclients", "error", err)
|
|
slog.Error("failed to get extclients", "error", err)
|
|
- logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+ for _, extclient := range extclients {
|
|
|
|
+ if extclient.RemoteAccessClientID != "" &&
|
|
|
|
+ extclient.RemoteAccessClientID == customExtClient.RemoteAccessClientID && nodeid == extclient.IngressGatewayID {
|
|
|
|
+ // extclient on the gw already exists for the remote access client
|
|
|
|
+ err = errors.New("remote client config already exists on the gateway")
|
|
|
|
+ slog.Error("failed to get extclients", "error", err)
|
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
extclient := logic.UpdateExtClient(&models.ExtClient{}, &customExtClient)
|
|
extclient := logic.UpdateExtClient(&models.ExtClient{}, &customExtClient)
|
|
- extclient.OwnerID = caller.UserName
|
|
|
|
|
|
+ extclient.OwnerID = userName
|
|
extclient.RemoteAccessClientID = customExtClient.RemoteAccessClientID
|
|
extclient.RemoteAccessClientID = customExtClient.RemoteAccessClientID
|
|
extclient.IngressGatewayID = nodeid
|
|
extclient.IngressGatewayID = nodeid
|
|
|
|
|