// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you 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 = "proto2";

import "mesos/mesos.proto";
import "mesos/quota/quota.proto";

package mesos.authorization;

option java_package = "org.apache.mesos.authorization";
option java_outer_classname = "Protos";


// A `Subject` is the entity which desires to execute an `Action` on
// an `Object`. A `Subject` has a number of optional fields:
//   `value` : String which identifies the subject, i.e., a principal.
//   `claims`: Key-value pairs associated with the subject.
//
// NOTE: A `Subject` should always come with at least one set field.
message Subject {
  optional string value = 1;
  optional Labels claims = 2;
}


// An `Object` is the entity on which a `Subject` wishes to execute an
// `Action`. An `Object` has a number of optional fields of which,
// depending on the action, one or more fields must be set. For
// example the `VIEW_EXECUTOR` action expects the `executor_info` and
// `framework_info` field to be set. The `Action` comments explain
// what to expect.
// NOTE: An `Object` should always come with at least one set field.
message Object {
  optional string value = 1;
  optional FrameworkInfo framework_info = 2;
  optional Task task = 3;
  optional TaskInfo task_info = 4;
  optional ExecutorInfo executor_info = 5;
  optional quota.QuotaInfo quota_info = 6;
  optional WeightInfo weight_info = 7;
  optional Resource resource = 8;
  optional CommandInfo command_info = 9;
  optional ContainerID container_id = 10;
  optional MachineID machine_id = 11;
}


// List of authorizable actions supported in Mesos.
// NOTE: Values in this enum should be kept in
// numerical order to prevent accidental aliasing.
enum Action {
  option allow_alias = true;

  // This must be the first enum value in this list, to
  // ensure that if 'type' is not set, the default value
  // is UNKNOWN. This enables enum values to be added
  // in a backwards-compatible way. See: MESOS-4997.
  UNKNOWN = 0;

  // Actions named *_WITH_foo may set a foo in `Object.value`.

  // `REGISTER_FRAMEWORK` will have an object with `FrameworkInfo` set.
  // The `_WITH_ROLE` alias is deprecated and will be removed after
  // Mesos 1.2's deprecation cycle ends. The `value` field will continue
  // to be set until that time.
  REGISTER_FRAMEWORK = 1;
  REGISTER_FRAMEWORK_WITH_ROLE = 1;

  // `RUN_TASK` will have an object with `FrameworkInfo` and `TaskInfo` set.
  RUN_TASK = 2;

  // `TEARDOWN_FRAMEWORK` will have an object with `FrameworkInfo` set.
  // The `_WITH_PRINCIPAL` alias is deprecated and will be removed after
  // Mesos 1.2's deprecation cycle ends. The `value` field will continue
  // to be set until that time.
  TEARDOWN_FRAMEWORK = 3;
  TEARDOWN_FRAMEWORK_WITH_PRINCIPAL = 3;

  // `RESERVE_RESOURCES` will have an object with `Resource` set.
  // The `_WITH_ROLE` alias is deprecated and will be removed after
  // Mesos 1.2's deprecation cycle ends. The `value` field will continue
  // to be set until that time.
  RESERVE_RESOURCES = 4;
  RESERVE_RESOURCES_WITH_ROLE = 4;

  // `UNRESERVE_RESOURCES` will have an object with `Resource` set.
  // The `_WITH_PRINCIPAL` alias is deprecated and will be removed after
  // Mesos 1.2's deprecation cycle ends. The `value` field will continue
  // to be set until that time.
  UNRESERVE_RESOURCES = 5;
  UNRESERVE_RESOURCES_WITH_PRINCIPAL = 5;

  // `CREATE_VOLUME` will have an object with `Resource` set.
  // The `_WITH_ROLE` alias is deprecated and will be removed after
  // Mesos 1.2's deprecation cycle ends. The `value` field will continue
  // to be set until that time.
  CREATE_VOLUME = 6;
  CREATE_VOLUME_WITH_ROLE = 6;

