mirror of
https://github.com/hanzoai/traces.git
synced 2026-10-30 18:20:41 +00:00
+6



![dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>](/assets/img/avatar_default.png)





Mario
GitHub
Javier Molina Reyes
Zach Leslie
Joe Elliott
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Ryan Perry
Kim Nylander
Suraj Nath
Alex Bikfalvi
Andrey Karpov
Jennifer Villa
Martin Disibio
Markus Toivonen
Daniel Strobusch
Carles Garcia
835e1fd250
* Block-builder PoC * Add unit test for block-builder (#4289) * Add unit test for block-builder * fmt * Update tests * cmon * Deterministically build blocks for partition sections (#4327) * Pull main (#4342) * chore: remove gofakeit dependency (#4274) * Further reduce Labes() calls in the metrics registry (#4283) * Respect passed headers in read path requests (#4287) * Ingester: Validate completed blocks (#4256) * Add validate method to block Signed-off-by: Joe Elliott <[email protected]> * Add Validate usage in the ingester Signed-off-by: Joe Elliott <[email protected]> * changelog Signed-off-by: Joe Elliott <[email protected]> * add test and fix replay Signed-off-by: Joe Elliott <[email protected]> * increment metric Signed-off-by: Joe Elliott <[email protected]> --------- Signed-off-by: Joe Elliott <[email protected]> * Add `invalid_utf8` to reasons spans could be rejected (#4293) * Add `invalid_utf8` to reasons spans could be rejected * Update changelog * Update docs * Ensure test covers invalid UTF-8 and not slack time * add signals for duplicate rf1 data (#4296) Signed-off-by: Joe Elliott <[email protected]> * Bump anchore/sbom-action from 0.17.5 to 0.17.7 (#4307) Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.17.5 to 0.17.7. - [Release notes](https://github.com/anchore/sbom-action/releases) - [Changelog](https://github.com/anchore/sbom-action/blob/main/RELEASE.md) - [Commits](https://github.com/anchore/sbom-action/compare/v0.17.5...v0.17.7) --- updated-dependencies: - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * docs: Update readme with explore traces info (#4263) * docs: Update readme with explore traces info Co-authored-by: Kim Nylander <[email protected]> * chore: remove spanlogger (#4312) * chore: remove spanlogger * Query-Frontend: Add middleware to drop headers (#4298) * header strip ware Signed-off-by: Joe Elliott <[email protected]> * comment Signed-off-by: Joe Elliott <[email protected]> * changelog Signed-off-by: Joe Elliott <[email protected]> * remove header strip wear from metrics summary Signed-off-by: Joe Elliott <[email protected]> --------- Signed-off-by: Joe Elliott <[email protected]> * Increase length of time compactions have to fail (#4315) * increase length of time compactions have to fail Signed-off-by: Joe Elliott <[email protected]> * gen Signed-off-by: Joe Elliott <[email protected]> --------- Signed-off-by: Joe Elliott <[email protected]> * docs: mark serverless as deprecated (#4017) * docs: mark serverless as deprecated * Changelog + readme * docs: Remove duplicated examples (#4295) This removes duplicates examples from the Configure TraceQL metrics page. Signed-off-by: Alex Bikfalvi <[email protected]> * tempo-cli: support dropping multiple traces in a single operation (#4266) * tempo-cli: support dropping multiple traces in a single operation * update final log message --------- Co-authored-by: Suraj Nath <[email protected]> * [DOC] Add clarification for metrics summary and traceQL metrics (#4316) * Add clarification for metrics summary and traceQL metrics * Apply suggestions from code review Co-authored-by: Jennifer Villa <[email protected]> * Update docs/sources/tempo/api_docs/metrics-summary.md --------- Co-authored-by: Jennifer Villa <[email protected]> * TraceQL metrics time range fixes (#4325) * Disconnect job time range filtering from step, so that results in split backend/recent range is accurate * changelog * Fix to assert metrics query range before alignment because alignment may increase it, which is not the responsibility of the caller to account for (#4331) * Add doc about configuring TLS with Helm (#4328) * Add doc about configuring TLS with Helm * Add memberlist and readinessProbe to example * Include server config for listening on TLS * Add note about scraping * Update docs/sources/tempo/configuration/network/tls.md Co-authored-by: Markus Toivonen <[email protected]> * Update docs/sources/tempo/configuration/network/tls.md Co-authored-by: Kim Nylander <[email protected]> * Update docs/sources/tempo/configuration/network/tls.md Co-authored-by: Kim Nylander <[email protected]> * Add memcached config for TLS --------- Co-authored-by: Markus Toivonen <[email protected]> Co-authored-by: Kim Nylander <[email protected]> * [DOC] Add TLS info to Helm chart doc (#4334) --------- Signed-off-by: Joe Elliott <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: Alex Bikfalvi <[email protected]> Co-authored-by: Javier Molina Reyes <[email protected]> Co-authored-by: Zach Leslie <[email protected]> Co-authored-by: Joe Elliott <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ryan Perry <[email protected]> Co-authored-by: Kim Nylander <[email protected]> Co-authored-by: Suraj Nath <[email protected]> Co-authored-by: Alex Bikfalvi <[email protected]> Co-authored-by: Andrey Karpov <[email protected]> Co-authored-by: Jennifer Villa <[email protected]> Co-authored-by: Martin Disibio <[email protected]> Co-authored-by: Markus Toivonen <[email protected]> * WIP: Rhythm ingest path (#4314) * Validate distributor config. Finish encoder/decoder tests * Repair tests * Make SingleBinary work out of the box by defaulting to partition 0 * Fix first time startup where blockbuilder fails before ingester can create topic * Fix initial startup cycle time and delay * Add more failure modes to the block-builder (#4345) * Add more tests to the block-builder * stuff * Add comments * [Rhythm] Metrics generator read from kafka first pass (#4359) * Metrics generator read from kafka first pass * review feedback * Multiple fixes in block-builder (#4364) * [rhythm] git merge origin/main (#4376) * chore: remove gofakeit dependency (#4274) * Further reduce Labes() calls in the metrics registry (#4283) * Respect passed headers in read path requests (#4287) * Ingester: Validate completed blocks (#4256) * Add validate method to block Signed-off-by: Joe Elliott <[email protected]> * Add Validate usage in the ingester Signed-off-by: Joe Elliott <[email protected]> * changelog Signed-off-by: Joe Elliott <[email protected]> * add test and fix replay Signed-off-by: Joe Elliott <[email protected]> * increment metric Signed-off-by: Joe Elliott <[email protected]> --------- Signed-off-by: Joe Elliott <[email protected]> * Add `invalid_utf8` to reasons spans could be rejected (#4293) * Add `invalid_utf8` to reasons spans could be rejected * Update changelog * Update docs * Ensure test covers invalid UTF-8 and not slack time * add signals for duplicate rf1 data (#4296) Signed-off-by: Joe Elliott <[email protected]> * Bump anchore/sbom-action from 0.17.5 to 0.17.7 (#4307) Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.17.5 to 0.17.7. - [Release notes](https://github.com/anchore/sbom-action/releases) - [Changelog](https://github.com/anchore/sbom-action/blob/main/RELEASE.md) - [Commits](https://github.com/anchore/sbom-action/compare/v0.17.5...v0.17.7) --- updated-dependencies: - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * docs: Update readme with explore traces info (#4263) * docs: Update readme with explore traces info Co-authored-by: Kim Nylander <[email protected]> * chore: remove spanlogger (#4312) * chore: remove spanlogger * Query-Frontend: Add middleware to drop headers (#4298) * header strip ware Signed-off-by: Joe Elliott <[email protected]> * comment Signed-off-by: Joe Elliott <[email protected]> * changelog Signed-off-by: Joe Elliott <[email protected]> * remove header strip wear from metrics summary Signed-off-by: Joe Elliott <[email protected]> --------- Signed-off-by: Joe Elliott <[email protected]> * Increase length of time compactions have to fail (#4315) * increase length of time compactions have to fail Signed-off-by: Joe Elliott <[email protected]> * gen Signed-off-by: Joe Elliott <[email protected]> --------- Signed-off-by: Joe Elliott <[email protected]> * docs: mark serverless as deprecated (#4017) * docs: mark serverless as deprecated * Changelog + readme * docs: Remove duplicated examples (#4295) This removes duplicates examples from the Configure TraceQL metrics page. Signed-off-by: Alex Bikfalvi <[email protected]> * tempo-cli: support dropping multiple traces in a single operation (#4266) * tempo-cli: support dropping multiple traces in a single operation * update final log message --------- Co-authored-by: Suraj Nath <[email protected]> * [DOC] Add clarification for metrics summary and traceQL metrics (#4316) * Add clarification for metrics summary and traceQL metrics * Apply suggestions from code review Co-authored-by: Jennifer Villa <[email protected]> * Update docs/sources/tempo/api_docs/metrics-summary.md --------- Co-authored-by: Jennifer Villa <[email protected]> * TraceQL metrics time range fixes (#4325) * Disconnect job time range filtering from step, so that results in split backend/recent range is accurate * changelog * Fix to assert metrics query range before alignment because alignment may increase it, which is not the responsibility of the caller to account for (#4331) * Add doc about configuring TLS with Helm (#4328) * Add doc about configuring TLS with Helm * Add memberlist and readinessProbe to example * Include server config for listening on TLS * Add note about scraping * Update docs/sources/tempo/configuration/network/tls.md Co-authored-by: Markus Toivonen <[email protected]> * Update docs/sources/tempo/configuration/network/tls.md Co-authored-by: Kim Nylander <[email protected]> * Update docs/sources/tempo/configuration/network/tls.md Co-authored-by: Kim Nylander <[email protected]> * Add memcached config for TLS --------- Co-authored-by: Markus Toivonen <[email protected]> Co-authored-by: Kim Nylander <[email protected]> * [DOC] Add TLS info to Helm chart doc (#4334) * fix deprecation warning by switching to DoBatchWithOptions (#4343) Signed-off-by: Daniel Strobusch <[email protected]> * bump dskit to v0.0.0-20241115082728-f2a7eb3aa0e9 to leverage benefits for context causes for DoBatch calls. (#4341) See https://github.com/grafana/dskit/issues/576 Signed-off-by: Daniel Strobusch <[email protected]> * Bump github.com/minio/minio-go/v7 from 7.0.70 to 7.0.80 (#4282) * Bump github.com/minio/minio-go/v7 from 7.0.70 to 7.0.80 Bumps [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) from 7.0.70 to 7.0.80. - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.70...v7.0.80) --- updated-dependencies: - dependency-name: github.com/minio/minio-go/v7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> * Update serverless vendor --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Zach Leslie <[email protected]> * update default config values to better align with production workloads (#4340) * update default config values to better align with production workloads * Update CHANGELOG.md and config docs * Ingester memory improvements by adjusting prealloc (#4344) * remove trace ids Signed-off-by: Joe Elliott <[email protected]> * linear buckets Signed-off-by: Joe Elliott <[email protected]> * changelog Signed-off-by: Joe Elliott <[email protected]> * tuney tune Signed-off-by: Joe Elliott <[email protected]> * metric misses and increase pool size Signed-off-by: Joe Elliott <[email protected]> * lint Signed-off-by: Joe Elliott <[email protected]> --------- Signed-off-by: Joe Elliott <[email protected]> * Bump github.com/Azure/azure-sdk-for-go/sdk/azcore from 1.13.0 to 1.16.0 (#4302) * Bump github.com/Azure/azure-sdk-for-go/sdk/azcore from 1.13.0 to 1.16.0 Bumps [github.com/Azure/azure-sdk-for-go/sdk/azcore](https://github.com/Azure/azure-sdk-for-go) from 1.13.0 to 1.16.0. - [Release notes](https://github.com/Azure/azure-sdk-for-go/releases) - [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md) - [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.13.0...sdk/azcore/v1.16.0) --- updated-dependencies: - dependency-name: github.com/Azure/azure-sdk-for-go/sdk/azcore dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * Update serverless vendor --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Zach Leslie <[email protected]> * Use Prometheus fast regexp (#4329) * basic integration Signed-off-by: Joe Elliott <[email protected]> * patch tests for new meaning Signed-off-by: Joe Elliott <[email protected]> * patch up more tests Signed-off-by: Joe Elliott <[email protected]> * add basic tests Signed-off-by: Joe Elliott <[email protected]> * changelog + docs Signed-off-by: Joe Elliott <[email protected]> * remove benches Signed-off-by: Joe Elliott <[email protected]> * Cleaned up + tests Signed-off-by: Joe Elliott <[email protected]> * comment Signed-off-by: Joe Elliott <[email protected]> * lint Signed-off-by: Joe Elliott <[email protected]> * Update docs/sources/tempo/traceql/_index.md Co-authored-by: Kim Nylander <[email protected]> * comment Signed-off-by: Joe Elliott <[email protected]> --------- Signed-off-by: Joe Elliott <[email protected]> Co-authored-by: Kim Nylander <[email protected]> * Fix broken link in service-graphs docs (#4351) * Fix minor typo in TraceQL docs (#4356) * Bump default memcached version (#4363) * Exemplar fixes (#4366) * Fix exemplars based on duration to convert to seconds, fix various other issues * changelog * fix: initialize histogram buckets to 0 to avoid them being downsampled (#4368) * initialized histogram buckets to 0 to avoid them being downsampled * Ingester/Generator Live trace cleanup (#4365) * moved trace sizes somewhere shareable Signed-off-by: Joe Elliott <[email protected]> * use tracesizes in ingester Signed-off-by: Joe Elliott <[email protected]> * make tests work Signed-off-by: Joe Elliott <[email protected]> * trace bytes in generator Signed-off-by: Joe Elliott <[email protected]> * remove traceCount Signed-off-by: Joe Elliott <[email protected]> * live trace shenanigans Signed-off-by: Joe Elliott <[email protected]> * changelog Signed-off-by: Joe Elliott <[email protected]> * Update modules/generator/processor/localblocks/livetraces.go Co-authored-by: Mario <[email protected]> * Update modules/ingester/instance.go Co-authored-by: Mario <[email protected]> * Test cleanup. Add sz test, restore commented out and fix e2e Signed-off-by: Joe Elliott <[email protected]> * remove todo comment Signed-off-by: Joe Elliott <[email protected]> --------- Signed-off-by: Joe Elliott <[email protected]> Co-authored-by: Mario <[email protected]> * Bump anchore/sbom-action from 0.17.7 to 0.17.8 (#4371) Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.17.7 to 0.17.8. - [Release notes](https://github.com/anchore/sbom-action/releases) - [Changelog](https://github.com/anchore/sbom-action/blob/main/RELEASE.md) - [Commits](https://github.com/anchore/sbom-action/compare/v0.17.7...v0.17.8) --- updated-dependencies: - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Update for IDs change * Only run blockbuilder if ingest enabled --------- Signed-off-by: Joe Elliott <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: Alex Bikfalvi <[email protected]> Signed-off-by: Daniel Strobusch <[email protected]> Co-authored-by: Javier Molina Reyes <[email protected]> Co-authored-by: Zach Leslie <[email protected]> Co-authored-by: Joe Elliott <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ryan Perry <[email protected]> Co-authored-by: Kim Nylander <[email protected]> Co-authored-by: Suraj Nath <[email protected]> Co-authored-by: Alex Bikfalvi <[email protected]> Co-authored-by: Andrey Karpov <[email protected]> Co-authored-by: Jennifer Villa <[email protected]> Co-authored-by: Martin Disibio <[email protected]> Co-authored-by: Markus Toivonen <[email protected]> Co-authored-by: Daniel Strobusch <[email protected]> Co-authored-by: Carles Garcia <[email protected]> * [rhythm] Changes to simplify operations (#4389) * Use mapping for assigning partitions * Use mapping for assigning partitions in the generator too * Add support for SASL auth to kafka clients * Add metrics to ingest (#4395) * [rhythm] Extract block-builder into its own module (#4396) * Extract block-builder into its own module * Update /operations and examples * No ephemeral storage * No rolling strategy either * fmt and compile * Address review comment * [rhythm] Correctly pass start/end time when appending a trace (#4410) * Correctly pass start/end times * Different code, same result * [rhythm] Multiple fixes to block-builder consumption (#4413) * Multiple fixes to cycle consumption * fmt * happy now? * ups * Rhythm: Separate non-flushing local blocks processor to store new queue data for reads (#4411) * wip: separate non-flushing local blocks processor to store new queue data for reads * Make real config for non-flushing local blocks processor, optional, validate wal config and use defaults if needed * Fix defaulting of second WAL config * [rhythm] Make ID generator more robust (#4416) * Make ID generator more robust * Simplify * Update toc3ff5ba61* Fix registering of kafka read client metrics (#4502) * [rhythm] Make ID generator more robust (#4416) (#4507) * Make ID generator more robust * Simplify * Removed references to Loki and Mimir (#4509) Signed-off-by: Joe Elliott <[email protected]> * [Rhythm] Block builder test updates (#4510) * Make blockbuilder tests closer to real kafka and less implementation specific by always enabling support for consumer groups, call commit control func in order * Verify last committed offset in each test * hide test function * lint * lint * [Rhythm] Block-builder consumption loop (#4480) * Alternate block-builder consume * Set timeout on PollFetches, reduce initial poll delay, update 1 test to work using real consumergroup functionality * restore metrics * Re-add original partition lag metric, polled in separate goroutine. Fix consume loop to only consume full-duration cycles for more determinism * merge conflict * Review feedback * Review feedback * Comment * code cleanup, lint * logs * code cleanup * lint * Review feedback * Remove missed lookback_on_no_commit config in e2e tests and regen manifest * Review feedback * Fix rewind to latest commit to init correctly, it didn't work in some clusters (#4532) * [rhythm] merge main at2c44177(#4531) * Fixes * More fixes --------- Signed-off-by: Joe Elliott <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: Alex Bikfalvi <[email protected]> Signed-off-by: Daniel Strobusch <[email protected]> Co-authored-by: Javier Molina Reyes <[email protected]> Co-authored-by: Zach Leslie <[email protected]> Co-authored-by: Joe Elliott <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ryan Perry <[email protected]> Co-authored-by: Kim Nylander <[email protected]> Co-authored-by: Suraj Nath <[email protected]> Co-authored-by: Alex Bikfalvi <[email protected]> Co-authored-by: Andrey Karpov <[email protected]> Co-authored-by: Jennifer Villa <[email protected]> Co-authored-by: Martin Disibio <[email protected]> Co-authored-by: Markus Toivonen <[email protected]> Co-authored-by: Daniel Strobusch <[email protected]> Co-authored-by: Carles Garcia <[email protected]>
230 lines
8.1 KiB
Go
230 lines
8.1 KiB
Go
package kadm
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/twmb/franz-go/pkg/kerr"
|
|
"github.com/twmb/franz-go/pkg/kmsg"
|
|
)
|
|
|
|
// Principal is a principal that owns or renews a delegation token. This is the
|
|
// same as an ACL's principal, but rather than being a single string, the type
|
|
// and name are split into two fields.
|
|
type Principal struct {
|
|
Type string // Type is the type of a principal owner or renewer. If empty, this defaults to "User".
|
|
Name string // Name is the name of a principal owner or renewer.
|
|
}
|
|
|
|
// DelegationToken contains information about a delegation token.
|
|
type DelegationToken struct {
|
|
// Owner is the owner of the delegation token.
|
|
Owner Principal
|
|
// TokenRequesterPrincipal is the principal of the creator of the
|
|
// token. This exists for v3+, where you can override the owner.
|
|
// For prior than v3, this is just the Owner.
|
|
TokenRequesterPrincipal Principal
|
|
// IssueTimestamp is timestamp the delegation token creation request
|
|
// is received within the broker.
|
|
IssueTimestamp time.Time
|
|
// ExpiryTimestamp is the timestamp the delegation token will expire.
|
|
// This field is:
|
|
// min(MaxTimestamp, IssueTimestamp+delegation.token.expiry.time.ms)
|
|
// where the default expiry is 24hr.
|
|
ExpiryTimestamp time.Time
|
|
// MaxTimestamp is the timestamp past which the delegation token cannot
|
|
// be renewed. This is either the requested MaxLifetime, or the
|
|
// broker's delegation.token.max.lifetime.ms which is 7d by default.
|
|
MaxTimestamp time.Time
|
|
// TokenID is the username of this token for use in authorization.
|
|
TokenID string
|
|
// HMAC is the password of this token for use for in authorization.
|
|
HMAC []byte
|
|
// Renewers is the list of principals that can renew this token in
|
|
// addition to the owner (which always can).
|
|
Renewers []Principal
|
|
}
|
|
|
|
// DelegationTokens contains a list of delegation tokens.
|
|
type DelegationTokens []DelegationToken
|
|
|
|
// CreateDelegationToken is a create delegation token request, allowing you to
|
|
// create scoped tokens with the same ACLs as the creator. This allows you to
|
|
// more easily manage authorization for a wide array of clients. All delegation
|
|
// tokens use SCRAM-SHA-256 SASL for authorization.
|
|
type CreateDelegationToken struct {
|
|
// Owner overrides the owner of the token from the principal issuing
|
|
// the request to the principal in this field. This allows a superuser
|
|
// to create tokens without requiring individual user credentials, and
|
|
// for a superuser to run clients on behalf of another user. These
|
|
// fields require Kafka 3.3+; see KIP-373 for more details.
|
|
Owner *Principal
|
|
// Renewers is a list of principals that can renew the delegation
|
|
// token in addition to the owner of the token. This list does not
|
|
// include the owner.
|
|
Renewers []Principal
|
|
// MaxLifetime is how long the delegation token is valid for.
|
|
// If -1, the default is the server's delegation.token.max.lifetime.ms,
|
|
// which is by default 7d.
|
|
MaxLifetime time.Duration
|
|
}
|
|
|
|
// CreateDelegationToken creates a delegation token, which is a scoped
|
|
// SCRAM-SHA-256 username and password.
|
|
//
|
|
// Creating delegation tokens allows for an (ideally) quicker and easier method
|
|
// of enabling authorization for a wide array of clients. Rather than having to
|
|
// manage many passwords external to Kafka, you only need to manage a few
|
|
// accounts and use those to create delegation tokens per client.
|
|
//
|
|
// Note that delegation tokens inherit the same ACLs as the user creating the
|
|
// token. Thus, if you want to properly scope ACLs, you should not create
|
|
// delegation tokens with admin accounts.
|
|
//
|
|
// This can return *AuthError.
|
|
func (cl *Client) CreateDelegationToken(ctx context.Context, d CreateDelegationToken) (DelegationToken, error) {
|
|
req := kmsg.NewPtrCreateDelegationTokenRequest()
|
|
if d.Owner != nil {
|
|
req.OwnerPrincipalType = &d.Owner.Type
|
|
req.OwnerPrincipalName = &d.Owner.Name
|
|
}
|
|
for _, renewer := range d.Renewers {
|
|
rr := kmsg.NewCreateDelegationTokenRequestRenewer()
|
|
rr.PrincipalType = renewer.Type
|
|
rr.PrincipalName = renewer.Name
|
|
req.Renewers = append(req.Renewers, rr)
|
|
}
|
|
req.MaxLifetimeMillis = d.MaxLifetime.Milliseconds()
|
|
resp, err := req.RequestWith(ctx, cl.cl)
|
|
if err != nil {
|
|
return DelegationToken{}, err
|
|
}
|
|
if err := maybeAuthErr(resp.ErrorCode); err != nil {
|
|
return DelegationToken{}, err
|
|
}
|
|
if err := kerr.ErrorForCode(resp.ErrorCode); err != nil {
|
|
return DelegationToken{}, err
|
|
}
|
|
|
|
t := DelegationToken{
|
|
Owner: Principal{
|
|
Type: resp.PrincipalType,
|
|
Name: resp.PrincipalName,
|
|
},
|
|
TokenRequesterPrincipal: Principal{
|
|
Type: resp.TokenRequesterPrincipalType,
|
|
Name: resp.TokenRequesterPrincipalName,
|
|
},
|
|
IssueTimestamp: time.UnixMilli(resp.IssueTimestamp).UTC(),
|
|
ExpiryTimestamp: time.UnixMilli(resp.ExpiryTimestamp).UTC(),
|
|
MaxTimestamp: time.UnixMilli(resp.MaxTimestamp).UTC(),
|
|
TokenID: resp.TokenID,
|
|
HMAC: resp.HMAC,
|
|
Renewers: append([]Principal(nil), d.Renewers...),
|
|
}
|
|
if resp.Version < 3 {
|
|
t.TokenRequesterPrincipal = t.Owner
|
|
}
|
|
return t, nil
|
|
}
|
|
|
|
// RenewDelegationToken renews a delegation token that has not yet hit its max
|
|
// timestamp and returns the new expiry timestamp.
|
|
//
|
|
// This can return *AuthError.
|
|
func (cl *Client) RenewDelegationToken(ctx context.Context, hmac []byte, renewTime time.Duration) (expiryTimestamp time.Time, err error) {
|
|
req := kmsg.NewPtrRenewDelegationTokenRequest()
|
|
req.HMAC = hmac
|
|
req.RenewTimeMillis = renewTime.Milliseconds()
|
|
resp, err := req.RequestWith(ctx, cl.cl)
|
|
if err != nil {
|
|
return time.Time{}, err
|
|
}
|
|
if err := maybeAuthErr(resp.ErrorCode); err != nil {
|
|
return time.Time{}, err
|
|
}
|
|
if err := kerr.ErrorForCode(resp.ErrorCode); err != nil {
|
|
return time.Time{}, err
|
|
}
|
|
return time.UnixMilli(resp.ExpiryTimestamp).UTC(), nil
|
|
}
|
|
|
|
// ExpireDelegationToken changes a delegation token's expiry timestamp and
|
|
// returns the new expiry timestamp, which is min(now+expiry, maxTimestamp).
|
|
// This request can be used to force tokens to expire quickly, or to give
|
|
// tokens a grace period before expiry. Using an expiry of -1 expires the token
|
|
// immediately.
|
|
//
|
|
// This can return *AuthError.
|
|
func (cl *Client) ExpireDelegationToken(ctx context.Context, hmac []byte, expiry time.Duration) (expiryTimestamp time.Time, err error) {
|
|
req := kmsg.NewPtrExpireDelegationTokenRequest()
|
|
req.HMAC = hmac
|
|
req.ExpiryPeriodMillis = expiry.Milliseconds()
|
|
resp, err := req.RequestWith(ctx, cl.cl)
|
|
if err != nil {
|
|
return time.Time{}, err
|
|
}
|
|
if err := maybeAuthErr(resp.ErrorCode); err != nil {
|
|
return time.Time{}, err
|
|
}
|
|
if err := kerr.ErrorForCode(resp.ErrorCode); err != nil {
|
|
return time.Time{}, err
|
|
}
|
|
return time.UnixMilli(resp.ExpiryTimestamp).UTC(), nil
|
|
}
|
|
|
|
// DescribeDelegationTokens describes delegation tokens. This returns either
|
|
// all delegation tokens, or returns only tokens with owners in the requested
|
|
// owners list.
|
|
//
|
|
// This can return *AuthError.
|
|
func (cl *Client) DescribeDelegationTokens(ctx context.Context, owners ...Principal) (DelegationTokens, error) {
|
|
req := kmsg.NewPtrDescribeDelegationTokenRequest()
|
|
for _, owner := range owners {
|
|
ro := kmsg.NewDescribeDelegationTokenRequestOwner()
|
|
ro.PrincipalType = owner.Type
|
|
ro.PrincipalName = owner.Name
|
|
req.Owners = append(req.Owners, ro)
|
|
}
|
|
resp, err := req.RequestWith(ctx, cl.cl)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := maybeAuthErr(resp.ErrorCode); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := kerr.ErrorForCode(resp.ErrorCode); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var ts DelegationTokens
|
|
for _, d := range resp.TokenDetails {
|
|
t := DelegationToken{
|
|
Owner: Principal{
|
|
Type: d.PrincipalType,
|
|
Name: d.PrincipalName,
|
|
},
|
|
TokenRequesterPrincipal: Principal{
|
|
Type: d.TokenRequesterPrincipalType,
|
|
Name: d.TokenRequesterPrincipalName,
|
|
},
|
|
IssueTimestamp: time.UnixMilli(d.IssueTimestamp).UTC(),
|
|
ExpiryTimestamp: time.UnixMilli(d.ExpiryTimestamp).UTC(),
|
|
MaxTimestamp: time.UnixMilli(d.MaxTimestamp).UTC(),
|
|
TokenID: d.TokenID,
|
|
HMAC: d.HMAC,
|
|
}
|
|
if resp.Version < 3 {
|
|
t.TokenRequesterPrincipal = t.Owner
|
|
}
|
|
for _, r := range d.Renewers {
|
|
t.Renewers = append(t.Renewers, Principal{
|
|
Type: r.PrincipalType,
|
|
Name: r.PrincipalName,
|
|
})
|
|
}
|
|
ts = append(ts, t)
|
|
}
|
|
return ts, nil
|
|
}
|