github.com/segmentio/kafka-go@v0.4.48-0.20240318174348-3f6244eb34fd/deleteacls.go (about) 1 package kafka 2 3 import ( 4 "context" 5 "fmt" 6 "net" 7 "time" 8 9 "github.com/segmentio/kafka-go/protocol/deleteacls" 10 ) 11 12 // DeleteACLsRequest represents a request sent to a kafka broker to delete 13 // ACLs. 14 type DeleteACLsRequest struct { 15 // Address of the kafka broker to send the request to. 16 Addr net.Addr 17 18 // List of ACL filters to use for deletion. 19 Filters []DeleteACLsFilter 20 } 21 22 type DeleteACLsFilter struct { 23 ResourceTypeFilter ResourceType 24 ResourceNameFilter string 25 ResourcePatternTypeFilter PatternType 26 PrincipalFilter string 27 HostFilter string 28 Operation ACLOperationType 29 PermissionType ACLPermissionType 30 } 31 32 // DeleteACLsResponse represents a response from a kafka broker to an ACL 33 // deletion request. 34 type DeleteACLsResponse struct { 35 // The amount of time that the broker throttled the request. 36 Throttle time.Duration 37 38 // List of the results from the deletion request. 39 Results []DeleteACLsResult 40 } 41 42 type DeleteACLsResult struct { 43 Error error 44 MatchingACLs []DeleteACLsMatchingACLs 45 } 46 47 type DeleteACLsMatchingACLs struct { 48 Error error 49 ResourceType ResourceType 50 ResourceName string 51 ResourcePatternType PatternType 52 Principal string 53 Host string 54 Operation ACLOperationType 55 PermissionType ACLPermissionType 56 } 57 58 // DeleteACLs sends ACLs deletion request to a kafka broker and returns the 59 // response. 60 func (c *Client) DeleteACLs(ctx context.Context, req *DeleteACLsRequest) (*DeleteACLsResponse, error) { 61 filters := make([]deleteacls.RequestFilter, 0, len(req.Filters)) 62 63 for _, filter := range req.Filters { 64 filters = append(filters, deleteacls.RequestFilter{ 65 ResourceTypeFilter: int8(filter.ResourceTypeFilter), 66 ResourceNameFilter: filter.ResourceNameFilter, 67 ResourcePatternTypeFilter: int8(filter.ResourcePatternTypeFilter), 68 PrincipalFilter: filter.PrincipalFilter, 69 HostFilter: filter.HostFilter, 70 Operation: int8(filter.Operation), 71 PermissionType: int8(filter.PermissionType), 72 }) 73 } 74 75 m, err := c.roundTrip(ctx, req.Addr, &deleteacls.Request{ 76 Filters: filters, 77 }) 78 if err != nil { 79 return nil, fmt.Errorf("kafka.(*Client).DeleteACLs: %w", err) 80 } 81 82 res := m.(*deleteacls.Response) 83 84 results := make([]DeleteACLsResult, 0, len(res.FilterResults)) 85 86 for _, result := range res.FilterResults { 87 matchingACLs := make([]DeleteACLsMatchingACLs, 0, len(result.MatchingACLs)) 88 89 for _, matchingACL := range result.MatchingACLs { 90 matchingACLs = append(matchingACLs, DeleteACLsMatchingACLs{ 91 Error: makeError(matchingACL.ErrorCode, matchingACL.ErrorMessage), 92 ResourceType: ResourceType(matchingACL.ResourceType), 93 ResourceName: matchingACL.ResourceName, 94 ResourcePatternType: PatternType(matchingACL.ResourcePatternType), 95 Principal: matchingACL.Principal, 96 Host: matchingACL.Host, 97 Operation: ACLOperationType(matchingACL.Operation), 98 PermissionType: ACLPermissionType(matchingACL.PermissionType), 99 }) 100 } 101 102 results = append(results, DeleteACLsResult{ 103 Error: makeError(result.ErrorCode, result.ErrorMessage), 104 MatchingACLs: matchingACLs, 105 }) 106 } 107 108 ret := &DeleteACLsResponse{ 109 Throttle: makeDuration(res.ThrottleTimeMs), 110 Results: results, 111 } 112 113 return ret, nil 114 }