  // `DESTROY_VOLUME` will have an object with `Resource` set.
  // The `_WITH_PRINCIPAL` alias is deprecated and will be removed after
  // Mesos 1.2's deprecation cycle ends. The `value` field will continue
  // to be set until that time.
  DESTROY_VOLUME = 7;
  DESTROY_VOLUME_WITH_PRINCIPAL = 7;

  GET_ENDPOINT_WITH_PATH = 8;
  VIEW_ROLE = 9;

  // `UPDATE_WEIGHT` will have an object with `WeightInfo` set.
  // The `_WITH_ROLE` alias is deprecated and will be removed after
  // Mesos 1.2's deprecation cycle ends. The `value` field will continue
  // to be set until that time.
  UPDATE_WEIGHT = 10;
  UPDATE_WEIGHT_WITH_ROLE = 10;

  // `GET_QUOTA` will have an object with `QuotaInfo` set.
  // The `_WITH_ROLE` alias is deprecated and will be removed after
  // Mesos 1.2's deprecation cycle ends. The `value` field will continue
  // to be set until that time.
  GET_QUOTA = 11;
  GET_QUOTA_WITH_ROLE = 11;

  // `UPDATE_QUOTA` will have an object with a `QuotaInfo` set.
  UPDATE_QUOTA = 12;

  // `VIEW_FRAMEWORK` will have an object with a `FrameworkInfo` set.
  VIEW_FRAMEWORK = 13;

  // `VIEW_TASK` will have an object with (`Task` or `TaskInfo`) and
  // `FrameworkInfo` set.
  VIEW_TASK = 14;

  // `VIEW_EXECUTOR` will have an object with `ExecutorInfo` and
  // `FrameworkInfo` set.
  VIEW_EXECUTOR = 15;

  // This action will have an object which commonly has both a
  // `FrameworkInfo` and `ExecutorInfo` set. In exceptional cases the
  // object might have nothing set. See MESOS-5730.
  ACCESS_SANDBOX = 16;

  // This action will not fill in any object fields, since the object
  // is the master/agent log itself.
  ACCESS_MESOS_LOG = 17;

  // This action will not fill in any object fields, since the object
  // is the entire set of flags.
  VIEW_FLAGS = 18;

  // This action will always set the `ExecutorInfo`, `FrameworkInfo`, and
  // `ContainerID` fields and optionally a `CommandInfo` if available.
  LAUNCH_NESTED_CONTAINER = 19;

  // This action will set objects of type `ExecutorInfo`, `FrameworkInfo`, and
  // `ContainerID`.
  KILL_NESTED_CONTAINER = 20;

  // This action will set objects of type `ExecutorInfo`, `FrameworkInfo`, and
  // `ContainerID`.
  WAIT_NESTED_CONTAINER = 21;

  // This action will always set the `ExecutorInfo`, `FrameworkInfo`, and
  // `ContainerID` fields and optionally a `CommandInfo` if available.
  LAUNCH_NESTED_CONTAINER_SESSION = 22;

  // This action will set objects of type `ExecutorInfo` and `FrameworkInfo`.
  ATTACH_CONTAINER_INPUT = 23;

  // This action will set objects of type `ExecutorInfo` and `FrameworkInfo`.
  ATTACH_CONTAINER_OUTPUT = 24;

  // This action will set objects of type `ExecutorInfo` and `FrameworkInfo`.
  VIEW_CONTAINER = 25;

  // This action will not fill in any object fields, since a principal is
  // either allowed to change the log level or he is unauthorized.
  SET_LOG_LEVEL = 26;

  // This action will set objects of type `ExecutorInfo`, `FrameworkInfo`, and
  // `ContainerID`.
  REMOVE_NESTED_CONTAINER = 27;

  // This action will not fill in any object fields, since a principal is
  // either allowed to register as an agent or is unauthorized.
  REGISTER_AGENT = 28;

  // This action will set objects of type `MachineID`.
  UPDATE_MAINTENANCE_SCHEDULE = 29;

  // This action will set objects of type `MachineID`.
  GET_MAINTENANCE_SCHEDULE = 30;

  // This action will set objects of type `MachineID`.
  START_MAINTENANCE = 31;

