Browse Source

Merge pull request #3423 from gravitl/release-v0.90.0

Release v0.90.0
Abhishek K 5 months ago
parent
commit
7e741b3624
4 changed files with 258 additions and 106 deletions
  1. 5 1
      controllers/network.go
  2. 46 1
      logic/acls.go
  3. 1 1
      logic/peers.go
  4. 206 103
      swagger.yaml

+ 5 - 1
controllers/network.go

@@ -436,7 +436,7 @@ func getNetworkACL(w http.ResponseWriter, r *http.Request) {
 // @Security    oauth
 // @Security    oauth
 // @Param       networkname path string true "Network name"
 // @Param       networkname path string true "Network name"
 // @Produce     json
 // @Produce     json
-// @Success     200 {object} acls.SuccessResponse
+// @Success     200 {object} models.SuccessResponse
 // @Failure     500 {object} models.ErrorResponse
 // @Failure     500 {object} models.ErrorResponse
 func getNetworkEgressRoutes(w http.ResponseWriter, r *http.Request) {
 func getNetworkEgressRoutes(w http.ResponseWriter, r *http.Request) {
 	var params = mux.Vars(r)
 	var params = mux.Vars(r)
@@ -627,6 +627,10 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
 			logic.CreateFailOver(*newNode)
 			logic.CreateFailOver(*newNode)
 			// make host remote access gateway
 			// make host remote access gateway
 			logic.CreateIngressGateway(network.NetID, newNode.ID.String(), models.IngressRequest{})
 			logic.CreateIngressGateway(network.NetID, newNode.ID.String(), models.IngressRequest{})
+			logic.CreateRelay(models.RelayRequest{
+				NodeID: newNode.ID.String(),
+				NetID:  network.NetID,
+			})
 		}
 		}
 		// send peer updates
 		// send peer updates
 		if err = mq.PublishPeerUpdate(false); err != nil {
 		if err = mq.PublishPeerUpdate(false); err != nil {

+ 46 - 1
logic/acls.go

@@ -1334,6 +1334,51 @@ func getUserAclRulesForNode(targetnode *models.Node,
 	return rules
 	return rules
 }
 }
 
 
+func checkIfAnyActiveEgressPolicy(targetNode models.Node) bool {
+	if !targetNode.IsEgressGateway {
+		return false
+	}
+	var targetNodeTags = make(map[models.TagID]struct{})
+	if targetNode.Mutex != nil {
+		targetNode.Mutex.Lock()
+		targetNodeTags = maps.Clone(targetNode.Tags)
+		targetNode.Mutex.Unlock()
+	} else {
+		targetNodeTags = maps.Clone(targetNode.Tags)
+	}
+	if targetNodeTags == nil {
+		targetNodeTags = make(map[models.TagID]struct{})
+	}
+	targetNodeTags[models.TagID(targetNode.ID.String())] = struct{}{}
+	targetNodeTags["*"] = struct{}{}
+	acls, _ := ListAclsByNetwork(models.NetworkID(targetNode.Network))
+	for _, acl := range acls {
+		if !acl.Enabled {
+			continue
+		}
+		srcTags := convAclTagToValueMap(acl.Src)
+		dstTags := convAclTagToValueMap(acl.Dst)
+		for nodeTag := range targetNodeTags {
+			if acl.RuleType == models.DevicePolicy {
+				if _, ok := srcTags[nodeTag.String()]; ok {
+					return true
+				}
+				if _, ok := srcTags[targetNode.ID.String()]; ok {
+					return true
+				}
+			}
+
+			if _, ok := dstTags[nodeTag.String()]; ok {
+				return true
+			}
+			if _, ok := dstTags[targetNode.ID.String()]; ok {
+				return true
+			}
+		}
+	}
+	return false
+}
+
 func checkIfAnyPolicyisUniDirectional(targetNode models.Node) bool {
 func checkIfAnyPolicyisUniDirectional(targetNode models.Node) bool {
 	var targetNodeTags = make(map[models.TagID]struct{})
 	var targetNodeTags = make(map[models.TagID]struct{})
 	if targetNode.Mutex != nil {
 	if targetNode.Mutex != nil {
@@ -1617,7 +1662,7 @@ func GetEgressRulesForNode(targetnode models.Node) (rules map[string]models.AclR
 	/*
 	/*
 		 if target node is egress gateway
 		 if target node is egress gateway
 			if acl policy has egress route and it is present in target node egress ranges
 			if acl policy has egress route and it is present in target node egress ranges
-			fetches all the nodes in that policy and add rules
+			fetch all the nodes in that policy and add rules
 	*/
 	*/
 
 
 	for _, rangeI := range targetnode.EgressGatewayRanges {
 	for _, rangeI := range targetnode.EgressGatewayRanges {

+ 1 - 1
logic/peers.go

@@ -204,7 +204,7 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 		defaultUserPolicy, _ := GetDefaultPolicy(models.NetworkID(node.Network), models.UserPolicy)
 		defaultUserPolicy, _ := GetDefaultPolicy(models.NetworkID(node.Network), models.UserPolicy)
 		defaultDevicePolicy, _ := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)
 		defaultDevicePolicy, _ := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)
 
 
-		if (defaultDevicePolicy.Enabled && defaultUserPolicy.Enabled) || !checkIfAnyPolicyisUniDirectional(node) {
+		if (defaultDevicePolicy.Enabled && defaultUserPolicy.Enabled) || (!checkIfAnyPolicyisUniDirectional(node) && !checkIfAnyActiveEgressPolicy(node)) {
 			if node.NetworkRange.IP != nil {
 			if node.NetworkRange.IP != nil {
 				hostPeerUpdate.FwUpdate.AllowedNetworks = append(hostPeerUpdate.FwUpdate.AllowedNetworks, node.NetworkRange)
 				hostPeerUpdate.FwUpdate.AllowedNetworks = append(hostPeerUpdate.FwUpdate.AllowedNetworks, node.NetworkRange)
 			}
 			}

+ 206 - 103
swagger.yaml

@@ -1,7 +1,6 @@
 definitions:
 definitions:
   acls.ACL:
   acls.ACL:
     additionalProperties:
     additionalProperties:
-      format: int32
       type: integer
       type: integer
     type: object
     type: object
   acls.ACLContainer:
   acls.ACLContainer:
@@ -56,15 +55,15 @@ definitions:
         type: string
         type: string
       egressesLimit:
       egressesLimit:
         type: integer
         type: integer
-      email_sender_addr:
+      emailSenderAddr:
         type: string
         type: string
-      email_sender_password:
+      emailSenderPassword:
         type: string
         type: string
-      email_sender_user:
+      emailSenderUser:
         type: string
         type: string
       emqxRestEndpoint:
       emqxRestEndpoint:
         type: string
         type: string
-      endpoint_detection:
+      endpointDetection:
         type: boolean
         type: boolean
       environment:
       environment:
         type: string
         type: string
@@ -91,6 +90,8 @@ definitions:
         type: string
         type: string
       metricsExporter:
       metricsExporter:
         type: string
         type: string
+      metricsPort:
+        type: integer
       mqpassword:
       mqpassword:
         type: string
         type: string
       mquserName:
       mquserName:
@@ -115,15 +116,17 @@ definitions:
         type: string
         type: string
       racAutoDisable:
       racAutoDisable:
         type: boolean
         type: boolean
+      racRestrictToSingleNetwork:
+        type: boolean
       restBackend:
       restBackend:
         type: string
         type: string
       server:
       server:
         type: string
         type: string
       serverBrokerEndpoint:
       serverBrokerEndpoint:
         type: string
         type: string
-      smtp_host:
+      smtpHost:
         type: string
         type: string
-      smtp_port:
+      smtpPort:
         type: integer
         type: integer
       sqlconn:
       sqlconn:
         type: string
         type: string
@@ -200,6 +203,14 @@ definitions:
         allOf:
         allOf:
         - $ref: '#/definitions/models.AllowedTrafficDirection'
         - $ref: '#/definitions/models.AllowedTrafficDirection'
         description: single or two-way
         description: single or two-way
+      dst:
+        items:
+          $ref: '#/definitions/net.IPNet'
+        type: array
+      dst6:
+        items:
+          $ref: '#/definitions/net.IPNet'
+        type: array
       id:
       id:
         type: string
         type: string
       ip_list:
       ip_list:
@@ -306,6 +317,10 @@ definitions:
         items:
         items:
           type: string
           type: string
         type: array
         type: array
+      egressgatewayranges_with_metric:
+        items:
+          $ref: '#/definitions/models.EgressRangeMetric'
+        type: array
       expdatetime:
       expdatetime:
         format: int64
         format: int64
         type: integer
         type: integer
@@ -424,9 +439,17 @@ definitions:
         items:
         items:
           type: string
           type: string
         type: array
         type: array
+      ranges_with_metric:
+        items:
+          $ref: '#/definitions/models.EgressRangeMetric'
+        type: array
     type: object
     type: object
   models.EgressInfo:
   models.EgressInfo:
     properties:
     properties:
+      egress_fw_rules:
+        additionalProperties:
+          $ref: '#/definitions/models.AclRule'
+        type: object
       egress_gateway_cfg:
       egress_gateway_cfg:
         $ref: '#/definitions/models.EgressGatewayRequest'
         $ref: '#/definitions/models.EgressGatewayRequest'
       egress_gw_addr:
       egress_gw_addr:
@@ -450,10 +473,26 @@ definitions:
         items:
         items:
           type: string
           type: string
         type: array
         type: array
+      egress_ranges_metric:
+        items:
+          $ref: '#/definitions/models.EgressRangeMetric'
+        type: array
+      network:
+        type: string
       node_addr:
       node_addr:
         $ref: '#/definitions/net.IPNet'
         $ref: '#/definitions/net.IPNet'
       node_addr6:
       node_addr6:
         $ref: '#/definitions/net.IPNet'
         $ref: '#/definitions/net.IPNet'
+      peer_key:
+        type: string
+    type: object
+  models.EgressRangeMetric:
+    properties:
+      network:
+        type: string
+      route_metric:
+        description: preffered range 1-999
+        type: integer
     type: object
     type: object
   models.EnrollmentKey:
   models.EnrollmentKey:
     properties:
     properties:
@@ -687,6 +726,7 @@ definitions:
   models.HostMqAction:
   models.HostMqAction:
     enum:
     enum:
     - UPGRADE
     - UPGRADE
+    - FORCE_UPGRADE
     - SIGNAL_HOST
     - SIGNAL_HOST
     - UPDATE_HOST
     - UPDATE_HOST
     - DELETE_HOST
     - DELETE_HOST
@@ -701,6 +741,7 @@ definitions:
     type: string
     type: string
     x-enum-varnames:
     x-enum-varnames:
     - Upgrade
     - Upgrade
+    - ForceUpgrade
     - SignalHost
     - SignalHost
     - UpdateHost
     - UpdateHost
     - DeleteHost
     - DeleteHost
@@ -724,6 +765,8 @@ definitions:
         type: boolean
         type: boolean
       listen_port:
       listen_port:
         type: integer
         type: integer
+      version:
+        type: string
     type: object
     type: object
   models.HostPull:
   models.HostPull:
     properties:
     properties:
@@ -821,8 +864,6 @@ definitions:
     type: object
     type: object
   models.IngressInfo:
   models.IngressInfo:
     properties:
     properties:
-      allow_all:
-        type: boolean
       egress_ranges:
       egress_ranges:
         items:
         items:
           $ref: '#/definitions/net.IPNet'
           $ref: '#/definitions/net.IPNet'
@@ -933,6 +974,10 @@ definitions:
         type: string
         type: string
       defaultudpholepunch:
       defaultudpholepunch:
         type: string
         type: string
+      dns_nameservers:
+        items:
+          type: string
+        type: array
       isipv4:
       isipv4:
         type: string
         type: string
       isipv6:
       isipv6:
@@ -1013,6 +1058,8 @@ definitions:
         type: string
         type: string
       is_fail_over:
       is_fail_over:
         type: boolean
         type: boolean
+      is_gw:
+        type: boolean
       is_static:
       is_static:
         type: boolean
         type: boolean
       is_user_node:
       is_user_node:
@@ -1090,6 +1137,7 @@ definitions:
     - warning
     - warning
     - error
     - error
     - unknown
     - unknown
+    - disconnected
     type: string
     type: string
     x-enum-varnames:
     x-enum-varnames:
     - OnlineSt
     - OnlineSt
@@ -1097,6 +1145,7 @@ definitions:
     - WarningSt
     - WarningSt
     - ErrorSt
     - ErrorSt
     - UnKnown
     - UnKnown
+    - Disconnected
   models.PeerMap:
   models.PeerMap:
     additionalProperties:
     additionalProperties:
       $ref: '#/definitions/models.IDandAddr'
       $ref: '#/definitions/models.IDandAddr'
@@ -1120,17 +1169,6 @@ definitions:
       server_config:
       server_config:
         $ref: '#/definitions/models.ServerConfig'
         $ref: '#/definitions/models.ServerConfig'
     type: object
     type: object
-  models.RelayRequest:
-    properties:
-      netid:
-        type: string
-      nodeid:
-        type: string
-      relayaddrs:
-        items:
-          type: string
-        type: array
-    type: object
   models.ReturnUser:
   models.ReturnUser:
     properties:
     properties:
       auth_type:
       auth_type:
@@ -1194,10 +1232,14 @@ definitions:
         type: string
         type: string
       dnsmode:
       dnsmode:
         type: string
         type: string
+      endpointDetection:
+        type: boolean
       manageDNS:
       manageDNS:
         type: boolean
         type: boolean
       metricInterval:
       metricInterval:
         type: string
         type: string
+      metricsPort:
+        type: integer
       mqpassword:
       mqpassword:
         type: string
         type: string
       mqport:
       mqport:
@@ -1293,7 +1335,6 @@ definitions:
           type: object
           type: object
         type: object
         type: object
       username:
       username:
-        maxLength: 40
         minLength: 3
         minLength: 3
         type: string
         type: string
     required:
     required:
@@ -1308,12 +1349,16 @@ definitions:
     type: object
     type: object
   models.UserRemoteGws:
   models.UserRemoteGws:
     properties:
     properties:
+      addresses:
+        type: string
       allowed_endpoints:
       allowed_endpoints:
         items:
         items:
           type: string
           type: string
         type: array
         type: array
       connected:
       connected:
         type: boolean
         type: boolean
+      dns_address:
+        type: string
       gw_client:
       gw_client:
         $ref: '#/definitions/models.ExtClient'
         $ref: '#/definitions/models.ExtClient'
       gw_listen_port:
       gw_listen_port:
@@ -1334,6 +1379,8 @@ definitions:
         type: array
         type: array
       remote_access_gw_id:
       remote_access_gw_id:
         type: string
         type: string
+      status:
+        $ref: '#/definitions/models.NodeStatus'
     type: object
     type: object
   models.UserRoleID:
   models.UserRoleID:
     enum:
     enum:
@@ -1390,7 +1437,6 @@ definitions:
       mask:
       mask:
         description: network mask
         description: network mask
         items:
         items:
-          format: int32
           type: integer
           type: integer
         type: array
         type: array
     type: object
     type: object
@@ -1427,7 +1473,6 @@ definitions:
           for this peer, if not nil.
           for this peer, if not nil.
 
 
           A non-nil value of 0 will clear the persistent keepalive interval.
           A non-nil value of 0 will clear the persistent keepalive interval.
-        format: int64
         type: integer
         type: integer
       presharedKey:
       presharedKey:
         description: |-
         description: |-
@@ -1826,6 +1871,28 @@ paths:
       summary: Get the current public IP address.
       summary: Get the current public IP address.
       tags:
       tags:
       - IP Service
       - IP Service
+  /api/host/{hostid}/peer_info:
+    get:
+      parameters:
+      - description: Host ID
+        in: path
+        name: hostid
+        required: true
+        type: string
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/models.SuccessResponse'
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/models.ErrorResponse'
+      security:
+      - oauth: []
+      summary: Fetches host peerinfo
+      tags:
+      - Hosts
   /api/hosts:
   /api/hosts:
     get:
     get:
       responses:
       responses:
@@ -2006,6 +2073,10 @@ paths:
         name: hostid
         name: hostid
         required: true
         required: true
         type: string
         type: string
+      - description: Force upgrade
+        in: query
+        name: force
+        type: boolean
       responses:
       responses:
         "200":
         "200":
           description: passed message to upgrade host
           description: passed message to upgrade host
@@ -2067,6 +2138,35 @@ paths:
       summary: Update keys for all hosts
       summary: Update keys for all hosts
       tags:
       tags:
       - Hosts
       - Hosts
+  /api/hosts/sync:
+    post:
+      responses:
+        "200":
+          description: sync all hosts request received
+          schema:
+            type: string
+      security:
+      - oauth: []
+      summary: Requests all the hosts to pull
+      tags:
+      - Hosts
+  /api/hosts/upgrade:
+    post:
+      parameters:
+      - description: Force upgrade
+        in: query
+        name: force
+        type: boolean
+      responses:
+        "200":
+          description: upgrade all hosts request received
+          schema:
+            type: string
+      security:
+      - oauth: []
+      summary: Requests all the hosts to upgrade their version
+      tags:
+      - Hosts
   /api/networks:
   /api/networks:
     get:
     get:
       produces:
       produces:
@@ -2117,6 +2217,10 @@ paths:
         name: networkname
         name: networkname
         required: true
         required: true
         type: string
         type: string
+      - description: Force Delete
+        in: query
+        name: force
+        type: boolean
       produces:
       produces:
       - application/json
       - application/json
       responses:
       responses:
@@ -2280,6 +2384,30 @@ paths:
       summary: Update a network ACL (Access Control List)
       summary: Update a network ACL (Access Control List)
       tags:
       tags:
       - Networks
       - Networks
+  /api/networks/{networkname}/egress_routes:
+    get:
+      parameters:
+      - description: Network name
+        in: path
+        name: networkname
+        required: true
+        type: string
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/models.SuccessResponse'
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/models.ErrorResponse'
+      security:
+      - oauth: []
+      summary: Get a network Egress routes
+      tags:
+      - Networks
   /api/nodes:
   /api/nodes:
     get:
     get:
       responses:
       responses:
@@ -2358,61 +2486,6 @@ paths:
       summary: Create an egress gateway
       summary: Create an egress gateway
       tags:
       tags:
       - Nodes
       - Nodes
-  /api/nodes/{network}/{nodeid}/createingress:
-    post:
-      responses:
-        "200":
-          description: OK
-          schema:
-            $ref: '#/definitions/models.ApiNode'
-        "500":
-          description: Internal Server Error
-          schema:
-            $ref: '#/definitions/models.ErrorResponse'
-      security:
-      - oauth2: []
-      summary: Create an remote access gateway
-      tags:
-      - Nodes
-  /api/nodes/{network}/{nodeid}/createrelay:
-    post:
-      consumes:
-      - application/json
-      parameters:
-      - description: Network ID
-        in: path
-        name: network
-        required: true
-        type: string
-      - description: Node ID
-        in: path
-        name: nodeid
-        required: true
-        type: string
-      - description: Relay request parameters
-        in: body
-        name: body
-        required: true
-        schema:
-          $ref: '#/definitions/models.RelayRequest'
-      produces:
-      - application/json
-      responses:
-        "200":
-          description: OK
-          schema:
-            $ref: '#/definitions/models.ApiNode'
-        "400":
-          description: Bad Request
-          schema:
-            $ref: '#/definitions/models.ErrorResponse'
-        "500":
-          description: Internal Server Error
-          schema:
-            $ref: '#/definitions/models.ErrorResponse'
-      summary: Create a relay
-      tags:
-      - PRO
   /api/nodes/{network}/{nodeid}/deletegateway:
   /api/nodes/{network}/{nodeid}/deletegateway:
     delete:
     delete:
       responses:
       responses:
@@ -2429,7 +2502,7 @@ paths:
       summary: Delete an egress gateway
       summary: Delete an egress gateway
       tags:
       tags:
       - Nodes
       - Nodes
-  /api/nodes/{network}/{nodeid}/deleteingress:
+  /api/nodes/{network}/{nodeid}/gateway:
     delete:
     delete:
       responses:
       responses:
         "200":
         "200":
@@ -2442,42 +2515,24 @@ paths:
             $ref: '#/definitions/models.ErrorResponse'
             $ref: '#/definitions/models.ErrorResponse'
       security:
       security:
       - oauth2: []
       - oauth2: []
-      summary: Delete an remote access gateway
+      summary: Delete a gateway
       tags:
       tags:
       - Nodes
       - Nodes
-  /api/nodes/{network}/{nodeid}/deleterelay:
-    delete:
-      consumes:
-      - application/json
-      parameters:
-      - description: Network ID
-        in: path
-        name: network
-        required: true
-        type: string
-      - description: Node ID
-        in: path
-        name: nodeid
-        required: true
-        type: string
-      produces:
-      - application/json
+    post:
       responses:
       responses:
         "200":
         "200":
           description: OK
           description: OK
           schema:
           schema:
             $ref: '#/definitions/models.ApiNode'
             $ref: '#/definitions/models.ApiNode'
-        "400":
-          description: Bad Request
-          schema:
-            $ref: '#/definitions/models.ErrorResponse'
         "500":
         "500":
           description: Internal Server Error
           description: Internal Server Error
           schema:
           schema:
             $ref: '#/definitions/models.ErrorResponse'
             $ref: '#/definitions/models.ErrorResponse'
-      summary: Remove a relay
+      security:
+      - oauth2: []
+      summary: Create a gateway
       tags:
       tags:
-      - PRO
+      - Nodes
   /api/nodes/{network}/{nodeid}/inet_gw:
   /api/nodes/{network}/{nodeid}/inet_gw:
     delete:
     delete:
       parameters:
       parameters:
@@ -3425,6 +3480,38 @@ paths:
       summary: Create failover node
       summary: Create failover node
       tags:
       tags:
       - PRO
       - PRO
+  /api/v1/node/{nodeid}/failover_check:
+    get:
+      consumes:
+      - application/json
+      parameters:
+      - description: Node ID
+        in: path
+        name: nodeid
+        required: true
+        type: string
+      - description: Failover request
+        in: body
+        name: body
+        required: true
+        schema:
+          $ref: '#/definitions/models.FailOverMeReq'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/models.SuccessResponse'
+        "400":
+          description: Bad Request
+          schema:
+            $ref: '#/definitions/models.ErrorResponse'
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/models.ErrorResponse'
+      summary: checkfailOverCtx
+      tags:
+      - PRO
   /api/v1/node/{nodeid}/failover_me:
   /api/v1/node/{nodeid}/failover_me:
     post:
     post:
       consumes:
       consumes:
@@ -3457,6 +3544,22 @@ paths:
       summary: Failover me
       summary: Failover me
       tags:
       tags:
       - PRO
       - PRO
+  /api/v1/nodes/{network}/status:
+    get:
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/models.ApiNode'
+            type: array
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/models.ErrorResponse'
+      summary: Get all nodes status on the network
+      tags:
+      - Nodes
   /api/v1/tags:
   /api/v1/tags:
     delete:
     delete:
       consumes:
       consumes: