-
Notifications
You must be signed in to change notification settings - Fork 113
/
sharing.go
233 lines (206 loc) · 6.73 KB
/
sharing.go
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
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
// Copyright 2018-2021 CERN
//
// 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.
//
// In applying this license, CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
package events
import (
"encoding/json"
"time"
group "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1"
user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
collaboration "github.com/cs3org/go-cs3apis/cs3/sharing/collaboration/v1beta1"
link "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1"
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
)
// ShareCreated is emitted when a share is created
type ShareCreated struct {
ShareID *collaboration.ShareId
Executant *user.UserId
Sharer *user.UserId
// split the protobuf Grantee oneof so we can use stdlib encoding/json
GranteeUserID *user.UserId
GranteeGroupID *group.GroupId
Sharee *provider.Grantee
ItemID *provider.ResourceId
Permissions *collaboration.SharePermissions
CTime *types.Timestamp
}
// Unmarshal to fulfill umarshaller interface
func (ShareCreated) Unmarshal(v []byte) (interface{}, error) {
e := ShareCreated{}
err := json.Unmarshal(v, &e)
return e, err
}
// ShareRemoved is emitted when a share is removed
type ShareRemoved struct {
Executant *user.UserId
// split protobuf Spec
ShareID *collaboration.ShareId
ShareKey *collaboration.ShareKey
// split the protobuf Grantee oneof so we can use stdlib encoding/json
GranteeUserID *user.UserId
GranteeGroupID *group.GroupId
ItemID *provider.ResourceId
Timestamp time.Time
}
// Unmarshal to fulfill umarshaller interface
func (ShareRemoved) Unmarshal(v []byte) (interface{}, error) {
e := ShareRemoved{}
err := json.Unmarshal(v, &e)
return e, err
}
// ShareUpdated is emitted when a share is updated
type ShareUpdated struct {
Executant *user.UserId
ShareID *collaboration.ShareId
ItemID *provider.ResourceId
Permissions *collaboration.SharePermissions
GranteeUserID *user.UserId
GranteeGroupID *group.GroupId
Sharer *user.UserId
MTime *types.Timestamp
// indicates what was updated - one of "displayname", "permissions"
Updated string
}
// Unmarshal to fulfill umarshaller interface
func (ShareUpdated) Unmarshal(v []byte) (interface{}, error) {
e := ShareUpdated{}
err := json.Unmarshal(v, &e)
return e, err
}
// ShareExpired is emitted when a share expires
type ShareExpired struct {
ShareID *collaboration.ShareId
ShareOwner *user.UserId
ItemID *provider.ResourceId
ExpiredAt time.Time
// split the protobuf Grantee oneof so we can use stdlib encoding/json
GranteeUserID *user.UserId
GranteeGroupID *group.GroupId
}
// Unmarshal to fulfill umarshaller interface
func (ShareExpired) Unmarshal(v []byte) (interface{}, error) {
e := ShareExpired{}
err := json.Unmarshal(v, &e)
return e, err
}
// ReceivedShareUpdated is emitted when a received share is accepted or declined
type ReceivedShareUpdated struct {
Executant *user.UserId
ShareID *collaboration.ShareId
ItemID *provider.ResourceId
Permissions *collaboration.SharePermissions
GranteeUserID *user.UserId
GranteeGroupID *group.GroupId
Sharer *user.UserId
MTime *types.Timestamp
State string
}
// Unmarshal to fulfill umarshaller interface
func (ReceivedShareUpdated) Unmarshal(v []byte) (interface{}, error) {
e := ReceivedShareUpdated{}
err := json.Unmarshal(v, &e)
return e, err
}
// LinkCreated is emitted when a public link is created
type LinkCreated struct {
Executant *user.UserId
ShareID *link.PublicShareId
Sharer *user.UserId
ItemID *provider.ResourceId
Permissions *link.PublicSharePermissions
DisplayName string
Expiration *types.Timestamp
PasswordProtected bool
CTime *types.Timestamp
Token string
}
// Unmarshal to fulfill umarshaller interface
func (LinkCreated) Unmarshal(v []byte) (interface{}, error) {
e := LinkCreated{}
err := json.Unmarshal(v, &e)
return e, err
}
// LinkUpdated is emitted when a public link is updated
type LinkUpdated struct {
Executant *user.UserId
ShareID *link.PublicShareId
Sharer *user.UserId
ItemID *provider.ResourceId
Permissions *link.PublicSharePermissions
DisplayName string
Expiration *types.Timestamp
PasswordProtected bool
CTime *types.Timestamp
Token string
FieldUpdated string
}
// Unmarshal to fulfill umarshaller interface
func (LinkUpdated) Unmarshal(v []byte) (interface{}, error) {
e := LinkUpdated{}
err := json.Unmarshal(v, &e)
return e, err
}
// LinkAccessed is emitted when a public link is accessed successfully (by token)
type LinkAccessed struct {
Executant *user.UserId
ShareID *link.PublicShareId
Sharer *user.UserId
ItemID *provider.ResourceId
Permissions *link.PublicSharePermissions
DisplayName string
Expiration *types.Timestamp
PasswordProtected bool
CTime *types.Timestamp
Token string
}
// Unmarshal to fulfill umarshaller interface
func (LinkAccessed) Unmarshal(v []byte) (interface{}, error) {
e := LinkAccessed{}
err := json.Unmarshal(v, &e)
return e, err
}
// LinkAccessFailed is emitted when an access to a public link has resulted in an error (by token)
type LinkAccessFailed struct {
Executant *user.UserId
ShareID *link.PublicShareId
Token string
Status rpc.Code
Message string
Timestamp *types.Timestamp
}
// Unmarshal to fulfill umarshaller interface
func (LinkAccessFailed) Unmarshal(v []byte) (interface{}, error) {
e := LinkAccessFailed{}
err := json.Unmarshal(v, &e)
return e, err
}
// LinkRemoved is emitted when a share is removed
type LinkRemoved struct {
Executant *user.UserId
// split protobuf Ref
ShareID *link.PublicShareId
ShareToken string
Timestamp *types.Timestamp
}
// Unmarshal to fulfill umarshaller interface
func (LinkRemoved) Unmarshal(v []byte) (interface{}, error) {
e := LinkRemoved{}
err := json.Unmarshal(v, &e)
return e, err
}