  // This action will set objects of type `MachineID`.
  STOP_MAINTENANCE = 32;

  // This action will set objects of type `MachineID`.
  GET_MAINTENANCE_STATUS = 33;

  // This action will not fill in any object fields, since a principal is
  // either allowed to mark an agent as gone or is unauthorized.
  MARK_AGENT_GONE = 34;

  // This action will not fill in any object fields. A principal is either
  // allowed to launch standalone containers or is unauthorized.
  //
  // TODO(josephw): This should set the operating system user in the object.
  LAUNCH_STANDALONE_CONTAINER = 35;

  // This action will not fill in any object fields. A principal is either
  // allowed to kill standalone containers or is unauthorized.
  //
  // TODO(josephw): This should set the operating system user in the object.
  KILL_STANDALONE_CONTAINER = 36;

  // This action will not fill in any object fields. A principal is either
  // allowed to wait upon standalone containers or is unauthorized.
  //
  // TODO(josephw): This should set the operating system user in the object.
  WAIT_STANDALONE_CONTAINER = 37;

  // This action will not fill in any object fields. A principal is either
  // allowed to remove standalone containers or is unauthorized.
  //
  // TODO(josephw): This should set the operating system user in the object.
  REMOVE_STANDALONE_CONTAINER = 38;

  // This action will not fill in any object fields. A principal is either
  // allowed to remove standalone containers or is unauthorized.
  VIEW_STANDALONE_CONTAINER = 40;

  // This action will not fill in any object fields. A principal is either
  // allowed to add, update and remove resource provider config files or is
  // unauthorized.
  MODIFY_RESOURCE_PROVIDER_CONFIG = 39;

  // This action will not fill in any object fields. A principal is either
  // allowed to mark a resource provider as gone or is unauthorized.
  MARK_RESOURCE_PROVIDER_GONE = 48;

  // This action will not fill in any object fields. A principal is either
  // allowed to view resource provider information or is unauthorized.
  VIEW_RESOURCE_PROVIDER = 47;

  // This action will not fill in any object fields. A principal is either
  // allowed to prune unused container images or is unauthorized.
  PRUNE_IMAGES = 41;

  // `RESIZE_VOLUME` will have an object with `Resource` set.
  //
  // NOTE: For consistency, the `value` field will be set with the most refined
  // role until all `*_WITH_ROLE` aliases are removed.
  RESIZE_VOLUME = 42;

  // `CREATE_BLOCK_DISK` will have an object with `Resource` set.
  //
  // NOTE: For consistency, the `value` field will be set with the most refined
  // role until all `*_WITH_ROLE` aliases are removed.
  CREATE_BLOCK_DISK = 43;

  // `DESTROY_BLOCK_DISK` will have an object with `Resource` set.
  //
  // NOTE: For consistency, the `value` field will be set with the most refined
  // role until all `*_WITH_ROLE` aliases are removed.
  DESTROY_BLOCK_DISK = 44;

  // `CREATE_MOUNT_DISK` will have an object with `Resource` set.
  //
  // NOTE: For consistency, the `value` field will be set with the most refined
  // role until all `*_WITH_ROLE` aliases are removed.
  CREATE_MOUNT_DISK = 45;

  // `DESTROY_MOUNT_DISK` will have an object with `Resource` set.
  //
  // NOTE: For consistency, the `value` field will be set with the most refined
  // role until all `*_WITH_ROLE` aliases are removed.
  DESTROY_MOUNT_DISK = 46;

  // `DESTROY_RAW_DISK` will have an object with `Resource` set.
  //
  // NOTE: For consistency, the `value` field will be set with the most refined
  // role until all `*_WITH_ROLE` aliases are removed.
  DESTROY_RAW_DISK = 49;
}


// A `Request` is a <subject, action, object> tuple which can be read
// as "Can `subject` perform `action` with `object`?".
message Request {
  // An unset `subject` means "unspecified".
  optional Subject subject = 1;

  // Enum fields should be optional, see: MESOS-4997.
  optional Action action = 2;

  // An unset `object` means "unspecified".
  optional Object object = 3;
}
