github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/acl/convert.go (about) 1 package acl 2 3 import ( 4 acl "github.com/TrueCloudLab/frostfs-api-go/v2/acl/grpc" 5 "github.com/TrueCloudLab/frostfs-api-go/v2/refs" 6 refsGRPC "github.com/TrueCloudLab/frostfs-api-go/v2/refs/grpc" 7 "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/grpc" 8 "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/message" 9 ) 10 11 // RoleToGRPCField converts unified role enum into grpc enum. 12 func RoleToGRPCField(t Role) acl.Role { 13 switch t { 14 case RoleUser: 15 return acl.Role_USER 16 case RoleSystem: 17 return acl.Role_SYSTEM 18 case RoleOthers: 19 return acl.Role_OTHERS 20 default: 21 return acl.Role_ROLE_UNSPECIFIED 22 } 23 } 24 25 // RoleFromGRPCField converts grpc enum into unified role enum. 26 func RoleFromGRPCField(t acl.Role) Role { 27 switch t { 28 case acl.Role_USER: 29 return RoleUser 30 case acl.Role_SYSTEM: 31 return RoleSystem 32 case acl.Role_OTHERS: 33 return RoleOthers 34 default: 35 return RoleUnknown 36 } 37 } 38 39 // OperationToGRPCField converts unified operation enum into grpc enum. 40 func OperationToGRPCField(t Operation) acl.Operation { 41 switch t { 42 case OperationPut: 43 return acl.Operation_PUT 44 case OperationDelete: 45 return acl.Operation_DELETE 46 case OperationGet: 47 return acl.Operation_GET 48 case OperationHead: 49 return acl.Operation_HEAD 50 case OperationSearch: 51 return acl.Operation_SEARCH 52 case OperationRange: 53 return acl.Operation_GETRANGE 54 case OperationRangeHash: 55 return acl.Operation_GETRANGEHASH 56 default: 57 return acl.Operation_OPERATION_UNSPECIFIED 58 } 59 } 60 61 // OperationFromGRPCField converts grpc enum into unified operation enum. 62 func OperationFromGRPCField(t acl.Operation) Operation { 63 switch t { 64 case acl.Operation_PUT: 65 return OperationPut 66 case acl.Operation_DELETE: 67 return OperationDelete 68 case acl.Operation_GET: 69 return OperationGet 70 case acl.Operation_HEAD: 71 return OperationHead 72 case acl.Operation_SEARCH: 73 return OperationSearch 74 case acl.Operation_GETRANGE: 75 return OperationRange 76 case acl.Operation_GETRANGEHASH: 77 return OperationRangeHash 78 default: 79 return OperationUnknown 80 } 81 } 82 83 // ActionToGRPCField converts unified action enum into grpc enum. 84 func ActionToGRPCField(t Action) acl.Action { 85 switch t { 86 case ActionDeny: 87 return acl.Action_DENY 88 case ActionAllow: 89 return acl.Action_ALLOW 90 default: 91 return acl.Action_ACTION_UNSPECIFIED 92 } 93 } 94 95 // ActionFromGRPCField converts grpc enum into unified action enum. 96 func ActionFromGRPCField(t acl.Action) Action { 97 switch t { 98 case acl.Action_DENY: 99 return ActionDeny 100 case acl.Action_ALLOW: 101 return ActionAllow 102 default: 103 return ActionUnknown 104 } 105 } 106 107 // HeaderTypeToGRPCField converts unified header type enum into grpc enum. 108 func HeaderTypeToGRPCField(t HeaderType) acl.HeaderType { 109 switch t { 110 case HeaderTypeRequest: 111 return acl.HeaderType_REQUEST 112 case HeaderTypeObject: 113 return acl.HeaderType_OBJECT 114 case HeaderTypeService: 115 return acl.HeaderType_SERVICE 116 default: 117 return acl.HeaderType_HEADER_UNSPECIFIED 118 } 119 } 120 121 // HeaderTypeFromGRPCField converts grpc enum into unified header type enum. 122 func HeaderTypeFromGRPCField(t acl.HeaderType) HeaderType { 123 switch t { 124 case acl.HeaderType_REQUEST: 125 return HeaderTypeRequest 126 case acl.HeaderType_OBJECT: 127 return HeaderTypeObject 128 case acl.HeaderType_SERVICE: 129 return HeaderTypeService 130 default: 131 return HeaderTypeUnknown 132 } 133 } 134 135 // MatchTypeToGRPCField converts unified match type enum into grpc enum. 136 func MatchTypeToGRPCField(t MatchType) acl.MatchType { 137 switch t { 138 case MatchTypeStringEqual: 139 return acl.MatchType_STRING_EQUAL 140 case MatchTypeStringNotEqual: 141 return acl.MatchType_STRING_NOT_EQUAL 142 default: 143 return acl.MatchType_MATCH_TYPE_UNSPECIFIED 144 } 145 } 146 147 // MatchTypeFromGRPCField converts grpc enum into unified match type enum. 148 func MatchTypeFromGRPCField(t acl.MatchType) MatchType { 149 switch t { 150 case acl.MatchType_STRING_EQUAL: 151 return MatchTypeStringEqual 152 case acl.MatchType_STRING_NOT_EQUAL: 153 return MatchTypeStringNotEqual 154 default: 155 return MatchTypeUnknown 156 } 157 } 158 159 func (f *HeaderFilter) ToGRPCMessage() grpc.Message { 160 var m *acl.EACLRecord_Filter 161 162 if f != nil { 163 m = new(acl.EACLRecord_Filter) 164 165 m.SetKey(f.key) 166 m.SetValue(f.value) 167 m.SetHeader(HeaderTypeToGRPCField(f.hdrType)) 168 m.SetMatchType(MatchTypeToGRPCField(f.matchType)) 169 } 170 171 return m 172 } 173 174 func (f *HeaderFilter) FromGRPCMessage(m grpc.Message) error { 175 v, ok := m.(*acl.EACLRecord_Filter) 176 if !ok { 177 return message.NewUnexpectedMessageType(m, v) 178 } 179 180 f.key = v.GetKey() 181 f.value = v.GetValue() 182 f.hdrType = HeaderTypeFromGRPCField(v.GetHeaderType()) 183 f.matchType = MatchTypeFromGRPCField(v.GetMatchType()) 184 185 return nil 186 } 187 188 func HeaderFiltersToGRPC(fs []HeaderFilter) (res []*acl.EACLRecord_Filter) { 189 if fs != nil { 190 res = make([]*acl.EACLRecord_Filter, 0, len(fs)) 191 192 for i := range fs { 193 res = append(res, fs[i].ToGRPCMessage().(*acl.EACLRecord_Filter)) 194 } 195 } 196 197 return 198 } 199 200 func HeaderFiltersFromGRPC(fs []*acl.EACLRecord_Filter) (res []HeaderFilter, err error) { 201 if fs != nil { 202 res = make([]HeaderFilter, len(fs)) 203 204 for i := range fs { 205 if fs[i] != nil { 206 err = res[i].FromGRPCMessage(fs[i]) 207 if err != nil { 208 return 209 } 210 } 211 } 212 } 213 214 return 215 } 216 217 func (t *Target) ToGRPCMessage() grpc.Message { 218 var m *acl.EACLRecord_Target 219 220 if t != nil { 221 m = new(acl.EACLRecord_Target) 222 223 m.SetRole(RoleToGRPCField(t.role)) 224 m.SetKeys(t.keys) 225 } 226 227 return m 228 } 229 230 func (t *Target) FromGRPCMessage(m grpc.Message) error { 231 v, ok := m.(*acl.EACLRecord_Target) 232 if !ok { 233 return message.NewUnexpectedMessageType(m, v) 234 } 235 236 t.role = RoleFromGRPCField(v.GetRole()) 237 t.keys = v.GetKeys() 238 239 return nil 240 } 241 242 func TargetsToGRPC(ts []Target) (res []*acl.EACLRecord_Target) { 243 if ts != nil { 244 res = make([]*acl.EACLRecord_Target, 0, len(ts)) 245 246 for i := range ts { 247 res = append(res, ts[i].ToGRPCMessage().(*acl.EACLRecord_Target)) 248 } 249 } 250 251 return 252 } 253 254 func TargetsFromGRPC(fs []*acl.EACLRecord_Target) (res []Target, err error) { 255 if fs != nil { 256 res = make([]Target, len(fs)) 257 258 for i := range fs { 259 if fs[i] != nil { 260 err = res[i].FromGRPCMessage(fs[i]) 261 if err != nil { 262 return 263 } 264 } 265 } 266 } 267 268 return 269 } 270 271 func (r *Record) ToGRPCMessage() grpc.Message { 272 var m *acl.EACLRecord 273 274 if r != nil { 275 m = new(acl.EACLRecord) 276 277 m.SetOperation(OperationToGRPCField(r.op)) 278 m.SetAction(ActionToGRPCField(r.action)) 279 m.SetFilters(HeaderFiltersToGRPC(r.filters)) 280 m.SetTargets(TargetsToGRPC(r.targets)) 281 } 282 283 return m 284 } 285 286 func (r *Record) FromGRPCMessage(m grpc.Message) error { 287 v, ok := m.(*acl.EACLRecord) 288 if !ok { 289 return message.NewUnexpectedMessageType(m, v) 290 } 291 292 var err error 293 294 r.filters, err = HeaderFiltersFromGRPC(v.GetFilters()) 295 if err != nil { 296 return err 297 } 298 299 r.targets, err = TargetsFromGRPC(v.GetTargets()) 300 if err != nil { 301 return err 302 } 303 304 r.op = OperationFromGRPCField(v.GetOperation()) 305 r.action = ActionFromGRPCField(v.GetAction()) 306 307 return nil 308 } 309 310 func RecordsToGRPC(ts []Record) (res []*acl.EACLRecord) { 311 if ts != nil { 312 res = make([]*acl.EACLRecord, 0, len(ts)) 313 314 for i := range ts { 315 res = append(res, ts[i].ToGRPCMessage().(*acl.EACLRecord)) 316 } 317 } 318 319 return 320 } 321 322 func RecordsFromGRPC(fs []*acl.EACLRecord) (res []Record, err error) { 323 if fs != nil { 324 res = make([]Record, len(fs)) 325 326 for i := range fs { 327 if fs[i] != nil { 328 err = res[i].FromGRPCMessage(fs[i]) 329 if err != nil { 330 return 331 } 332 } 333 } 334 } 335 336 return 337 } 338 339 func (t *Table) ToGRPCMessage() grpc.Message { 340 var m *acl.EACLTable 341 342 if t != nil { 343 m = new(acl.EACLTable) 344 345 m.SetVersion(t.version.ToGRPCMessage().(*refsGRPC.Version)) 346 m.SetContainerId(t.cid.ToGRPCMessage().(*refsGRPC.ContainerID)) 347 m.SetRecords(RecordsToGRPC(t.records)) 348 } 349 350 return m 351 } 352 353 func (t *Table) FromGRPCMessage(m grpc.Message) error { 354 v, ok := m.(*acl.EACLTable) 355 if !ok { 356 return message.NewUnexpectedMessageType(m, v) 357 } 358 359 var err error 360 361 cid := v.GetContainerId() 362 if cid == nil { 363 t.cid = nil 364 } else { 365 if t.cid == nil { 366 t.cid = new(refs.ContainerID) 367 } 368 369 err = t.cid.FromGRPCMessage(cid) 370 if err != nil { 371 return err 372 } 373 } 374 375 version := v.GetVersion() 376 if version == nil { 377 t.version = nil 378 } else { 379 if t.version == nil { 380 t.version = new(refs.Version) 381 } 382 383 err = t.version.FromGRPCMessage(version) 384 if err != nil { 385 return err 386 } 387 } 388 389 t.records, err = RecordsFromGRPC(v.GetRecords()) 390 391 return err 392 } 393 394 func (l *TokenLifetime) ToGRPCMessage() grpc.Message { 395 var m *acl.BearerToken_Body_TokenLifetime 396 397 if l != nil { 398 m = new(acl.BearerToken_Body_TokenLifetime) 399 400 m.SetExp(l.exp) 401 m.SetIat(l.iat) 402 m.SetNbf(l.nbf) 403 } 404 405 return m 406 } 407 408 func (l *TokenLifetime) FromGRPCMessage(m grpc.Message) error { 409 v, ok := m.(*acl.BearerToken_Body_TokenLifetime) 410 if !ok { 411 return message.NewUnexpectedMessageType(m, v) 412 } 413 414 l.exp = v.GetExp() 415 l.iat = v.GetIat() 416 l.nbf = v.GetNbf() 417 418 return nil 419 } 420 421 func (bt *BearerTokenBody) ToGRPCMessage() grpc.Message { 422 var m *acl.BearerToken_Body 423 424 if bt != nil { 425 m = new(acl.BearerToken_Body) 426 427 m.SetOwnerId(bt.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID)) 428 m.SetLifetime(bt.lifetime.ToGRPCMessage().(*acl.BearerToken_Body_TokenLifetime)) 429 m.SetEaclTable(bt.eacl.ToGRPCMessage().(*acl.EACLTable)) 430 } 431 432 return m 433 } 434 435 func (bt *BearerTokenBody) FromGRPCMessage(m grpc.Message) error { 436 v, ok := m.(*acl.BearerToken_Body) 437 if !ok { 438 return message.NewUnexpectedMessageType(m, v) 439 } 440 441 var err error 442 443 ownerID := v.GetOwnerId() 444 if ownerID == nil { 445 bt.ownerID = nil 446 } else { 447 if bt.ownerID == nil { 448 bt.ownerID = new(refs.OwnerID) 449 } 450 451 err = bt.ownerID.FromGRPCMessage(ownerID) 452 if err != nil { 453 return err 454 } 455 } 456 457 lifetime := v.GetLifetime() 458 if lifetime == nil { 459 bt.lifetime = nil 460 } else { 461 if bt.lifetime == nil { 462 bt.lifetime = new(TokenLifetime) 463 } 464 465 err = bt.lifetime.FromGRPCMessage(lifetime) 466 if err != nil { 467 return err 468 } 469 } 470 471 eacl := v.GetEaclTable() 472 if eacl == nil { 473 bt.eacl = nil 474 } else { 475 if bt.eacl == nil { 476 bt.eacl = new(Table) 477 } 478 479 err = bt.eacl.FromGRPCMessage(eacl) 480 } 481 482 return err 483 } 484 485 func (bt *BearerToken) ToGRPCMessage() grpc.Message { 486 var m *acl.BearerToken 487 488 if bt != nil { 489 m = new(acl.BearerToken) 490 491 m.SetBody(bt.body.ToGRPCMessage().(*acl.BearerToken_Body)) 492 m.SetSignature(bt.sig.ToGRPCMessage().(*refsGRPC.Signature)) 493 } 494 495 return m 496 } 497 498 func (bt *BearerToken) FromGRPCMessage(m grpc.Message) error { 499 v, ok := m.(*acl.BearerToken) 500 if !ok { 501 return message.NewUnexpectedMessageType(m, v) 502 } 503 504 var err error 505 506 body := v.GetBody() 507 if body == nil { 508 bt.body = nil 509 } else { 510 if bt.body == nil { 511 bt.body = new(BearerTokenBody) 512 } 513 514 err = bt.body.FromGRPCMessage(body) 515 if err != nil { 516 return err 517 } 518 } 519 520 sig := v.GetSignature() 521 if sig == nil { 522 bt.sig = nil 523 } else { 524 if bt.sig == nil { 525 bt.sig = new(refs.Signature) 526 } 527 528 err = bt.sig.FromGRPCMessage(sig) 529 } 530 531 return err 532 }