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

syntax = "proto3";

package adapter.apigee.config;

import "gogoproto/gogo.proto";

option go_package="config";
option (gogoproto.goproto_getters_all) = false;
option (gogoproto.equal_all) = false;
option (gogoproto.gostring_all) = false;

message VerifyKeyParams {
  // The name of the parameter where the API key is stored.
  string key_parameter = 1;

  string organization = 2;

  string environment = 3;
}

message ReportParams {

    // Stream is used to select between different logs output sinks.
    enum Stream {
        // STDERR refers to os.Stderr.
        STDERR = 0;
        // STDOUT refers to os.Stdout.
        STDOUT = 1;
    }

    // Selects which standard stream to write to for log entries.
    // STDERR is the default Stream.
    Stream log_stream = 1;

    string organization = 2;

    string environment = 3;

    string key = 4;

    string secret = 5;
}
