MCPcopy
hub / github.com/lxc/incus / networkForwardGet

Function networkForwardGet

cmd/incusd/network_forwards.go:499–581  ·  view source on GitHub ↗

swagger:operation GET /1.0/networks/{networkName}/forwards/{listenAddress} network-forwards network_forward_get Get the network address forward Gets a specific network address forward. --- produces: - application/json parameters: - in: path name: networkName description: Netw

(d *Daemon, r *http.Request)

Source from the content-addressed store, hash-verified

497// "500":
498// $ref: "#/responses/InternalServerError"
499func networkForwardGet(d *Daemon, r *http.Request) response.Response {
500 s := d.State()
501
502 resp := forwardedResponseIfTargetIsRemote(s, r)
503 if resp != nil {
504 return resp
505 }
506
507 projectName, reqProject, err := project.NetworkProject(s.DB.Cluster, request.ProjectParam(r))
508 if err != nil {
509 return response.SmartError(err)
510 }
511
512 networkName, err := pathVar(r, "networkName")
513 if err != nil {
514 return response.SmartError(err)
515 }
516
517 n, err := network.LoadByName(s, projectName, networkName)
518 if err != nil {
519 return response.SmartError(fmt.Errorf("Failed loading network: %w", err))
520 }
521
522 // Check if project allows access to network.
523 if !project.NetworkAllowed(reqProject.Config, networkName, n.IsManaged()) {
524 return response.SmartError(api.StatusErrorf(http.StatusNotFound, "Network not found"))
525 }
526
527 if !n.Info().AddressForwards {
528 return response.BadRequest(fmt.Errorf("Network driver %q does not support forwards", n.Type()))
529 }
530
531 listenAddress, err := pathVar(r, "listenAddress")
532 if err != nil {
533 return response.SmartError(err)
534 }
535
536 targetMember := request.QueryParam(r, "target")
537 memberSpecific := targetMember != ""
538
539 var forward *api.NetworkForward
540
541 err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
542 networkID := n.ID()
543 dbRecords, err := dbCluster.GetNetworkForwards(ctx, tx.Tx(), dbCluster.NetworkForwardFilter{
544 NetworkID: &networkID,
545 ListenAddress: &listenAddress,
546 })
547 if err != nil {
548 return err
549 }
550
551 filteredRecords := make([]dbCluster.NetworkForward, 0, len(dbRecords))
552 for _, dbRecord := range dbRecords {
553 // Include all records if memberSpecific is turned off
554 // Otherwise, filter based offed of dbRecords with same node id
555 if !memberSpecific || (!dbRecord.NodeID.Valid || (dbRecord.NodeID.Int64 == tx.GetNodeID())) {
556 filteredRecords = append(filteredRecords, dbRecord)

Callers

nothing calls this directly

Calls 15

EtagMethod · 0.95
NetworkProjectFunction · 0.92
ProjectParamFunction · 0.92
SmartErrorFunction · 0.92
LoadByNameFunction · 0.92
NetworkAllowedFunction · 0.92
StatusErrorfFunction · 0.92
BadRequestFunction · 0.92
QueryParamFunction · 0.92
SyncResponseETagFunction · 0.92
pathVarFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…