-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathzz_generated_permission.go
More file actions
143 lines (117 loc) · 4.34 KB
/
Copy pathzz_generated_permission.go
File metadata and controls
143 lines (117 loc) · 4.34 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
// Code generated by github.com/bennerv/go-cosmosdb, DO NOT EDIT.
package cosmosdb
import (
"context"
"net/http"
)
// Permission represents a permission
type Permission struct {
ID string `json:"id,omitempty"`
ResourceID string `json:"_rid,omitempty"`
Timestamp int `json:"_ts,omitempty"`
Self string `json:"_self,omitempty"`
ETag string `json:"_etag,omitempty"`
Token string `json:"_token,omitempty"`
PermissionMode PermissionMode `json:"permissionMode,omitempty"`
Resource string `json:"resource,omitempty"`
}
// PermissionMode represents a permission mode
type PermissionMode string
// PermissionMode constants
const (
PermissionModeAll PermissionMode = "All"
PermissionModeRead PermissionMode = "Read"
)
// Permissions represents permissions
type Permissions struct {
Count int `json:"_count,omitempty"`
ResourceID string `json:"_rid,omitempty"`
Permissions []*Permission `json:"Permissions,omitempty"`
}
type permissionClient struct {
*databaseClient
path string
}
// PermissionClient is a permission client
type PermissionClient interface {
Create(context.Context, *Permission) (*Permission, error)
List() PermissionIterator
ListAll(context.Context) (*Permissions, error)
Get(context.Context, string) (*Permission, error)
Delete(context.Context, *Permission) error
Replace(context.Context, *Permission) (*Permission, error)
}
type permissionListIterator struct {
*permissionClient
continuation string
done bool
}
// PermissionIterator is a permission iterator
type PermissionIterator interface {
Next(context.Context) (*Permissions, error)
}
// NewPermissionClient returns a new permission client
func NewPermissionClient(userc UserClient, userid string) PermissionClient {
return &permissionClient{
databaseClient: userc.(*userClient).databaseClient,
path: userc.(*userClient).path + "/users/" + userid,
}
}
func (c *permissionClient) all(ctx context.Context, i PermissionIterator) (*Permissions, error) {
allpermissions := &Permissions{}
for {
permissions, err := i.Next(ctx)
if err != nil {
return nil, err
}
if permissions == nil {
break
}
allpermissions.Count += permissions.Count
allpermissions.ResourceID = permissions.ResourceID
allpermissions.Permissions = append(allpermissions.Permissions, permissions.Permissions...)
}
return allpermissions, nil
}
func (c *permissionClient) Create(ctx context.Context, newpermission *Permission) (permission *Permission, err error) {
err = c.do(ctx, http.MethodPost, c.path+"/permissions", "permissions", c.path, http.StatusCreated, &newpermission, &permission, nil)
return
}
func (c *permissionClient) List() PermissionIterator {
return &permissionListIterator{permissionClient: c}
}
func (c *permissionClient) ListAll(ctx context.Context) (*Permissions, error) {
return c.all(ctx, c.List())
}
func (c *permissionClient) Get(ctx context.Context, permissionid string) (permission *Permission, err error) {
err = c.do(ctx, http.MethodGet, c.path+"/permissions/"+permissionid, "permissions", c.path+"/permissions/"+permissionid, http.StatusOK, nil, &permission, nil)
return
}
func (c *permissionClient) Delete(ctx context.Context, permission *Permission) error {
if permission.ETag == "" {
return ErrETagRequired
}
headers := http.Header{}
headers.Set("If-Match", permission.ETag)
return c.do(ctx, http.MethodDelete, c.path+"/permissions/"+permission.ID, "permissions", c.path+"/permissions/"+permission.ID, http.StatusNoContent, nil, nil, headers)
}
func (c *permissionClient) Replace(ctx context.Context, newpermission *Permission) (permission *Permission, err error) {
err = c.do(ctx, http.MethodPost, c.path+"/permissions/"+newpermission.ID, "permissions", c.path+"/permissions/"+newpermission.ID, http.StatusCreated, &newpermission, &permission, nil)
return
}
func (i *permissionListIterator) Next(ctx context.Context) (permissions *Permissions, err error) {
if i.done {
return
}
headers := http.Header{}
if i.continuation != "" {
headers.Set("X-Ms-Continuation", i.continuation)
}
err = i.do(ctx, http.MethodGet, i.path+"/permissions", "permissions", i.path, http.StatusOK, nil, &permissions, headers)
if err != nil {
return
}
i.continuation = headers.Get("X-Ms-Continuation")
i.done = i.continuation == ""
return
}