/*
Copyright 2017 Google Inc.

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 config;

message VerifyKeyParams {
  // The name of the Apigee organization -- required
  string organization = 1;
  // The name of the Apigee environment -- required
  string environment = 2;
  // A URL to use to contact the verification service. Will be
  // constructed from the organization and environment name if not
  // specified, and assumes that the service runs at production "apigee.net".
  string verificationURL = 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;
}
