From 1d9e0f71df1538bdd472ace18f83fc987661ee97 Mon Sep 17 00:00:00 2001 From: Yabin Ma Date: Thu, 12 Dec 2024 06:52:52 +0100 Subject: [PATCH] add format int64 for swagger doc (#3247) * add format int64 for swagger doc * add format int64 for swagger doc * add global override * swagger doc update * add new line for .swaggo file --- .swaggo | 2 + config/config.go | 2 +- models/api_node.go | 8 +- models/enrollment_key.go | 2 +- models/extclient.go | 2 +- models/host.go | 2 +- models/metrics.go | 16 ++-- models/network.go | 4 +- models/node.go | 8 +- models/structs.go | 2 +- pro/types.go | 2 +- swagger.yaml | 155 ++++++++++++++++++++++++++++----------- 12 files changed, 138 insertions(+), 67 deletions(-) create mode 100644 .swaggo diff --git a/.swaggo b/.swaggo new file mode 100644 index 000000000..3f4cefc27 --- /dev/null +++ b/.swaggo @@ -0,0 +1,2 @@ +// Replace all time.Duration with int64 +replace time.Duration int64 diff --git a/config/config.go b/config/config.go index 90fcb0949..36ce1cbf1 100644 --- a/config/config.go +++ b/config/config.go @@ -89,7 +89,7 @@ type ServerConfig struct { EgressesLimit int `yaml:"egresses_limit"` DeployedByOperator bool `yaml:"deployed_by_operator"` Environment string `yaml:"environment"` - JwtValidityDuration time.Duration `yaml:"jwt_validity_duration"` + JwtValidityDuration time.Duration `yaml:"jwt_validity_duration" swaggertype:"primitive,integer" format:"int64"` RacAutoDisable bool `yaml:"rac_auto_disable"` CacheEnabled string `yaml:"caching_enabled"` EndpointDetection bool `json:"endpoint_detection"` diff --git a/models/api_node.go b/models/api_node.go index c5ef2f834..995c4f581 100644 --- a/models/api_node.go +++ b/models/api_node.go @@ -16,10 +16,10 @@ type ApiNode struct { Address6 string `json:"address6" validate:"omitempty,cidrv6"` LocalAddress string `json:"localaddress" validate:"omitempty,cidr"` AllowedIPs []string `json:"allowedips"` - LastModified int64 `json:"lastmodified"` - ExpirationDateTime int64 `json:"expdatetime"` - LastCheckIn int64 `json:"lastcheckin"` - LastPeerUpdate int64 `json:"lastpeerupdate"` + LastModified int64 `json:"lastmodified" swaggertype:"primitive,integer" format:"int64"` + ExpirationDateTime int64 `json:"expdatetime" swaggertype:"primitive,integer" format:"int64"` + LastCheckIn int64 `json:"lastcheckin" swaggertype:"primitive,integer" format:"int64"` + LastPeerUpdate int64 `json:"lastpeerupdate" swaggertype:"primitive,integer" format:"int64"` Network string `json:"network"` NetworkRange string `json:"networkrange"` NetworkRange6 string `json:"networkrange6"` diff --git a/models/enrollment_key.go b/models/enrollment_key.go index f133d7558..7ed6e56a8 100644 --- a/models/enrollment_key.go +++ b/models/enrollment_key.go @@ -58,7 +58,7 @@ type EnrollmentKey struct { // APIEnrollmentKey - used to create enrollment keys via API type APIEnrollmentKey struct { - Expiration int64 `json:"expiration"` + Expiration int64 `json:"expiration" swaggertype:"primitive,integer" format:"int64"` UsesRemaining int `json:"uses_remaining"` Networks []string `json:"networks"` Unlimited bool `json:"unlimited"` diff --git a/models/extclient.go b/models/extclient.go index cbccc5dd3..e9d3708b8 100644 --- a/models/extclient.go +++ b/models/extclient.go @@ -13,7 +13,7 @@ type ExtClient struct { AllowedIPs []string `json:"allowed_ips"` IngressGatewayID string `json:"ingressgatewayid" bson:"ingressgatewayid"` IngressGatewayEndpoint string `json:"ingressgatewayendpoint" bson:"ingressgatewayendpoint"` - LastModified int64 `json:"lastmodified" bson:"lastmodified"` + LastModified int64 `json:"lastmodified" bson:"lastmodified" swaggertype:"primitive,integer" format:"int64"` Enabled bool `json:"enabled" bson:"enabled"` OwnerID string `json:"ownerid" bson:"ownerid"` DeniedACLs map[string]struct{} `json:"deniednodeacls" bson:"acls,omitempty"` diff --git a/models/host.go b/models/host.go index 2781dee0e..c6d5eaa3c 100644 --- a/models/host.go +++ b/models/host.go @@ -71,7 +71,7 @@ type Host struct { IsDefault bool `json:"isdefault" yaml:"isdefault"` NatType string `json:"nat_type,omitempty" yaml:"nat_type,omitempty"` TurnEndpoint *netip.AddrPort `json:"turn_endpoint,omitempty" yaml:"turn_endpoint,omitempty"` - PersistentKeepalive time.Duration `json:"persistentkeepalive" yaml:"persistentkeepalive"` + PersistentKeepalive time.Duration `json:"persistentkeepalive" swaggertype:"primitive,integer" format:"int64" yaml:"persistentkeepalive"` } // FormatBool converts a boolean to a [yes|no] string diff --git a/models/metrics.go b/models/metrics.go index 459c7f17c..2e70a1780 100644 --- a/models/metrics.go +++ b/models/metrics.go @@ -15,14 +15,14 @@ type Metrics struct { // Metric - holds a metric for data between nodes type Metric struct { NodeName string `json:"node_name" bson:"node_name" yaml:"node_name"` - Uptime int64 `json:"uptime" bson:"uptime" yaml:"uptime"` - TotalTime int64 `json:"totaltime" bson:"totaltime" yaml:"totaltime"` - Latency int64 `json:"latency" bson:"latency" yaml:"latency"` - TotalReceived int64 `json:"totalreceived" bson:"totalreceived" yaml:"totalreceived"` - LastTotalReceived int64 `json:"lasttotalreceived" bson:"lasttotalreceived" yaml:"lasttotalreceived"` - TotalSent int64 `json:"totalsent" bson:"totalsent" yaml:"totalsent"` - LastTotalSent int64 `json:"lasttotalsent" bson:"lasttotalsent" yaml:"lasttotalsent"` - ActualUptime time.Duration `json:"actualuptime" bson:"actualuptime" yaml:"actualuptime"` + Uptime int64 `json:"uptime" bson:"uptime" yaml:"uptime" swaggertype:"primitive,integer" format:"int64"` + TotalTime int64 `json:"totaltime" bson:"totaltime" yaml:"totaltime" swaggertype:"primitive,integer" format:"int64"` + Latency int64 `json:"latency" bson:"latency" yaml:"latency" swaggertype:"primitive,integer" format:"int64"` + TotalReceived int64 `json:"totalreceived" bson:"totalreceived" yaml:"totalreceived" swaggertype:"primitive,integer" format:"int64"` + LastTotalReceived int64 `json:"lasttotalreceived" bson:"lasttotalreceived" yaml:"lasttotalreceived" swaggertype:"primitive,integer" format:"int64"` + TotalSent int64 `json:"totalsent" bson:"totalsent" yaml:"totalsent" swaggertype:"primitive,integer" format:"int64"` + LastTotalSent int64 `json:"lasttotalsent" bson:"lasttotalsent" yaml:"lasttotalsent" swaggertype:"primitive,integer" format:"int64"` + ActualUptime time.Duration `json:"actualuptime" swaggertype:"primitive,integer" format:"int64" bson:"actualuptime" yaml:"actualuptime"` PercentUp float64 `json:"percentup" bson:"percentup" yaml:"percentup"` Connected bool `json:"connected" bson:"connected" yaml:"connected"` } diff --git a/models/network.go b/models/network.go index 32d95f865..dbb2fc4a4 100644 --- a/models/network.go +++ b/models/network.go @@ -11,8 +11,8 @@ type Network struct { AddressRange string `json:"addressrange" bson:"addressrange" validate:"omitempty,cidrv4"` AddressRange6 string `json:"addressrange6" bson:"addressrange6" validate:"omitempty,cidrv6"` NetID string `json:"netid" bson:"netid" validate:"required,min=1,max=32,netid_valid"` - NodesLastModified int64 `json:"nodeslastmodified" bson:"nodeslastmodified"` - NetworkLastModified int64 `json:"networklastmodified" bson:"networklastmodified"` + NodesLastModified int64 `json:"nodeslastmodified" bson:"nodeslastmodified" swaggertype:"primitive,integer" format:"int64"` + NetworkLastModified int64 `json:"networklastmodified" bson:"networklastmodified" swaggertype:"primitive,integer" format:"int64"` DefaultInterface string `json:"defaultinterface" bson:"defaultinterface" validate:"min=1,max=35"` DefaultListenPort int32 `json:"defaultlistenport,omitempty" bson:"defaultlistenport,omitempty" validate:"omitempty,min=1024,max=65535"` NodeLimit int32 `json:"nodelimit" bson:"nodelimit"` diff --git a/models/node.go b/models/node.go index 8ed63c0bd..c9e55e5d5 100644 --- a/models/node.go +++ b/models/node.go @@ -137,10 +137,10 @@ type LegacyNode struct { IsHub string `json:"ishub" bson:"ishub" yaml:"ishub" validate:"checkyesorno"` AccessKey string `json:"accesskey" bson:"accesskey" yaml:"accesskey"` Interface string `json:"interface" bson:"interface" yaml:"interface"` - LastModified int64 `json:"lastmodified" bson:"lastmodified" yaml:"lastmodified"` - ExpirationDateTime int64 `json:"expdatetime" bson:"expdatetime" yaml:"expdatetime"` - LastPeerUpdate int64 `json:"lastpeerupdate" bson:"lastpeerupdate" yaml:"lastpeerupdate"` - LastCheckIn int64 `json:"lastcheckin" bson:"lastcheckin" yaml:"lastcheckin"` + LastModified int64 `json:"lastmodified" bson:"lastmodified" yaml:"lastmodified" swaggertype:"primitive,integer" format:"int64"` + ExpirationDateTime int64 `json:"expdatetime" bson:"expdatetime" yaml:"expdatetime" swaggertype:"primitive,integer" format:"int64"` + LastPeerUpdate int64 `json:"lastpeerupdate" bson:"lastpeerupdate" yaml:"lastpeerupdate" swaggertype:"primitive,integer" format:"int64"` + LastCheckIn int64 `json:"lastcheckin" bson:"lastcheckin" yaml:"lastcheckin" swaggertype:"primitive,integer" format:"int64"` MacAddress string `json:"macaddress" bson:"macaddress" yaml:"macaddress"` Password string `json:"password" bson:"password" yaml:"password" validate:"required,min=6"` Network string `json:"network" bson:"network" yaml:"network" validate:"network_exists"` diff --git a/models/structs.go b/models/structs.go index 469046f1f..e929e7fc7 100644 --- a/models/structs.go +++ b/models/structs.go @@ -196,7 +196,7 @@ type ServerUpdateData struct { // also contains assymetrical encryption pub/priv keys for any server traffic type Telemetry struct { UUID string `json:"uuid" bson:"uuid"` - LastSend int64 `json:"lastsend" bson:"lastsend"` + LastSend int64 `json:"lastsend" bson:"lastsend" swaggertype:"primitive,integer" format:"int64"` TrafficKeyPriv []byte `json:"traffickeypriv" bson:"traffickeypriv"` TrafficKeyPub []byte `json:"traffickeypub" bson:"traffickeypub"` } diff --git a/pro/types.go b/pro/types.go index 213d77bf8..4c1c85bbe 100644 --- a/pro/types.go +++ b/pro/types.go @@ -18,7 +18,7 @@ var errValidation = errors.New(license_validation_err_msg) // LicenseKey - the license key struct representation with associated data type LicenseKey struct { LicenseValue string `json:"license_value"` // actual (public) key and the unique value for the key - Expiration int64 `json:"expiration"` + Expiration int64 `json:"expiration" swaggertype:"primitive,integer" format:"int64"` UsageServers int `json:"limit_servers"` UsageUsers int `json:"limit_users"` UsageClients int `json:"limit_clients"` diff --git a/swagger.yaml b/swagger.yaml index 64e063e74..a9eb97e14 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -1,6 +1,7 @@ definitions: acls.ACL: additionalProperties: + format: int32 type: integer type: object acls.ACLContainer: @@ -74,7 +75,8 @@ definitions: ingressesLimit: type: integer jwtValidityDuration: - $ref: '#/definitions/time.Duration' + format: int64 + type: integer licenseValue: type: string machinesLimit: @@ -109,6 +111,8 @@ definitions: type: string publicIPService: type: string + publicIp: + type: string racAutoDisable: type: boolean restBackend: @@ -155,6 +159,7 @@ definitions: models.APIEnrollmentKey: properties: expiration: + format: int64 type: integer groups: items: @@ -179,6 +184,41 @@ definitions: required: - tags type: object + models.AclRule: + properties: + allowed: + type: boolean + allowed_ports: + items: + type: string + type: array + allowed_protocols: + allOf: + - $ref: '#/definitions/models.Protocol' + description: tcp, udp, etc. + direction: + allOf: + - $ref: '#/definitions/models.AllowedTrafficDirection' + description: single or two-way + id: + type: string + ip_list: + items: + $ref: '#/definitions/net.IPNet' + type: array + ip6_list: + items: + $ref: '#/definitions/net.IPNet' + type: array + type: object + models.AllowedTrafficDirection: + enum: + - 0 + - 1 + type: integer + x-enum-varnames: + - TrafficDirectionUni + - TrafficDirectionBi models.ApiHost: properties: autoupdate: @@ -267,6 +307,7 @@ definitions: type: string type: array expdatetime: + format: int64 type: integer fail_over_peers: additionalProperties: @@ -307,10 +348,13 @@ definitions: isrelayed: type: boolean lastcheckin: + format: int64 type: integer lastmodified: + format: int64 type: integer lastpeerupdate: + format: int64 type: integer localaddress: type: string @@ -334,6 +378,8 @@ definitions: type: string static_node: $ref: '#/definitions/models.ExtClient' + status: + $ref: '#/definitions/models.NodeStatus' tags: additionalProperties: type: object @@ -481,6 +527,7 @@ definitions: ingressgatewayid: type: string lastmodified: + format: int64 type: integer network: type: string @@ -515,13 +562,27 @@ definitions: properties: allow: type: boolean - dstIP: + allowed_ports: + items: + type: string + type: array + allowed_protocols: + allOf: + - $ref: '#/definitions/models.Protocol' + description: tcp, udp, etc. + dst_ip: $ref: '#/definitions/net.IPNet' - srcIP: + src_ip: $ref: '#/definitions/net.IPNet' type: object models.FwUpdate: properties: + acl_rules: + additionalProperties: + $ref: '#/definitions/models.AclRule' + type: object + allow_all: + type: boolean egress_info: additionalProperties: $ref: '#/definitions/models.EgressInfo' @@ -534,6 +595,10 @@ definitions: type: boolean is_ingress_gw: type: boolean + networks: + items: + $ref: '#/definitions/net.IPNet' + type: array type: object models.Host: properties: @@ -596,7 +661,8 @@ definitions: os: type: string persistentkeepalive: - $ref: '#/definitions/time.Duration' + format: int64 + type: integer publickey: items: type: integer @@ -797,26 +863,34 @@ definitions: models.Metric: properties: actualuptime: - $ref: '#/definitions/time.Duration' + format: int64 + type: integer connected: type: boolean lasttotalreceived: + format: int64 type: integer lasttotalsent: + format: int64 type: integer latency: + format: int64 type: integer node_name: type: string percentup: type: number totalreceived: + format: int64 type: integer totalsent: + format: int64 type: integer totaltime: + format: int64 type: integer uptime: + format: int64 type: integer type: object models.Metrics: @@ -868,10 +942,12 @@ definitions: minLength: 1 type: string networklastmodified: + format: int64 type: integer nodelimit: type: integer nodeslastmodified: + format: int64 type: integer required: - netid @@ -967,6 +1043,8 @@ definitions: type: integer networkrange6: type: number + node_status: + $ref: '#/definitions/models.NodeStatus' ownerid: type: string pendingdelete: @@ -1005,10 +1083,36 @@ definitions: serverconfig: $ref: '#/definitions/models.ServerConfig' type: object + models.NodeStatus: + enum: + - online + - offline + - warning + - error + - unknown + type: string + x-enum-varnames: + - OnlineSt + - OfflineSt + - WarningSt + - ErrorSt + - UnKnown models.PeerMap: additionalProperties: $ref: '#/definitions/models.IDandAddr' type: object + models.Protocol: + enum: + - all + - udp + - tcp + - icmp + type: string + x-enum-varnames: + - ALL + - UDP + - TCP + - ICMP models.RegisterResponse: properties: requested_host: @@ -1286,6 +1390,7 @@ definitions: mask: description: network mask items: + format: int32 type: integer type: array type: object @@ -1303,42 +1408,6 @@ definitions: type: object netip.AddrPort: type: object - time.Duration: - enum: - - -9223372036854775808 - - 9223372036854775807 - - 1 - - 1000 - - 1000000 - - 1000000000 - - 60000000000 - - 3600000000000 - - -9223372036854775808 - - 9223372036854775807 - - 1 - - 1000 - - 1000000 - - 1000000000 - - 60000000000 - - 3600000000000 - type: integer - x-enum-varnames: - - minDuration - - maxDuration - - Nanosecond - - Microsecond - - Millisecond - - Second - - Minute - - Hour - - minDuration - - maxDuration - - Nanosecond - - Microsecond - - Millisecond - - Second - - Minute - - Hour wgtypes.PeerConfig: properties: allowedIPs: @@ -1353,13 +1422,13 @@ definitions: - $ref: '#/definitions/net.UDPAddr' description: Endpoint specifies the endpoint of this peer entry, if not nil. persistentKeepaliveInterval: - allOf: - - $ref: '#/definitions/time.Duration' description: |- PersistentKeepaliveInterval specifies the persistent keepalive interval for this peer, if not nil. A non-nil value of 0 will clear the persistent keepalive interval. + format: int64 + type: integer presharedKey: description: |- PresharedKey specifies a peer's preshared key configuration, if not nil.