//  Copyright 2019 CUE Authors
// 
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//  
//      http://www.apache.org/licenses/LICENSE-2.0
//  
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.

//  Copyright 2017 Istio Authors
// 
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
// 
//        http://www.apache.org/licenses/LICENSE-2.0
// 
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.

//  $title: Gateway
//  $description: Configuration affecting edge load balancer.
//  $location: https://istio.io/docs/reference/config/networking/v1alpha3/gateway.html

//  `Gateway` describes a load balancer operating at the edge of the mesh
//  receiving incoming or outgoing HTTP/TCP connections. The specification
//  describes a set of ports that should be exposed, the type of protocol to
//  use, SNI configuration for the load balancer, etc.
// 
//  For example, the following Gateway configuration sets up a proxy to act
//  as a load balancer exposing port 80 and 9080 (http), 443 (https),
//  9443(https) and port 2379 (TCP) for ingress.  The gateway will be
//  applied to the proxy running on a pod with labels `app:
//  my-gateway-controller`. While Istio will configure the proxy to listen
//  on these ports, it is the responsibility of the user to ensure that
//  external traffic to these ports are allowed into the mesh.
// 
//  ```yaml
//  apiVersion: networking.istio.io/v1alpha3
//  kind: Gateway
//  metadata:
//    name: my-gateway
//    namespace: some-config-namespace
//  spec:
//    selector:
//      app: my-gateway-controller
//    servers:
//    - port:
//        number: 80
//        name: http
//        protocol: HTTP
//      hosts:
//      - uk.bookinfo.com
//      - eu.bookinfo.com
//      tls:
//        httpsRedirect: true # sends 301 redirect for http requests
//    - port:
//        number: 443
//        name: https-443
//        protocol: HTTPS
//      hosts:
//      - uk.bookinfo.com
//      - eu.bookinfo.com
//      tls:
//        mode: SIMPLE # enables HTTPS on this port
//        serverCertificate: /etc/certs/servercert.pem
//        privateKey: /etc/certs/privatekey.pem
//    - port:
//        number: 9443
//        name: https-9443
//        protocol: HTTPS
//      hosts:
//      - "bookinfo-namespace/*.bookinfo.com"
//      tls:
//        mode: SIMPLE # enables HTTPS on this port
//        credentialName: bookinfo-secret # fetches certs from Kubernetes secret
//    - port:
//        number: 9080
//        name: http-wildcard
//        protocol: HTTP
//      hosts:
//      - "*"
//    - port:
//        number: 2379 # to expose internal service via external port 2379
//        name: mongo
//        protocol: MONGO
//      hosts:
//      - "*"
//  ```
// 
//  The Gateway specification above describes the L4-L6 properties of a load
//  balancer. A `VirtualService` can then be bound to a gateway to control
//  the forwarding of traffic arriving at a particular host or gateway port.
// 
//  For example, the following VirtualService splits traffic for
//  `https://uk.bookinfo.com/reviews`, `https://eu.bookinfo.com/reviews`,
//  `http://uk.bookinfo.com:9080/reviews`,
//  `http://eu.bookinfo.com:9080/reviews` into two versions (prod and qa) of
//  an internal reviews service on port 9080. In addition, requests
//  containing the cookie "user: dev-123" will be sent to special port 7777
//  in the qa version. The same rule is also applicable inside the mesh for
//  requests to the "reviews.prod.svc.cluster.local" service. This rule is
//  applicable across ports 443, 9080. Note that `http://uk.bookinfo.com`
//  gets redirected to `https://uk.bookinfo.com` (i.e. 80 redirects to 443).
// 
//  ```yaml
//  apiVersion: networking.istio.io/v1alpha3
//  kind: VirtualService
//  metadata:
//    name: bookinfo-rule
//    namespace: bookinfo-namespace
//  spec:
//    hosts:
//    - reviews.prod.svc.cluster.local
//    - uk.bookinfo.com
//    - eu.bookinfo.com
//    gateways:
//    - some-config-namespace/my-gateway
//    - mesh # applies to all the sidecars in the mesh
//    http:
//    - match:
//      - headers:
//          cookie:
//            exact: "user=dev-123"
//      route:
//      - destination:
//          port:
//            number: 7777
//          host: reviews.qa.svc.cluster.local
//    - match:
//      - uri:
//          prefix: /reviews/
//      route:
//      - destination:
//          port:
//            number: 9080 # can be omitted if it's the only port for reviews
//          host: reviews.prod.svc.cluster.local
//        weight: 80
//      - destination:
//          host: reviews.qa.svc.cluster.local
//        weight: 20
//  ```
// 
//  The following VirtualService forwards traffic arriving at (external)
//  port 27017 to internal Mongo server on port 5555. This rule is not
//  applicable internally in the mesh as the gateway list omits the
//  reserved name `mesh`.
// 
//  ```yaml
//  apiVersion: networking.istio.io/v1alpha3
//  kind: VirtualService
//  metadata:
//    name: bookinfo-Mongo
//    namespace: bookinfo-namespace
//  spec:
//    hosts:
//    - mongosvr.prod.svc.cluster.local # name of internal Mongo service
//    gateways:
//    - some-config-namespace/my-gateway # can omit the namespace if gateway is in same
//                                         namespace as virtual service.
//    tcp:
//    - match:
//      - port: 27017
//      route:
//      - destination:
//          host: mongo.prod.svc.cluster.local
//          port:
//            number: 5555
//  ```
// 
//  It is possible to restrict the set of virtual services that can bind to
//  a gateway server using the namespace/hostname syntax in the hosts field.
//  For example, the following Gateway allows any virtual service in the ns1
//  namespace to bind to it, while restricting only the virtual service with
//  foo.bar.com host in the ns2 namespace to bind to it.
// 
//  ```yaml
//  apiVersion: networking.istio.io/v1alpha3
//  kind: Gateway
//  metadata:
//    name: my-gateway
//    namespace: some-config-namespace
//  spec:
//    selector:
//      app: my-gateway-controller
//    servers:
//    - port:
//        number: 80
//        name: http
//        protocol: HTTP
//      hosts:
//      - "ns1/*"
//      - "ns2/foo.bar.com"
//  ```
// 
package v1alpha3

