// Copyright 2016 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.

// This package defines the Mixer API that the sidecar proxy uses to perform
// precondition checks, manage quotas, and report telemetry.
package v1

import (
	"google.golang.org/genproto/googleapis/rpc/status"
	"time"
)

// Used to get a thumbs-up/thumbs-down before performing an action.
CheckRequest: {
	// The attributes to use for this request.
	//
	// Mixer's configuration determines how these attributes are used to
	// establish the result returned in the response.
	attributes?: CompressedAttributes @protobuf(1,"(gogoproto.nullable)=false")

	// The number of words in the global dictionary, used with to populate the attributes.
	// This value is used as a quick way to determine whether the client is using a dictionary that
	// the server understands.
	globalWordCount?: uint32 @protobuf(2,name=global_word_count)

	// Used for deduplicating `Check` calls in the case of failed RPCs and retries. This should be a UUID
	// per call, where the same UUID is used for retries of the same call.
	deduplicationId?: string @protobuf(3,name=deduplication_id)

	// The individual quotas to allocate
	quotas?: {
		<_>: CheckRequest_QuotaParams
	} @protobuf(4,type=map<string,QuotaParams>,"(gogoproto.nullable)=false")
}

// parameters for a quota allocation
CheckRequest_QuotaParams: {
	// Amount of quota to allocate
	amount?: int64 @protobuf(1)

	// When true, supports returning less quota than what was requested.
	bestEffort?: bool @protobuf(2,name=best_effort)
}

// The response generated by the Check method.
CheckResponse: {
	// The precondition check results.
	precondition?: CheckResponse_PreconditionResult @protobuf(2,type=PreconditionResult,"(gogoproto.nullable)=false")

	// The resulting quota, one entry per requested quota.
	quotas?: {
		<_>: CheckResponse_QuotaResult
	} @protobuf(3,type=map<string,QuotaResult>,"(gogoproto.nullable)=false")
}

// Expresses the result of a precondition check.
CheckResponse_PreconditionResult: {
	// A status code of OK indicates all preconditions were satisfied. Any other code indicates not
	// all preconditions were satisfied and details describe why.
	status?: _status_.Status @protobuf(1,type=google.rpc.Status,"(gogoproto.nullable)=false")

	// The amount of time for which this result can be considered valid.
	validDuration?: time.Duration @protobuf(2,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")

	// The number of uses for which this result can be considered valid.
	validUseCount?: int32 @protobuf(3,name=valid_use_count)

	// The total set of attributes that were used in producing the result
	// along with matching conditions.
	referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes)

	// An optional routing directive, used to manipulate the traffic metadata
	// whenever all preconditions are satisfied.
	routeDirective?: RouteDirective @protobuf(6,name=route_directive)
}
_status_ = status

// Expresses the result of a quota allocation.
CheckResponse_QuotaResult: {
	// The amount of time for which this result can be considered valid.
	validDuration?: time.Duration @protobuf(1,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")

	// The amount of granted quota. When `QuotaParams.best_effort` is true, this will be >= 0.
	// If `QuotaParams.best_effort` is false, this will be either 0 or >= `QuotaParams.amount`.
	grantedAmount?: int64 @protobuf(2,name=granted_amount)

	// The total set of attributes that were used in producing the result
	// along with matching conditions.
	referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes,"(gogoproto.nullable)=false")
}

// Describes the attributes that were used to determine the response.
// This can be used to construct a response cache.
ReferencedAttributes: {
	// The message-level dictionary. Refer to [CompressedAttributes][istio.mixer.v1.CompressedAttributes] for information
	// on using dictionaries.
	words?: [...string] @protobuf(1)

	// Describes a set of attributes.
	attributeMatches?: [...ReferencedAttributes_AttributeMatch] @protobuf(2,type=AttributeMatch,name=attribute_matches,"(gogoproto.nullable)=false")
}

// How an attribute's value was matched
ReferencedAttributes_Condition:
	*"CONDITION_UNSPECIFIED" | // should not occur
	"ABSENCE" | // match when attribute doesn't exist
	"EXACT" | // match when attribute value is an exact byte-for-byte match
	"REGEX" // match when attribute value matches the included regex

ReferencedAttributes_Condition_value: {
	"CONDITION_UNSPECIFIED": 0
	"ABSENCE":               1
	"EXACT":                 2
	"REGEX":                 3
}

