blob: 0f3b7480b905d2fd314169b01f8e545c4d3f01b4 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file defines protobufs for users and related business
// objects, e.g., users, user preferences.
syntax = "proto3";
package monorail.v3;
option go_package = "infra/monorailv2/api/v3/api_proto";
import "google/api/resource.proto";
import "google/api/field_behavior.proto";
// User represents a user of the Monorail site.
// Next available tag: 5
message User {
option (google.api.resource) = {
type: "api.crbug.com/User"
pattern: "users/{user_id}"
};
// Resource name of the user.
// The API will always return User names with format: users/<user_id>.
// However the API will accept User names with formats: users/<user_id> or users/<email>.
// To fetch the display_name for any users/<user_id> returned by the API,
// you can call {Batch}GetUser{s}.
// We represent deleted users within Monorail with `users/1` or `users/2103649657`.
string name = 1;
// User display_name to show other users using the site.
// By default this is the obscured or un-obscured email.
string display_name = 2;
// Obscured or un-obscured user email or empty if this represents
// a deleted user.
string email = 4 [ (google.api.field_behavior) = OUTPUT_ONLY ];
// User-written indication of their availability or working hours.
string availability_message = 3;
// Timestamp of the user's last visit
int32 last_visit_timestamp = 5;
}
// UserSettings represents preferences and account settings of a User.
// Next available tag: 8
message UserSettings {
option (google.api.resource) = {
type: "api.crbug.com/UserSettings"
pattern: "usersettings/{user_id}"
};
// Potential roles of a user.
// Next available tag: 3
enum SiteRole {
// Default value. This value is unused.
SITE_ROLE_UNSPECIFIED = 0;
// Normal site user with no special site-wide extra permissions.
NORMAL = 1;
// Site-wide admin role.
ADMIN = 2;
}
// The access the user has to the site.
// Next available tag: 3
message SiteAccess {
// Potential status of a user's access to the site.
// Next available tag: 3
enum Status {
// Default value. This value is unused.
STATUS_UNSPECIFIED = 0;
// The user has access to the site.
FULL_ACCESS = 1;
// The user is banned from the site.
BANNED = 2;
}
// The status of the user's access to the site.
Status status = 1;
// An explanation for the value of `status`.
string reason = 2;
}
// Trait options for notifications the user receives.
// Next available tag: 6;
enum NotificationTraits {
// Default value. This value is unused.
NOTIFICATION_TRAITS_UNSPECIFIED = 0;
// Send change notifications for issues where user is owner or cc.
NOTIFY_ON_OWNED_OR_CC_ISSUE_CHANGES = 1;
// Send change notifications for issues the user has starred.
NOTIFY_ON_STARRED_ISSUE_CHANGES = 2;
// Send date-type field notifications for issues the user has starred.
// See monorail/doc/userguide/email.md#why-did-i-get-a-follow_up-email-notification.
NOTIFY_ON_STARRED_NOTIFY_DATES = 3;
// Email subject lines should be compact.
COMPACT_SUBJECT_LINE = 4;
// Include a button link to the issue, in Gmail.
GMAIL_INCLUDE_ISSUE_LINK_BUTTON = 5;
}
// Privacy trait options for the user.
// Next available tag: 2
enum PrivacyTraits {
// Default value. This value is unused.
PRIVACY_TRAITS_UNSPECIFIED = 0;
// Obscure the user's email from non-project members throughout the site.
OBSCURE_EMAIL = 1;
}
// Site interaction trait options for the user.
// Next available tag: 3
enum SiteInteractionTraits {
// Default value. This value is unused.
SITE_INTERACTION_TRAITS_UNSPECIFIED = 0;
// Add 'Restrict-View-Google' labels to new issues the user reports.
// Issues will only be visible to the user (issue reporter)
// and users with the `Google` permission.
REPORT_RESTRICT_VIEW_GOOGLE_ISSUES = 1;
// When viewing public issues, show a banner to remind the user not
// to post sensitive information.
PUBLIC_ISSUE_BANNER = 2;
}
// Resource name of the user that has these settings.
string name = 1 [ (google.api.resource_reference) = {type: "api.crbug.com/UserSettings"} ];
// The global site role for the user.
SiteRole site_role = 2 [ (google.api.field_behavior) = OUTPUT_ONLY ];
// Resource name of linked secondary users.
repeated string linked_secondary_users = 3 [
(google.api.resource_reference) = {type: "api.crbug.com/User"},
(google.api.field_behavior) = OUTPUT_ONLY ];
// The user's access to the site.
SiteAccess site_access = 4 [ (google.api.field_behavior) = OUTPUT_ONLY ];
// Notification trait preferences of the user.
repeated NotificationTraits notification_traits = 5;
// Privacy trait preferences of the user.
repeated PrivacyTraits privacy_traits = 6;
// Site interaction trait preferences of the user.
repeated SiteInteractionTraits site_interaction_traits = 7;
}
// Defines saved queries that belong to a user.
//
// Next available tag: 6
message UserSavedQuery {
option (google.api.resource) = {
type: "api.crbug.com/UserSavedQuery"
pattern: "users/{user_id}/savedQueries/{saved_query_id}"
};
// Resource name of this saved query.
string name = 1;
// Display name of this saved query, ie 'open issues'.
string display_name = 2;
// Search term of this saved query.
string query = 3;
// List of projects this query can be searched in.
repeated string projects = 4 [
(google.api.resource_reference) = { type: "api.crbug.com/Project" }
];
// Subscription mode of this saved query
// Next available tag: 3
enum SubscriptionMode {
// Default API value. This value is unused.
SUBSCRIPTION_MODE_UNSPECIFIED = 0;
// Do not subscribe to notifications.
NO_NOTIFICATION = 1;
// Subscribe to notifications.
IMMEDIATE_NOTIFICATION = 2;
}
SubscriptionMode subscription_mode = 5;
}
// A project starred by a user.
//
// Next available tag: 2
message ProjectStar {
option (google.api.resource) = {
type: "api.crbug.com/ProjectStar"
pattern: "users/{user_id}/projectStars/{project_name}"
};
// Resource name of the ProjectStar.
string name = 1;
}