acl_bindings.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package sarama
  2. type Resource struct {
  3. ResourceType AclResourceType
  4. ResourceName string
  5. ResoucePatternType AclResourcePatternType
  6. }
  7. func (r *Resource) encode(pe packetEncoder, version int16) error {
  8. pe.putInt8(int8(r.ResourceType))
  9. if err := pe.putString(r.ResourceName); err != nil {
  10. return err
  11. }
  12. if version == 1 {
  13. if r.ResoucePatternType == AclPatternUnknown {
  14. Logger.Print("Cannot encode an unknown resource pattern type, using Literal instead")
  15. r.ResoucePatternType = AclPatternLiteral
  16. }
  17. pe.putInt8(int8(r.ResoucePatternType))
  18. }
  19. return nil
  20. }
  21. func (r *Resource) decode(pd packetDecoder, version int16) (err error) {
  22. resourceType, err := pd.getInt8()
  23. if err != nil {
  24. return err
  25. }
  26. r.ResourceType = AclResourceType(resourceType)
  27. if r.ResourceName, err = pd.getString(); err != nil {
  28. return err
  29. }
  30. if version == 1 {
  31. pattern, err := pd.getInt8()
  32. if err != nil {
  33. return err
  34. }
  35. r.ResoucePatternType = AclResourcePatternType(pattern)
  36. }
  37. return nil
  38. }
  39. type Acl struct {
  40. Principal string
  41. Host string
  42. Operation AclOperation
  43. PermissionType AclPermissionType
  44. }
  45. func (a *Acl) encode(pe packetEncoder) error {
  46. if err := pe.putString(a.Principal); err != nil {
  47. return err
  48. }
  49. if err := pe.putString(a.Host); err != nil {
  50. return err
  51. }
  52. pe.putInt8(int8(a.Operation))
  53. pe.putInt8(int8(a.PermissionType))
  54. return nil
  55. }
  56. func (a *Acl) decode(pd packetDecoder, version int16) (err error) {
  57. if a.Principal, err = pd.getString(); err != nil {
  58. return err
  59. }
  60. if a.Host, err = pd.getString(); err != nil {
  61. return err
  62. }
  63. operation, err := pd.getInt8()
  64. if err != nil {
  65. return err
  66. }
  67. a.Operation = AclOperation(operation)
  68. permissionType, err := pd.getInt8()
  69. if err != nil {
  70. return err
  71. }
  72. a.PermissionType = AclPermissionType(permissionType)
  73. return nil
  74. }
  75. type ResourceAcls struct {
  76. Resource
  77. Acls []*Acl
  78. }
  79. func (r *ResourceAcls) encode(pe packetEncoder, version int16) error {
  80. if err := r.Resource.encode(pe, version); err != nil {
  81. return err
  82. }
  83. if err := pe.putArrayLength(len(r.Acls)); err != nil {
  84. return err
  85. }
  86. for _, acl := range r.Acls {
  87. if err := acl.encode(pe); err != nil {
  88. return err
  89. }
  90. }
  91. return nil
  92. }
  93. func (r *ResourceAcls) decode(pd packetDecoder, version int16) error {
  94. if err := r.Resource.decode(pd, version); err != nil {
  95. return err
  96. }
  97. n, err := pd.getArrayLength()
  98. if err != nil {
  99. return err
  100. }
  101. r.Acls = make([]*Acl, n)
  102. for i := 0; i < n; i++ {
  103. r.Acls[i] = new(Acl)
  104. if err := r.Acls[i].decode(pd, version); err != nil {
  105. return err
  106. }
  107. }
  108. return nil
  109. }