syntax = "proto3";

package controller.api.resources.accounts.v1;

option go_package = "github.com/hashicorp/boundary/internal/gen/controller/api/resources/accounts;accounts";

import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
import "google/protobuf/struct.proto";
import "controller/api/resources/scopes/v1/scope.proto";
import "controller/custom_options/v1/options.proto";

// Account contains all fields related to an Account resource
message Account {
	// Output only. The ID of the Account.
	string id = 10;

	// Output only. Scope information for the Account.
	resources.scopes.v1.ScopeInfo scope = 20;

	// Optional name for identification purposes.
	google.protobuf.StringValue name = 30 [(custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this:"name" that: "name"}];

	// Optional user-set description for identification purposes.
	google.protobuf.StringValue description = 40 [(custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this:"description" that: "description"}];

	// Output only. The time this resource was created.
	google.protobuf.Timestamp created_time = 50 [json_name="created_time"];

	// Output only. The time this resource was last updated.
	google.protobuf.Timestamp updated_time = 60 [json_name="updated_time"];

	// Version is used in mutation requests, after the initial creation, to ensure this resource has not changed.
  // The mutation will fail if the version does not match the latest known good version.
	uint32 version = 70;

	// The type of this Account.
	string type = 80;

	// The ID of the Auth Method that is associated with this Account.
	string auth_method_id = 90 [json_name="auth_method_id"];

	// The attributes that are applicable for the specific Account type.
	google.protobuf.Struct attributes = 100 [(custom_options.v1.generate_sdk_option) = true];
}

message PasswordAccountAttributes {
	// The login name of this Account. This is unique per Auth Method.
	string login_name = 10 [json_name="login_name", (custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this:"attributes.login_name" that: "LoginName"}];

	// The password for this Account.
	google.protobuf.StringValue password = 20 [(custom_options.v1.generate_sdk_option) = true];
}
