storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/event/name.go (about) 1 /* 2 * MinIO Cloud Storage, (C) 2018 MinIO, Inc. 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 event 18 19 import ( 20 "encoding/json" 21 "encoding/xml" 22 ) 23 24 // Name - event type enum. 25 // Refer http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html#notification-how-to-event-types-and-destinations 26 // for most basic values we have since extend this and its not really much applicable other than a reference point. 27 // "s3:Replication:OperationCompletedReplication" is a MinIO extension. 28 type Name int 29 30 // Values of event Name 31 const ( 32 ObjectAccessedAll Name = 1 + iota 33 ObjectAccessedGet 34 ObjectAccessedGetRetention 35 ObjectAccessedGetLegalHold 36 ObjectAccessedHead 37 ObjectCreatedAll 38 ObjectCreatedCompleteMultipartUpload 39 ObjectCreatedCopy 40 ObjectCreatedPost 41 ObjectCreatedPut 42 ObjectCreatedPutRetention 43 ObjectCreatedPutLegalHold 44 ObjectCreatedPutTagging 45 ObjectCreatedDeleteTagging 46 ObjectRemovedAll 47 ObjectRemovedDelete 48 ObjectRemovedDeleteMarkerCreated 49 BucketCreated 50 BucketRemoved 51 ObjectReplicationAll 52 ObjectReplicationFailed 53 ObjectReplicationComplete 54 ObjectReplicationMissedThreshold 55 ObjectReplicationReplicatedAfterThreshold 56 ObjectReplicationNotTracked 57 ObjectRestorePostInitiated 58 ObjectRestorePostCompleted 59 ObjectRestorePostAll 60 ObjectTransitionAll 61 ObjectTransitionFailed 62 ObjectTransitionComplete 63 ) 64 65 // Expand - returns expanded values of abbreviated event type. 66 func (name Name) Expand() []Name { 67 switch name { 68 case BucketCreated: 69 return []Name{BucketCreated} 70 case BucketRemoved: 71 return []Name{BucketRemoved} 72 case ObjectAccessedAll: 73 return []Name{ 74 ObjectAccessedGet, ObjectAccessedHead, 75 ObjectAccessedGetRetention, ObjectAccessedGetLegalHold, 76 } 77 case ObjectCreatedAll: 78 return []Name{ 79 ObjectCreatedCompleteMultipartUpload, ObjectCreatedCopy, 80 ObjectCreatedPost, ObjectCreatedPut, 81 ObjectCreatedPutRetention, ObjectCreatedPutLegalHold, 82 ObjectCreatedPutTagging, ObjectCreatedDeleteTagging, 83 } 84 case ObjectRemovedAll: 85 return []Name{ 86 ObjectRemovedDelete, 87 ObjectRemovedDeleteMarkerCreated, 88 } 89 case ObjectReplicationAll: 90 return []Name{ 91 ObjectReplicationFailed, 92 ObjectReplicationComplete, 93 ObjectReplicationNotTracked, 94 ObjectReplicationMissedThreshold, 95 ObjectReplicationReplicatedAfterThreshold, 96 } 97 case ObjectRestorePostAll: 98 return []Name{ 99 ObjectRestorePostInitiated, 100 ObjectRestorePostCompleted, 101 } 102 case ObjectTransitionAll: 103 return []Name{ 104 ObjectTransitionFailed, 105 ObjectTransitionComplete, 106 } 107 default: 108 return []Name{name} 109 } 110 } 111 112 // String - returns string representation of event type. 113 func (name Name) String() string { 114 switch name { 115 case BucketCreated: 116 return "s3:BucketCreated:*" 117 case BucketRemoved: 118 return "s3:BucketRemoved:*" 119 case ObjectAccessedAll: 120 return "s3:ObjectAccessed:*" 121 case ObjectAccessedGet: 122 return "s3:ObjectAccessed:Get" 123 case ObjectAccessedGetRetention: 124 return "s3:ObjectAccessed:GetRetention" 125 case ObjectAccessedGetLegalHold: 126 return "s3:ObjectAccessed:GetLegalHold" 127 case ObjectAccessedHead: 128 return "s3:ObjectAccessed:Head" 129 case ObjectCreatedAll: 130 return "s3:ObjectCreated:*" 131 case ObjectCreatedCompleteMultipartUpload: 132 return "s3:ObjectCreated:CompleteMultipartUpload" 133 case ObjectCreatedCopy: 134 return "s3:ObjectCreated:Copy" 135 case ObjectCreatedPost: 136 return "s3:ObjectCreated:Post" 137 case ObjectCreatedPut: 138 return "s3:ObjectCreated:Put" 139 case ObjectCreatedPutTagging: 140 return "s3:ObjectCreated:PutTagging" 141 case ObjectCreatedDeleteTagging: 142 return "s3:ObjectCreated:DeleteTagging" 143 case ObjectCreatedPutRetention: 144 return "s3:ObjectCreated:PutRetention" 145 case ObjectCreatedPutLegalHold: 146 return "s3:ObjectCreated:PutLegalHold" 147 case ObjectRemovedAll: 148 return "s3:ObjectRemoved:*" 149 case ObjectRemovedDelete: 150 return "s3:ObjectRemoved:Delete" 151 case ObjectRemovedDeleteMarkerCreated: 152 return "s3:ObjectRemoved:DeleteMarkerCreated" 153 case ObjectReplicationAll: 154 return "s3:Replication:*" 155 case ObjectReplicationFailed: 156 return "s3:Replication:OperationFailedReplication" 157 case ObjectReplicationComplete: 158 return "s3:Replication:OperationCompletedReplication" 159 case ObjectReplicationNotTracked: 160 return "s3:Replication:OperationNotTracked" 161 case ObjectReplicationMissedThreshold: 162 return "s3:Replication:OperationMissedThreshold" 163 case ObjectReplicationReplicatedAfterThreshold: 164 return "s3:Replication:OperationReplicatedAfterThreshold" 165 case ObjectRestorePostInitiated: 166 return "s3:ObjectRestore:Post" 167 case ObjectRestorePostCompleted: 168 return "s3:ObjectRestore:Completed" 169 case ObjectTransitionAll: 170 return "s3:ObjectTransition:*" 171 case ObjectTransitionFailed: 172 return "s3:ObjectTransition:Failed" 173 case ObjectTransitionComplete: 174 return "s3:ObjectTransition:Complete" 175 } 176 177 return "" 178 } 179 180 // MarshalXML - encodes to XML data. 181 func (name Name) MarshalXML(e *xml.Encoder, start xml.StartElement) error { 182 return e.EncodeElement(name.String(), start) 183 } 184 185 // UnmarshalXML - decodes XML data. 186 func (name *Name) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { 187 var s string 188 if err := d.DecodeElement(&s, &start); err != nil { 189 return err 190 } 191 192 eventName, err := ParseName(s) 193 if err != nil { 194 return err 195 } 196 197 *name = eventName 198 return nil 199 } 200 201 // MarshalJSON - encodes to JSON data. 202 func (name Name) MarshalJSON() ([]byte, error) { 203 return json.Marshal(name.String()) 204 } 205 206 // UnmarshalJSON - decodes JSON data. 207 func (name *Name) UnmarshalJSON(data []byte) error { 208 var s string 209 if err := json.Unmarshal(data, &s); err != nil { 210 return err 211 } 212 213 eventName, err := ParseName(s) 214 if err != nil { 215 return err 216 } 217 218 *name = eventName 219 return nil 220 } 221 222 // ParseName - parses string to Name. 223 func ParseName(s string) (Name, error) { 224 switch s { 225 case "s3:BucketCreated:*": 226 return BucketCreated, nil 227 case "s3:BucketRemoved:*": 228 return BucketRemoved, nil 229 case "s3:ObjectAccessed:*": 230 return ObjectAccessedAll, nil 231 case "s3:ObjectAccessed:Get": 232 return ObjectAccessedGet, nil 233 case "s3:ObjectAccessed:GetRetention": 234 return ObjectAccessedGetRetention, nil 235 case "s3:ObjectAccessed:GetLegalHold": 236 return ObjectAccessedGetLegalHold, nil 237 case "s3:ObjectAccessed:Head": 238 return ObjectAccessedHead, nil 239 case "s3:ObjectCreated:*": 240 return ObjectCreatedAll, nil 241 case "s3:ObjectCreated:CompleteMultipartUpload": 242 return ObjectCreatedCompleteMultipartUpload, nil 243 case "s3:ObjectCreated:Copy": 244 return ObjectCreatedCopy, nil 245 case "s3:ObjectCreated:Post": 246 return ObjectCreatedPost, nil 247 case "s3:ObjectCreated:Put": 248 return ObjectCreatedPut, nil 249 case "s3:ObjectCreated:PutRetention": 250 return ObjectCreatedPutRetention, nil 251 case "s3:ObjectCreated:PutLegalHold": 252 return ObjectCreatedPutLegalHold, nil 253 case "s3:ObjectCreated:PutTagging": 254 return ObjectCreatedPutTagging, nil 255 case "s3:ObjectCreated:DeleteTagging": 256 return ObjectCreatedDeleteTagging, nil 257 case "s3:ObjectRemoved:*": 258 return ObjectRemovedAll, nil 259 case "s3:ObjectRemoved:Delete": 260 return ObjectRemovedDelete, nil 261 case "s3:ObjectRemoved:DeleteMarkerCreated": 262 return ObjectRemovedDeleteMarkerCreated, nil 263 case "s3:Replication:*": 264 return ObjectReplicationAll, nil 265 case "s3:Replication:OperationFailedReplication": 266 return ObjectReplicationFailed, nil 267 case "s3:Replication:OperationCompletedReplication": 268 return ObjectReplicationComplete, nil 269 case "s3:Replication:OperationMissedThreshold": 270 return ObjectReplicationMissedThreshold, nil 271 case "s3:Replication:OperationReplicatedAfterThreshold": 272 return ObjectReplicationReplicatedAfterThreshold, nil 273 case "s3:Replication:OperationNotTracked": 274 return ObjectReplicationNotTracked, nil 275 case "s3:ObjectRestore:*": 276 return ObjectRestorePostAll, nil 277 case "s3:ObjectRestore:Post": 278 return ObjectRestorePostInitiated, nil 279 case "s3:ObjectRestore:Completed": 280 return ObjectRestorePostCompleted, nil 281 case "s3:ObjectTransition:Failed": 282 return ObjectTransitionFailed, nil 283 case "s3:ObjectTransition:Complete": 284 return ObjectTransitionComplete, nil 285 case "s3:ObjectTransition:*": 286 return ObjectTransitionAll, nil 287 default: 288 return 0, &ErrInvalidEventName{s} 289 } 290 }