Skip to content

Commit f6ff939

Browse files
author
Ajay Kannan
committed
---
yaml --- r: 1443 b: refs/heads/master c: 65a6240 h: refs/heads/master i: 1441: 78a311e 1439: d62c6be
1 parent 0a7ea2b commit f6ff939

14 files changed

Lines changed: 1476 additions & 29 deletions

File tree

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 249fae8f180a61e7a4ef619169c62d45a90b8076
2+
refs/heads/master: 65a6240d9dda87434786e016e3cc2cd4d5d26f53
33
refs/heads/travis: e21ee7b88a5edc3f3d8c71f90c3fc32abf7e8dd6
44
refs/heads/gh-pages: d1b373c30c176edc08692348167bec3a244bb823
55
refs/heads/bigquery: 762fa5830e6c398c0396177e3e7fd243bd62cfc3
Lines changed: 389 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,389 @@
1+
/*
2+
* Copyright 2015 Google Inc. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.gcloud.resourcemanager;
18+
19+
import static com.google.common.base.Preconditions.checkNotNull;
20+
21+
import com.google.common.collect.ImmutableList;
22+
23+
import java.io.Serializable;
24+
import java.util.ArrayList;
25+
import java.util.List;
26+
import java.util.Objects;
27+
28+
/**
29+
* A Google Cloud IAM Policy object
30+
*/
31+
public class Policy implements Serializable {
32+
33+
private static final long serialVersionUID = 3493286111316914094L;
34+
private final List<Binding> bindings;
35+
private final Integer version;
36+
private final String etag;
37+
38+
public static enum MemberType {
39+
ALL_USERS("allUsers"),
40+
ALL_AUTHENTICATED_USERS("allAuthenticatedUsers"),
41+
USER("user:"),
42+
SERVICE_ACCOUNT("serviceAccount:"),
43+
GROUP("group:"),
44+
DOMAIN("domain:");
45+
46+
private final String prefix;
47+
48+
MemberType(String prefix) {
49+
this.prefix = prefix;
50+
}
51+
52+
String prefix() {
53+
return prefix;
54+
}
55+
}
56+
57+
public enum RoleType {
58+
OWNER,
59+
EDITOR,
60+
VIEWER;
61+
}
62+
63+
/**
64+
* Represents a member belonging to an IAM policy binding
65+
*/
66+
public static final class Member implements Serializable {
67+
68+
private static final long serialVersionUID = 6496912037577986137L;
69+
private final MemberType memberType;
70+
private final String emailOrDomain;
71+
72+
Member(MemberType memberType, String emailOrDomain) {
73+
this.memberType = memberType;
74+
this.emailOrDomain = emailOrDomain;
75+
}
76+
77+
public static Member allUsers() {
78+
throw new UnsupportedOperationException(
79+
"Google Cloud Resource Manager does not support the \"all users\" member type yet.");
80+
// return new Member(MemberType.ALL_USERS, null);
81+
}
82+
83+
public static Member allAuthenticatedUsers() {
84+
throw new UnsupportedOperationException("Google Cloud Resource Manager does not support the "
85+
+ "\"all authenticated users\" member type yet.");
86+
// return new Member(MemberType.ALL_AUTHENTICATED_USERS, null);
87+
}
88+
89+
public static Member user(String email) {
90+
return new Member(MemberType.USER, email);
91+
}
92+
93+
public static Member serviceAccount(String email) {
94+
return new Member(MemberType.SERVICE_ACCOUNT, email);
95+
}
96+
97+
public static Member group(String email) {
98+
return new Member(MemberType.GROUP, email);
99+
}
100+
101+
public static Member domain(String domain) {
102+
throw new UnsupportedOperationException(
103+
"Google Cloud Resource Manager does not support domain members yet.");
104+
// return new Member(MemberType.DOMAIN, domain);
105+
}
106+
107+
public MemberType type() {
108+
return memberType;
109+
}
110+
111+
public String emailOrDomain() {
112+
return emailOrDomain;
113+
}
114+
115+
@Override
116+
public int hashCode() {
117+
return Objects.hash(memberType, emailOrDomain);
118+
}
119+
120+
@Override
121+
public boolean equals(Object obj) {
122+
return obj instanceof Member && Objects.equals(this.memberType, ((Member) obj).memberType)
123+
&& Objects.equals(this.emailOrDomain, ((Member) obj).emailOrDomain);
124+
}
125+
}
126+
127+
/**
128+
* Represents an IAM policy binding
129+
*/
130+
public static class Binding implements Serializable {
131+
132+
private static final long serialVersionUID = -8493421092718338925L;
133+
private final RoleType role;
134+
private final List<Member> members;
135+
136+
public static class Builder {
137+
private RoleType role;
138+
private List<Member> members;
139+
140+
Builder() {
141+
members = new ArrayList<Member>();
142+
}
143+
144+
public Builder role(RoleType role) {
145+
this.role = role;
146+
return this;
147+
}
148+
149+
public Builder members(List<Member> members) {
150+
this.members = checkNotNull(members);
151+
return this;
152+
}
153+
154+
public Builder clearMembers() {
155+
this.members = new ArrayList<>();
156+
return this;
157+
}
158+
159+
public Builder addMember(Member member) {
160+
this.members.add(member);
161+
return this;
162+
}
163+
164+
public Builder removeMember(Member member) {
165+
this.members.remove(member);
166+
return this;
167+
}
168+
169+
public Binding build() {
170+
return new Binding(role, members);
171+
}
172+
}
173+
174+
private Binding(RoleType role, List<Member> members) {
175+
this.role = role;
176+
ImmutableList.Builder<Member> membersListBuilder = new ImmutableList.Builder<>();
177+
for (Member member : members) {
178+
membersListBuilder.add(member);
179+
}
180+
this.members = membersListBuilder.build();
181+
}
182+
183+
public static Binding binding(RoleType role, List<Member> members) {
184+
return new Binding(role, members);
185+
}
186+
187+
public RoleType role() {
188+
return role;
189+
}
190+
191+
public List<Member> members() {
192+
return members;
193+
}
194+
195+
public static Builder builder() {
196+
return new Builder();
197+
}
198+
199+
public Builder toBuilder() {
200+
List<Member> mutableMembers = new ArrayList<>();
201+
for (Member member : members) {
202+
mutableMembers.add(member);
203+
}
204+
return new Builder().role(role).members(mutableMembers);
205+
}
206+
207+
com.google.api.services.cloudresourcemanager.model.Binding toPb() {
208+
com.google.api.services.cloudresourcemanager.model.Binding bindingPb =
209+
new com.google.api.services.cloudresourcemanager.model.Binding();
210+
if (role != null) {
211+
bindingPb.setRole("roles/" + role.toString().toLowerCase());
212+
}
213+
List<String> membersPb = new ArrayList<>(members.size());
214+
for (Member member : members) {
215+
if (member.emailOrDomain() != null) {
216+
membersPb.add(member.type().prefix() + member.emailOrDomain());
217+
} else {
218+
membersPb.add(member.type().prefix());
219+
}
220+
}
221+
bindingPb.setMembers(membersPb);
222+
return bindingPb;
223+
}
224+
225+
static Binding fromPb(com.google.api.services.cloudresourcemanager.model.Binding bindingPb) {
226+
RoleType role =
227+
(bindingPb.getRole() == null)
228+
? null : RoleType.valueOf(bindingPb.getRole().split("/")[1].toUpperCase());
229+
List<Member> members = new ArrayList<>();
230+
if (bindingPb.getMembers() != null) {
231+
for (String memberPb : bindingPb.getMembers()) {
232+
String[] memberInfo = memberPb.split(":", 2);
233+
String memberTypeStr = memberInfo[0];
234+
String emailOrDomain = (memberInfo.length > 1) ? emailOrDomain = memberInfo[1] : null;
235+
switch (memberTypeStr) {
236+
case "allUsers":
237+
members.add(new Member(MemberType.ALL_USERS, null));
238+
break;
239+
case "allAuthenticatedUsers":
240+
members.add(new Member(MemberType.ALL_AUTHENTICATED_USERS, null));
241+
break;
242+
case "user":
243+
members.add(new Member(MemberType.USER, checkNotNull(emailOrDomain)));
244+
break;
245+
case "serviceAccount":
246+
members.add(new Member(MemberType.SERVICE_ACCOUNT, checkNotNull(emailOrDomain)));
247+
break;
248+
case "group":
249+
members.add(new Member(MemberType.GROUP, checkNotNull(emailOrDomain)));
250+
break;
251+
case "domain":
252+
members.add(new Member(MemberType.DOMAIN, checkNotNull(emailOrDomain)));
253+
break;
254+
default:
255+
throw new UnsupportedOperationException("Unsupported member type: " + memberTypeStr);
256+
}
257+
}
258+
}
259+
return new Binding(role, members);
260+
}
261+
262+
@Override
263+
public int hashCode() {
264+
return Objects.hash(role, members);
265+
}
266+
267+
@Override
268+
public boolean equals(Object obj) {
269+
return obj instanceof Binding && Objects.equals(this.role, ((Binding) obj).role)
270+
&& Objects.equals(this.members, ((Binding) obj).members);
271+
}
272+
}
273+
274+
public static final class Builder {
275+
private List<Binding> bindings;
276+
private String etag;
277+
private Integer version;
278+
279+
private Builder() {
280+
bindings = new ArrayList<>();
281+
}
282+
283+
public Builder addBinding(Binding binding) {
284+
this.bindings.add(binding);
285+
return this;
286+
}
287+
288+
public Builder removeBinding(Binding binding) {
289+
this.bindings.remove(binding);
290+
return this;
291+
}
292+
293+
public Builder clearBindings() {
294+
this.bindings = new ArrayList<>();
295+
return this;
296+
}
297+
298+
public Builder bindings(List<Binding> bindings) {
299+
this.bindings = checkNotNull(bindings);
300+
return this;
301+
}
302+
303+
public Builder etag(String etag) {
304+
this.etag = etag;
305+
return this;
306+
}
307+
308+
public Builder version(Integer version) {
309+
this.version = version;
310+
return this;
311+
}
312+
313+
public Policy build() {
314+
return new Policy(this);
315+
}
316+
}
317+
318+
Policy(Builder builder) {
319+
ImmutableList.Builder<Binding> bindingsListBuilder = new ImmutableList.Builder<>();
320+
for (Binding binding : builder.bindings) {
321+
bindingsListBuilder.add(binding);
322+
}
323+
bindings = bindingsListBuilder.build();
324+
version = builder.version;
325+
etag = builder.etag;
326+
}
327+
328+
public List<Binding> bindings() {
329+
return bindings;
330+
}
331+
332+
public Integer version() {
333+
return version;
334+
}
335+
336+
public String etag() {
337+
return etag;
338+
}
339+
340+
public static Builder builder() {
341+
return new Builder();
342+
}
343+
344+
public Builder toBuilder() {
345+
List<Binding> mutableBindings = new ArrayList<>();
346+
for (Binding binding : bindings) {
347+
mutableBindings.add(binding);
348+
}
349+
return new Builder().bindings(mutableBindings).etag(etag).version(version);
350+
}
351+
352+
@Override
353+
public int hashCode() {
354+
return Objects.hash(bindings, etag, version);
355+
}
356+
357+
@Override
358+
public boolean equals(Object obj) {
359+
return obj instanceof Policy && Objects.equals(this.bindings, ((Policy) obj).bindings)
360+
&& Objects.equals(this.etag, ((Policy) obj).etag)
361+
&& Objects.equals(this.version, ((Policy) obj).version);
362+
}
363+
364+
com.google.api.services.cloudresourcemanager.model.Policy toPb() {
365+
com.google.api.services.cloudresourcemanager.model.Policy policyPb =
366+
new com.google.api.services.cloudresourcemanager.model.Policy();
367+
List<com.google.api.services.cloudresourcemanager.model.Binding> bindingsPb = new ArrayList<>();
368+
for (Binding binding : bindings) {
369+
bindingsPb.add(binding.toPb());
370+
}
371+
policyPb.setBindings(bindingsPb);
372+
policyPb.setVersion(version);
373+
policyPb.setEtag(etag);
374+
return policyPb;
375+
}
376+
377+
static Policy fromPb(com.google.api.services.cloudresourcemanager.model.Policy policyPb) {
378+
Builder policyBuilder = Policy.builder();
379+
if (policyPb.getBindings() != null) {
380+
for (com.google.api.services.cloudresourcemanager.model.Binding bindingPb :
381+
policyPb.getBindings()) {
382+
policyBuilder.addBinding(Binding.fromPb(bindingPb));
383+
}
384+
}
385+
policyBuilder.version(policyPb.getVersion());
386+
policyBuilder.etag(policyPb.getEtag());
387+
return policyBuilder.build();
388+
}
389+
}

0 commit comments

Comments
 (0)