
//  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.
package client

import "istio.io/api/mixer/v1"

//  HTTPAPISpec defines the canonical configuration for generating
//  API-related attributes from HTTP requests based on the method and
//  uri templated path matches. It is sufficient for defining the API
//  surface of a service for the purposes of API attribute
//  generation. It is not intended to represent auth, quota,
//  documentation, or other information commonly found in other API
//  specifications, e.g. OpenAPI.
// 
//  Existing standards that define operations (or methods) in terms of
//  HTTP methods and paths can be normalized to this format for use in
//  Istio. For example, a simple petstore API described by OpenAPIv2
//  [here](https://github.com/googleapis/gnostic/blob/master/examples/v2.0/yaml/petstore-simple.yaml)
//  can be represented with the following HTTPAPISpec.
// 
//  ```yaml
//  apiVersion: config.istio.io/v1alpha2
//  kind: HTTPAPISpec
//  metadata:
//    name: petstore
//    namespace: default
//  spec:
//    attributes:
//      attributes:
//        api.service:
//          stringValue: petstore.swagger.io
//        api.version:
//          stringValue: 1.0.0
//    patterns:
//    - attributes:
//        attributes:
//          api.operation:
//            stringValue: findPets
//      httpMethod: GET
//      uriTemplate: /api/pets
//    - attributes:
//        attributes:
//          api.operation:
//            stringValue: addPet
//      httpMethod: POST
//      uriTemplate: /api/pets
//    - attributes:
//        attributes:
//          api.operation:
//            stringValue: findPetById
//      httpMethod: GET
//      uriTemplate: /api/pets/{id}
//    - attributes:
//        attributes:
//          api.operation:
//            stringValue: deletePet
//      httpMethod: DELETE
//      uriTemplate: /api/pets/{id}
//    api_keys:
//    - query: api-key
//  ```
HTTPAPISpec: {
	//  List of attributes that are generated when *any* of the HTTP
	//  patterns match. This list typically includes the "api.service"
	//  and "api.version" attributes.
	attributes?: v1.Attributes @protobuf(1,type=Attributes)

	//  List of HTTP patterns to match.
	patterns?: [...HTTPAPISpecPattern] @protobuf(2)

	//  List of APIKey that describes how to extract an API-KEY from an
	//  HTTP request. The first API-Key match found in the list is used,
	//  i.e. 'OR' semantics.
	// 
	//  The following default policies are used to generate the
	//  `request.api_key` attribute if no explicit APIKey is defined.
	// 
	//      `query: key, `query: api_key`, and then `header: x-api-key`
	// 
	apiKeys?: [...APIKey] @protobuf(3,name=api_keys)
}

//  HTTPAPISpecPattern defines a single pattern to match against
//  incoming HTTP requests. The per-pattern list of attributes is
//  generated if both the http_method and uri_template match. In
//  addition, the top-level list of attributes in the HTTPAPISpec is also
//  generated.
// 
//  ```yaml
//  pattern:
//  - attributes
//      api.operation: doFooBar
//    httpMethod: GET
//    uriTemplate: /foo/bar
//  ```
HTTPAPISpecPattern: {
	//  List of attributes that are generated if the HTTP request matches
	//  the specified http_method and uri_template. This typically
	//  includes the "api.operation" attribute.
	attributes?: v1.Attributes @protobuf(1,type=Attributes)

	//  HTTP request method to match against as defined by
	//  [rfc7231](https://tools.ietf.org/html/rfc7231#page-21). For
	//  example: GET, HEAD, POST, PUT, DELETE.
	httpMethod?: string @protobuf(2,name=http_method)
}
HTTPAPISpecPattern: {
	//  URI template to match against as defined by
	//  [rfc6570](https://tools.ietf.org/html/rfc6570). For example, the
	//  following are valid URI templates:
	// 
	//      /pets
	//      /pets/{id}
	//      /dictionary/{term:1}/{term}
	//      /search{?q*,lang}
	// 
	uriTemplate: string @protobuf(3,name=uri_template)
} | {
	//  EXPERIMENTAL:
	// 
	//  ecmascript style regex-based match as defined by
	//  [EDCA-262](http://en.cppreference.com/w/cpp/regex/ecmascript). For
	//  example,
	// 
	//      "^/pets/(.*?)?"
	// 
	regex: string @protobuf(4)
}

//  APIKey defines the explicit configuration for generating the
//  `request.api_key` attribute from HTTP requests.
// 
//  See [API Keys](https://swagger.io/docs/specification/authentication/api-keys)
//  for a general overview of API keys as defined by OpenAPI.
APIKey: {
}
APIKey: {
	//  API Key is sent as a query parameter. `query` represents the
	//  query string parameter name.
	// 
	//  For example, `query=api_key` should be used with the
	//  following request:
	// 
	//      GET /something?api_key=abcdef12345
	// 
	query: string @protobuf(1)
} | {
	//  API key is sent in a request header. `header` represents the
	//  header name.
	// 
	//  For example, `header=X-API-KEY` should be used with the
	//  following request:
	// 
	//      GET /something HTTP/1.1
	//      X-API-Key: abcdef12345
	// 
	header: string @protobuf(2)
} | {
	//  API key is sent in a
	//  [cookie](https://swagger.io/docs/specification/authentication/cookie-authentication),
	// 
	//  For example, `cookie=X-API-KEY` should be used for the
	//  following request:
	// 
	//      GET /something HTTP/1.1
	//      Cookie: X-API-KEY=abcdef12345
	// 
	cookie: string @protobuf(3)
}

//  HTTPAPISpecReference defines a reference to an HTTPAPISpec. This is
//  typically used for establishing bindings between an HTTPAPISpec and an
//  IstioService. For example, the following defines an
//  HTTPAPISpecReference for service `foo` in namespace `bar`.
// 
//  ```yaml
//  - name: foo
//    namespace: bar
//  ```
HTTPAPISpecReference: {
	//  REQUIRED. The short name of the HTTPAPISpec. This is the resource
	//  name defined by the metadata name field.
	name?: string @protobuf(1)

	//  Optional namespace of the HTTPAPISpec. Defaults to the encompassing
	//  HTTPAPISpecBinding's metadata namespace field.
	namespace?: string @protobuf(2)
}

//  HTTPAPISpecBinding defines the binding between HTTPAPISpecs and one or more
//  IstioService. For example, the following establishes a binding
//  between the HTTPAPISpec `petstore` and service `foo` in namespace `bar`.
// 
//  ```yaml
//  apiVersion: config.istio.io/v1alpha2
//  kind: HTTPAPISpecBinding
//  metadata:
//    name: my-binding
//    namespace: default
//  spec:
//    services:
//    - name: foo
//      namespace: bar
//    api_specs:
//    - name: petstore
//      namespace: default
//  ```
HTTPAPISpecBinding: {
	//  REQUIRED. One or more services to map the listed HTTPAPISpec onto.
	services?: [...IstioService] @protobuf(1)

	//  REQUIRED. One or more HTTPAPISpec references that should be mapped to
	//  the specified service(s). The aggregate collection of match
	//  conditions defined in the HTTPAPISpecs should not overlap.
	apiSpecs?: [...HTTPAPISpecReference] @protobuf(2,name=api_specs)
}
