1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.linecorp.centraldogma.server.metadata;
18
19 import static com.google.common.base.MoreObjects.firstNonNull;
20 import static java.util.Objects.requireNonNull;
21
22 import javax.annotation.Nullable;
23
24 import com.fasterxml.jackson.annotation.JsonCreator;
25 import com.fasterxml.jackson.annotation.JsonIgnore;
26 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
27 import com.fasterxml.jackson.annotation.JsonInclude;
28 import com.fasterxml.jackson.annotation.JsonInclude.Include;
29 import com.fasterxml.jackson.annotation.JsonProperty;
30 import com.google.common.base.MoreObjects;
31
32 import com.linecorp.centraldogma.common.ProjectRole;
33 import com.linecorp.centraldogma.internal.Util;
34
35
36
37
38 @JsonIgnoreProperties(ignoreUnknown = true)
39 @JsonInclude(Include.NON_NULL)
40 public final class Token implements Identifiable {
41
42
43
44
45 private final String appId;
46
47
48
49
50 @Nullable
51 private final String secret;
52
53
54
55
56 private final boolean isSystemAdmin;
57
58 private final boolean allowGuestAccess;
59
60
61
62
63 private final UserAndTimestamp creation;
64
65
66
67
68 @Nullable
69 private final UserAndTimestamp deactivation;
70
71 @Nullable
72 private final UserAndTimestamp deletion;
73
74 Token(String appId, String secret, boolean isSystemAdmin, boolean allowGuestAccess,
75 UserAndTimestamp creation) {
76 this(appId, secret, null, isSystemAdmin, allowGuestAccess, creation, null, null);
77 }
78
79
80
81
82 @JsonCreator
83 public Token(@JsonProperty("appId") String appId,
84 @JsonProperty("secret") String secret,
85
86 @JsonProperty("admin") @Nullable Boolean isAdmin,
87 @JsonProperty("systemAdmin") @Nullable Boolean isSystemAdmin,
88 @JsonProperty("allowGuestAccess") @Nullable Boolean allowGuestAccess,
89 @JsonProperty("creation") UserAndTimestamp creation,
90 @JsonProperty("deactivation") @Nullable UserAndTimestamp deactivation,
91 @JsonProperty("deletion") @Nullable UserAndTimestamp deletion) {
92 assert isAdmin != null || isSystemAdmin != null;
93 this.appId = Util.validateFileName(appId, "appId");
94 this.secret = Util.validateFileName(secret, "secret");
95 this.isSystemAdmin = isSystemAdmin != null ? isSystemAdmin : isAdmin;
96
97 this.allowGuestAccess = firstNonNull(allowGuestAccess, true);
98 this.creation = requireNonNull(creation, "creation");
99 this.deactivation = deactivation;
100 this.deletion = deletion;
101 }
102
103 private Token(String appId, boolean isSystemAdmin, boolean allowGuestAccess, UserAndTimestamp creation,
104 @Nullable UserAndTimestamp deactivation, @Nullable UserAndTimestamp deletion) {
105 this.appId = Util.validateFileName(appId, "appId");
106 this.isSystemAdmin = isSystemAdmin;
107 this.allowGuestAccess = allowGuestAccess;
108 this.creation = requireNonNull(creation, "creation");
109 this.deactivation = deactivation;
110 this.deletion = deletion;
111 secret = null;
112 }
113
114 @Override
115 public String id() {
116 return appId;
117 }
118
119
120
121
122 @JsonProperty
123 public String appId() {
124 return appId;
125 }
126
127
128
129
130 @Nullable
131 @JsonProperty
132 public String secret() {
133 return secret;
134 }
135
136
137
138
139 @JsonProperty
140 public boolean isSystemAdmin() {
141 return isSystemAdmin;
142 }
143
144
145
146
147 @JsonProperty
148 public boolean allowGuestAccess() {
149 return allowGuestAccess;
150 }
151
152
153
154
155 @JsonProperty
156 public UserAndTimestamp creation() {
157 return creation;
158 }
159
160
161
162
163 @Nullable
164 @JsonProperty
165 public UserAndTimestamp deactivation() {
166 return deactivation;
167 }
168
169
170
171
172 @Nullable
173 @JsonProperty
174 public UserAndTimestamp deletion() {
175 return deletion;
176 }
177
178
179
180
181 @JsonIgnore
182 public boolean isActive() {
183 return deactivation == null && deletion == null;
184 }
185
186
187
188
189 @JsonIgnore
190 public boolean isDeleted() {
191 return deletion != null;
192 }
193
194 @Override
195 public String toString() {
196
197 return MoreObjects.toStringHelper(this).omitNullValues()
198 .add("appId", appId())
199 .add("isSystemAdmin", isSystemAdmin())
200 .add("allowGuestAccess", allowGuestAccess())
201 .add("creation", creation())
202 .add("deactivation", deactivation())
203 .add("deletion", deletion())
204 .toString();
205 }
206
207
208
209
210 public Token withoutSecret() {
211 return new Token(appId(), isSystemAdmin(), allowGuestAccess(), creation(), deactivation(), deletion());
212 }
213
214
215
216
217
218 public Token withSystemAdmin(boolean isSystemAdmin) {
219 if (isSystemAdmin == isSystemAdmin()) {
220 return this;
221 }
222 final String secret = secret();
223 assert secret != null;
224 return new Token(appId(), secret, null, isSystemAdmin, allowGuestAccess(), creation(),
225 deactivation(), deletion());
226 }
227 }