Gateway: {
	//  REQUIRED: A list of server specifications.
	servers?: [...Server] @protobuf(1)

	//  REQUIRED: One or more labels that indicate a specific set of pods/VMs
	//  on which this gateway configuration should be applied. The scope of
	//  label search is restricted to the configuration namespace in which the
	//  the resource is present. In other words, the Gateway resource must
	//  reside in the same namespace as the gateway workload instance.
	selector <_>: string
	selector?: {<name>: name}
}

//  `Server` describes the properties of the proxy on a given load balancer
//  port. For example,
// 
//  ```yaml
//  apiVersion: networking.istio.io/v1alpha3
//  kind: Gateway
//  metadata:
//    name: my-ingress
//  spec:
//    selector:
//      app: my-ingress-gateway
//    servers:
//    - port:
//        number: 80
//        name: http2
//        protocol: HTTP2
//      hosts:
//      - "*"
//  ```
// 
//  Another example
// 
//  ```yaml
//  apiVersion: networking.istio.io/v1alpha3
//  kind: Gateway
//  metadata:
//    name: my-tcp-ingress
//  spec:
//    selector:
//      app: my-tcp-ingress-gateway
//    servers:
//    - port:
//        number: 27018
//        name: mongo
//        protocol: MONGO
//      hosts:
//      - "*"
//  ```
// 
//  The following is an example of TLS configuration for port 443
// 
//  ```yaml
//  apiVersion: networking.istio.io/v1alpha3
//  kind: Gateway
//  metadata:
//    name: my-tls-ingress
//  spec:
//    selector:
//      app: my-tls-ingress-gateway
//    servers:
//    - port:
//        number: 443
//        name: https
//        protocol: HTTPS
//      hosts:
//      - "*"
//      tls:
//        mode: SIMPLE
//        serverCertificate: /etc/certs/server.pem
//        privateKey: /etc/certs/privatekey.pem
//  ```
Server: {
	//  REQUIRED: The Port on which the proxy should listen for incoming
	//  connections.
	port?: Port @protobuf(1)
	port?: >10 & <100

	//  $hide_from_docs
	//  The ip or the Unix domain socket to which the listener should be bound
	//  to. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar`
	//  (Linux abstract namespace). When using Unix domain sockets, the port
	//  number should be 0.
	bind?: string @protobuf(4)

	//  REQUIRED. One or more hosts exposed by this gateway.
	//  While typically applicable to
	//  HTTP services, it can also be used for TCP services using TLS with SNI.
	//  A host is specified as a `dnsName` with an optional `namespace/` prefix.
	//  The `dnsName` should be specified using FQDN format, optionally including
	//  a wildcard character in the left-most component (e.g., `prod/*.example.com`).
	//  Set the `dnsName` to `*` to select all `VirtualService` hosts from the
	//  specified namespace (e.g.,`prod/*`). If no `namespace/` is specified,
	//  the `VirtualService` hosts will be selected from any available namespace.
	//  Any associated `DestinationRule` in the same namespace will also be used.
	// 
	//  A `VirtualService` must be bound to the gateway and must have one or
	//  more hosts that match the hosts specified in a server. The match
	//  could be an exact match or a suffix match with the server's hosts. For
	//  example, if the server's hosts specifies `*.example.com`, a
	//  `VirtualService` with hosts `dev.example.com` or `prod.example.com` will
	//  match. However, a `VirtualService` with host `example.com` or
	//  `newexample.com` will not match.
	// 
	//  NOTE: Only virtual services exported to the gateway's namespace
	//  (e.g., `exportTo` value of `*`) can be referenced.
	//  Private configurations (e.g., `exportTo` set to `.`) will not be
	//  available. Refer to the `exportTo` setting in `VirtualService`,
	//  `DestinationRule`, and `ServiceEntry` configurations for details.
	hosts?: [...string] @protobuf(2)

	//  Set of TLS related options that govern the server's behavior. Use
	//  these options to control if all http requests should be redirected to
	//  https, and the TLS modes to use.
	tls?: Server_TLSOptions @protobuf(3,type=TLSOptions)

	//  The loopback IP endpoint or Unix domain socket to which traffic should
	//  be forwarded to by default. Format should be `127.0.0.1:PORT` or
	//  `unix:///path/to/socket` or `unix://@foobar` (Linux abstract namespace).
	defaultEndpoint?: string @protobuf(5,name=default_endpoint)
}

