Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Side by Side Diff: go/src/infra/tools/cipd/acl.go

Issue 1129043003: cipd: Refactor client to make it more readable. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | go/src/infra/tools/cipd/apps/cipd/main.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package cipd
6
7 import (
8 "net/http"
9 "time"
10
11 "infra/libs/logging"
12 )
13
14 // PackageACLChangeAction defines a flavor of PackageACLChange.
15 type PackageACLChangeAction string
16
17 const (
18 // GrantRole is used in PackageACLChange to request a role to be granted .
19 GrantRole PackageACLChangeAction = "GRANT"
20 // RevokeRole is used in PackageACLChange to request a role to be revoke d.
21 RevokeRole PackageACLChangeAction = "REVOKE"
22 )
23
24 // PackageACL is per package path per role access control list that is a part of
25 // larger overall ACL: ACL for package "a/b/c" is a union of PackageACLs for "a"
26 // "a/b" and "a/b/c".
27 type PackageACL struct {
28 // PackagePath is a package subpath this ACL is defined for.
29 PackagePath string
30 // Role is a role that listed users have, e.g. 'READER', 'WRITER', ...
31 Role string
32 // Principals list users and groups granted the role.
33 Principals []string
34 // ModifiedBy specifies who modified the list the last time.
35 ModifiedBy string
36 // ModifiedTs is a timestamp when the list was modified the last time.
37 ModifiedTs time.Time
38 }
39
40 // ACLOptions contains parameters shared by FetchACL and ModifyACL functions.
41 type ACLOptions struct {
42 // ServiceURL is root URL of the backend service, or "" to use default s ervice.
43 ServiceURL string
44 // Client is http.Client to use to make requests, default is http.Defaul tClient.
45 Client *http.Client
46 // Log is a logger to use for logs, default is logging.DefaultLogger.
47 Log logging.Logger
48 // PackagePath is a package subpath to fetch or modify ACLs for.
49 PackagePath string
50 }
51
52 // FetchACLOptions contains parameters for FetchACL function.
53 type FetchACLOptions struct {
54 ACLOptions
55 }
56
57 // FetchACL returns a list of PackageACL objects (parent paths first) that
58 // together define access control list for given package subpath.
59 func FetchACL(options FetchACLOptions) ([]PackageACL, error) {
60 // Fill in default options.
61 if options.ServiceURL == "" {
62 options.ServiceURL = DefaultServiceURL()
63 }
64 if options.Client == nil {
65 options.Client = http.DefaultClient
66 }
67 if options.Log == nil {
68 options.Log = logging.DefaultLogger
69 }
70 remote := newRemoteService(options.Client, options.ServiceURL, options.L og)
71 return remote.fetchACL(options.PackagePath)
72 }
73
74 // PackageACLChange is a mutation to some package ACL.
75 type PackageACLChange struct {
76 // Action defines what action to perform: GrantRole or RevokeRole.
77 Action PackageACLChangeAction
78 // Role to grant or revoke to a user or group.
79 Role string
80 // Principal is a user or a group to grant or revoke a role for.
81 Principal string
82 }
83
84 // ModifyACLOptions contains parameters for ModifyACL function.
85 type ModifyACLOptions struct {
86 ACLOptions
87
88 // Changes defines changes to apply.
89 Changes []PackageACLChange
90 }
91
92 // ModifyACL applies a set of PackageACLChanges to a package path.
93 func ModifyACL(options ModifyACLOptions) error {
94 // Fill in default options.
95 if options.ServiceURL == "" {
96 options.ServiceURL = DefaultServiceURL()
97 }
98 if options.Client == nil {
99 options.Client = http.DefaultClient
100 }
101 if options.Log == nil {
102 options.Log = logging.DefaultLogger
103 }
104 remote := newRemoteService(options.Client, options.ServiceURL, options.L og)
105 return remote.modifyACL(options.PackagePath, options.Changes)
106 }
OLDNEW
« no previous file with comments | « no previous file | go/src/infra/tools/cipd/apps/cipd/main.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698