forked from TheThingsNetwork/lorawan-stack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuser.proto
More file actions
197 lines (164 loc) · 8.46 KB
/
user.proto
File metadata and controls
197 lines (164 loc) · 8.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
// Copyright © 2019 The Things Network Foundation, The Things Industries B.V.
//
// 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";
import "github.com/envoyproxy/protoc-gen-validate/validate/validate.proto";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
import "lorawan-stack/api/contact_info.proto";
import "lorawan-stack/api/enums.proto";
import "lorawan-stack/api/identifiers.proto";
import "lorawan-stack/api/picture.proto";
import "lorawan-stack/api/rights.proto";
package ttn.lorawan.v3;
option go_package = "go.thethings.network/lorawan-stack/v3/pkg/ttnpb";
// User is the message that defines a user on the network.
message User {
UserIdentifiers ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
google.protobuf.Timestamp created_at = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
google.protobuf.Timestamp updated_at = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
string name = 4 [(validate.rules).string.max_len = 50];
string description = 5 [(validate.rules).string.max_len = 2000];
map<string,string> attributes = 6 [(validate.rules).map.keys.string = {pattern: "^[a-z0-9](?:[-]?[a-z0-9]){2,}$" , max_len: 36}];
repeated ContactInfo contact_info = 7;
// Primary email address that can be used for logging in.
// This address is not public, use contact_info for that.
string primary_email_address = 8 [(validate.rules).string.email = true];
google.protobuf.Timestamp primary_email_address_validated_at = 9 [(gogoproto.stdtime) = true];
// Only used on create; never returned on API calls.
string password = 10;
google.protobuf.Timestamp password_updated_at = 11 [(gogoproto.stdtime) = true];
bool require_password_update = 12;
// The reviewing state of the user.
// This field can only be modified by admins.
State state = 13 [(validate.rules).enum.defined_only = true];
// This user is an admin.
// This field can only be modified by other admins.
bool admin = 14;
// The temporary password can only be used to update a user's password; never returned on API calls.
string temporary_password = 15;
google.protobuf.Timestamp temporary_password_created_at = 16 [(gogoproto.stdtime) = true];
google.protobuf.Timestamp temporary_password_expires_at = 17 [(gogoproto.stdtime) = true];
Picture profile_picture = 18;
}
message Users {
repeated User users = 1;
}
message GetUserRequest {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
google.protobuf.FieldMask field_mask = 2 [(gogoproto.nullable) = false];
}
message ListUsersRequest {
google.protobuf.FieldMask field_mask = 1 [(gogoproto.nullable) = false];
// Order the results by this field path (must be present in the field mask).
// Default ordering is by ID. Prepend with a minus (-) to reverse the order.
string order = 2 [
(validate.rules).string = { in: ["", "user_id", "-user_id", "name", "-name", "primary_email_address", "-primary_email_address", "state", "-state", "admin", "-admin", "created_at", "-created_at"] }
];
// Limit the number of results per page.
uint32 limit = 3 [(validate.rules).uint32.lte = 1000];
// Page number for pagination. 0 is interpreted as 1.
uint32 page = 4;
}
message CreateUserRequest {
User user = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
string invitation_token = 2;
}
message UpdateUserRequest {
User user = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
google.protobuf.FieldMask field_mask = 2 [(gogoproto.nullable) = false];
}
message CreateTemporaryPasswordRequest {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
}
message UpdateUserPasswordRequest {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
string new = 2;
string old = 3;
// Revoke active sessions and access tokens of user if true. To be used if credentials are suspected to be compromised.
bool revoke_all_access = 4;
}
message ListUserAPIKeysRequest {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
// Limit the number of results per page.
uint32 limit = 2 [(validate.rules).uint32.lte = 1000];
// Page number for pagination. 0 is interpreted as 1.
uint32 page = 3;
}
message GetUserAPIKeyRequest {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
// Unique public identifier for the API key.
string key_id = 2 [(gogoproto.customname) = "KeyID"];
}
message CreateUserAPIKeyRequest {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
string name = 2 [(validate.rules).string.max_len = 50];
repeated Right rights = 3 [(validate.rules).repeated.items.enum.defined_only = true];
}
message UpdateUserAPIKeyRequest {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
APIKey api_key = 2 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
}
message Invitation {
string email = 1 [(validate.rules).string.email = true];
string token = 2;
google.protobuf.Timestamp expires_at = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
google.protobuf.Timestamp created_at = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
google.protobuf.Timestamp updated_at = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
google.protobuf.Timestamp accepted_at = 6 [(gogoproto.stdtime) = true];
UserIdentifiers accepted_by = 7;
}
message ListInvitationsRequest {
// Limit the number of results per page.
uint32 limit = 1 [(validate.rules).uint32.lte = 1000];
// Page number for pagination. 0 is interpreted as 1.
uint32 page = 2;
}
message Invitations {
repeated Invitation invitations = 1;
}
message SendInvitationRequest {
string email = 1 [(validate.rules).string.email = true];
}
message DeleteInvitationRequest {
string email = 1 [(validate.rules).string.email = true];
}
message UserSessionIdentifiers {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
string session_id = 2 [(gogoproto.customname) = "SessionID", (validate.rules).string.max_len = 64];
}
message UserSession {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
string session_id = 2 [(gogoproto.customname) = "SessionID", (validate.rules).string.max_len = 64];
google.protobuf.Timestamp created_at = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
google.protobuf.Timestamp updated_at = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
google.protobuf.Timestamp expires_at = 5 [(gogoproto.stdtime) = true];
// The session secret is used to compose an authorization key and is never returned.
string session_secret = 6;
}
message UserSessions {
repeated UserSession sessions = 1;
}
message ListUserSessionsRequest {
UserIdentifiers user_ids = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false, (validate.rules).message.required = true];
// Order the results by this field path (must be present in the field mask).
// Default ordering is by ID. Prepend with a minus (-) to reverse the order.
string order = 2 [
(validate.rules).string = { in: ["", "created_at", "-created_at"] }
];
// Limit the number of results per page.
uint32 limit = 3 [(validate.rules).uint32.lte = 1000];
// Page number for pagination. 0 is interpreted as 1.
uint32 page = 4;
}