Server_TLSOptions: {
	//  If set to true, the load balancer will send a 301 redirect for all
	//  http connections, asking the clients to use HTTPS.
	httpsRedirect?: bool @protobuf(1,name=https_redirect)

	//  Optional: Indicates whether connections to this port should be
	//  secured using TLS. The value of this field determines how TLS is
	//  enforced.
	mode?: Server_TLSOptions_TLSmode @protobuf(2,type=TLSmode)

	//  Extra comment.

	//  REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
	//  holding the server-side TLS certificate to use.
	serverCertificate?: string @protobuf(3,name=server_certificate)

	//  REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file
	//  holding the server's private key.
	privateKey?: string @protobuf(4,name=private_key)

	//  REQUIRED if mode is `MUTUAL`. The path to a file containing
	//  certificate authority certificates to use in verifying a presented
	//  client side certificate.
	caCertificates?: string @protobuf(5,name=ca_certificates)

	//  The credentialName stands for a unique identifier that can be used
	//  to identify the serverCertificate and the privateKey. The
	//  credentialName appended with suffix "-cacert" is used to identify
	//  the CaCertificates associated with this server. Gateway workloads
	//  capable of fetching credentials from a remote credential store such
	//  as Kubernetes secrets, will be configured to retrieve the
	//  serverCertificate and the privateKey using credentialName, instead
	//  of using the file system paths specified above. If using mutual TLS,
	//  gateway workload instances will retrieve the CaCertificates using
	//  credentialName-cacert. The semantics of the name are platform
	//  dependent.  In Kubernetes, the default Istio supplied credential
	//  server expects the credentialName to match the name of the
	//  Kubernetes secret that holds the server certificate, the private
	//  key, and the CA certificate (if using mutual TLS). Set the
	//  `ISTIO_META_USER_SDS` metadata variable in the gateway's proxy to
	//  enable the dynamic credential fetching feature.
	credentialName?: string @protobuf(10,name=credential_name)

	//  A list of alternate names to verify the subject identity in the
	//  certificate presented by the client.
	subjectAltNames?: [...string] @protobuf(6,name=subject_alt_names)

	//  Optional: Minimum TLS protocol version.
	minProtocolVersion?: Server_TLSOptions_TLSProtocol @protobuf(7,type=TLSProtocol,name=min_protocol_version)

	//  Optional: Maximum TLS protocol version.
	maxProtocolVersion?: Server_TLSOptions_TLSProtocol @protobuf(8,type=TLSProtocol,name=max_protocol_version)

	//  Optional: If specified, only support the specified cipher list.
	//  Otherwise default to the default cipher list supported by Envoy.
	cipherSuites?: [...string] @protobuf(9,name=cipher_suites)
}