// Describes a single attribute match.
ReferencedAttributes_AttributeMatch: {
	// The name of the attribute. This is a dictionary index encoded in a manner identical
	// to all strings in the [CompressedAttributes][istio.mixer.v1.CompressedAttributes] message.
	name?: int32 @protobuf(1,type=sint32)

	// The kind of match against the attribute value.
	condition?: ReferencedAttributes_Condition @protobuf(2,type=Condition)

	// If a REGEX condition is provided for a STRING_MAP attribute,
	// clients should use the regex value to match against map keys.
	regex?: string @protobuf(3)

	// A key in a STRING_MAP. When multiple keys from a STRING_MAP
	// attribute were referenced, there will be multiple AttributeMatch
	// messages with different map_key values. Values for map_key SHOULD
	// be ignored for attributes that are not STRING_MAP.
	//
	// Indices for the keys are used (taken either from the
	// message dictionary from the `words` field or the global dictionary).
	//
	// If no map_key value is provided for a STRING_MAP attribute, the
	// entire STRING_MAP will be used.
	mapKey?: int32 @protobuf(4,type=sint32,name=map_key)
}

// Operation on HTTP headers to replace, append, or remove a header. Header
// names are normalized to lower-case with dashes, e.g.  "x-request-id".
// Pseudo-headers ":path", ":authority", and ":method" are supported to modify
// the request headers.
HeaderOperation: {
	// Header name.
	name?: string @protobuf(1)

	// Header value.
	value?: string @protobuf(2)

	// Header operation.
	operation?: HeaderOperation_Operation @protobuf(3,type=Operation)
}

// Operation type.
HeaderOperation_Operation:
	*"REPLACE" | // replaces the header with the given name
	"REMOVE" | // removes the header with the given name (the value is ignored)
	"APPEND" // appends the value to the header value, or sets it if not present

HeaderOperation_Operation_value: {
	"REPLACE": 0
	"REMOVE":  1
	"APPEND":  2
}

// Expresses the routing manipulation actions to be performed on behalf of
// Mixer in response to a precondition check.
RouteDirective: {
	// Operations on the request headers.
	requestHeaderOperations?: [...HeaderOperation] @protobuf(1,name=request_header_operations,"(gogoproto.nullable)=false")

	// Operations on the response headers.
	responseHeaderOperations?: [...HeaderOperation] @protobuf(2,name=response_header_operations,"(gogoproto.nullable)=false")

	// If set, enables a direct response without proxying the request to the routing
	// destination. Required to be a value in the 2xx or 3xx range.
	directResponseCode?: uint32 @protobuf(3,name=direct_response_code)

	// Supplies the response body for the direct response.
	// If this setting is omitted, no body is included in the generated response.
	directResponseBody?: string @protobuf(4,name=direct_response_body)
}

// Used to report telemetry after performing one or more actions.
ReportRequest: {

	// next value: 5

	// The attributes to use for this request.
	//
	// Each `Attributes` element represents the state of a single action. Multiple actions
	// can be provided in a single message in order to improve communication efficiency. The
	// client can accumulate a set of actions and send them all in one single message.
	attributes?: [...CompressedAttributes] @protobuf(1,"(gogoproto.nullable)=false")

	// Indicates how to decode the attributes sets in this request.
	repeatedAttributesSemantics?: ReportRequest_RepeatedAttributesSemantics @protobuf(4,type=RepeatedAttributesSemantics,name=repeated_attributes_semantics)

	// The default message-level dictionary for all the attributes.
	// Individual attribute messages can have their own dictionaries, but if they don't
	// then this set of words, if it is provided, is used instead.
	//
	// This makes it possible to share the same dictionary for all attributes in this
	// request, which can substantially reduce the overall request size.
	defaultWords?: [...string] @protobuf(2,name=default_words)

	// The number of words in the global dictionary.
	// To detect global dictionary out of sync between client and server.
	globalWordCount?: uint32 @protobuf(3,name=global_word_count)
}

// Used to signal how the sets of compressed attributes should be reconstitued server-side.
ReportRequest_RepeatedAttributesSemantics:
	// Use delta encoding between sets of compressed attributes to reduce the overall on-wire
	// request size. Each individual set of attributes is used to modify the previous set.
	// NOTE: There is no way with this encoding to specify attribute value deletion. This
	// option should be used with extreme caution.
	*"DELTA_ENCODING" |

	// Treat each set of compressed attributes as complete - independent from other sets
	// in this request. This will result in on-wire duplication of attributes and values, but
	// will allow for proper accounting of absent values in overall encoding.
	"INDEPENDENT_ENCODING"

ReportRequest_RepeatedAttributesSemantics_value: {
	"DELTA_ENCODING":       0
	"INDEPENDENT_ENCODING": 1
}

// Used to carry responses to telemetry reports
ReportResponse: {
}