//  TLS modes enforced by the proxy
Server_TLSOptions_TLSmode:
	//  The SNI string presented by the client will be used as the match
	//  criterion in a VirtualService TLS route to determine the
	//  destination service from the service registry.
	*"PASSTHROUGH" |

	//  Secure connections with standard TLS semantics.
	"SIMPLE" |

	//  Secure connections to the upstream using mutual TLS by presenting
	//  client certificates for authentication.
	"MUTUAL" |

	//  Similar to the passthrough mode, except servers with this TLS mode
	//  do not require an associated VirtualService to map from the SNI
	//  value to service in the registry. The destination details such as
	//  the service/subset/port are encoded in the SNI value. The proxy
	//  will forward to the upstream (Envoy) cluster (a group of
	//  endpoints) specified by the SNI value. This server is typically
	//  used to provide connectivity between services in disparate L3
	//  networks that otherwise do not have direct connectivity between
	//  their respective endpoints. Use of this mode assumes that both the
	//  source and the destination are using Istio mTLS to secure traffic.
	"AUTO_PASSTHROUGH"

Server_TLSOptions_TLSmode_value: {
	"PASSTHROUGH":      0
	"SIMPLE":           1
	"MUTUAL":           2
	"AUTO_PASSTHROUGH": 3
}

//  TLS protocol versions.
Server_TLSOptions_TLSProtocol:
	*"TLS_AUTO" | //  Automatically choose the optimal TLS version.
	"TLSV1_0" | //  TLS version 1.0
	"TLSV1_1" | //  TLS version 1.1
	"TLSV1_2" | //  TLS version 1.2
	"TLSV1_3" //  TLS version 1.3

Server_TLSOptions_TLSProtocol_value: {
	"TLS_AUTO": 0
	"TLSV1_0":  1
	"TLSV1_1":  2
	"TLSV1_2":  3
	"TLSV1_3":  4
}

//  Port describes the properties of a specific port of a service.
Port: {
	//  REQUIRED: A valid non-negative integer port number.
	number?: uint32 @protobuf(1)

	//  REQUIRED: The protocol exposed on the port.
	//  MUST BE one of HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS.
	//  TLS implies the connection will be routed based on the SNI header to
	//  the destination without terminating the TLS connection.
	protocol?: string @protobuf(2)

	//  Label assigned to the port.
	name?: string @protobuf(3)
}
