bootstraptokenwire

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 13, 2026 License: AGPL-3.0 Imports: 12 Imported by: 0

Documentation

Overview

Package bootstraptokenwire — composition-root wiring for the InternalBootstrapTokenService handler (#58). Assembles the bootstrap-token mint use-case (BootstrapStore pg adapter + НАШ подписант) and its thin gRPC handler. Single wire-up call for cmd/kaname.

───────────────────────────────────────────────────────────────────────────── ЧТО ЗДЕСЬ ИЗМЕНИЛОСЬ И ПОЧЕМУ ЭТО ГЛАВНОЕ (задача #1119, Ф4б эпика #896)

Сборка держала к внешнему поставщику ДВЕ дороги: административного клиента для заведения его OAuth-клиента и клиента его токен-эндпоинта для обмена подписанного утверждения. Обе сняты: удостоверение чеканит НАШ подписант.

Следствие, ради которого фаза и делается: у сборки не осталось ни одного поля, называющего адрес или якорь поставщика, — то есть свежий клон поднимается в боевой посадке, не дожидаясь, пока чужая сторона поднимется и узнает наш ключ.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Build

func Build(pool *pgxpool.Pool, cfg BuildConfig) (*bootstraptoken.Handler, error)

Build assembles the bootstrap-token mint handler. Composition root only.

Неполный вход при ВКЛЮЧЁННОМ контуре — отказ построения, а не деградация: собранный наполовину контур отвечал бы отказом на первом же запросе, и узнать об этом было бы неоткуда — стенд поднялся бы Ready.

Types

type BuildConfig

type BuildConfig struct {
	// SigningKeyPEM — the bootstrap ES256 (P-256, PKCS#8) private key PEM,
	// supplied from a k8s Secret (KANAME_BOOTSTRAP_SA_PRIVATE_KEY_PEM). Empty →
	// mint disabled (fail-closed).
	SigningKeyPEM string
	// Signer — НАШ подписант. Обязателен, когда контур включён: выпускать иначе
	// нечем, и «включено, но нечем» здесь не выражается.
	Signer TokenSigner
	// Claims — состав утверждений. Обязателен вместе с подписантом: токен без
	// принципала край принял бы и не нашёл, за кого тот говорит.
	Claims ClaimsComposer
	// GatewayAudience — адресат выпускаемого удостоверения (https://{API_DOMAIN}).
	GatewayAudience string
	// TokenTTL — срок выпускаемого удостоверения; ноль → умолчание контура.
	TokenTTL time.Duration
	// Logger — surfaces mint failures. nil → no logging.
	Logger *slog.Logger
}

BuildConfig — composition inputs for the bootstrap-token mint handler.

type ClaimsComposer

type ClaimsComposer interface {
	ClaimsForAssertionClient(ctx context.Context, client domain.AssertionClient, hookCtx service.TokenHookContext) (map[string]any, service.ResolvedPrincipal, error)
}

ClaimsComposer — состав утверждений выпускаемого токена.

Порт объявлен здесь узко и НАМЕРЕННО ведёт к тому же объявлению, каким состав собирается на остальных полосах выдачи: перевод чеканки не вправе тихо сменить принципала, а сменил бы он его именно так — второй сборкой утверждений, чьё расхождение с первой не выражено и потому не может покраснеть.

type TokenSigner

type TokenSigner interface {
	Sign(ctx context.Context, req tokensigner.Request) (tokensigner.Token, error)
}

TokenSigner — подписант с точки зрения этой сборки.

Заведён портом, а не конкретным типом, ровно по той причине, по какой был заведён порт обмена у прежней полосы: классификация отказа ниже — решение о ПОЛОСЕ ответа, и проверять его надо на настоящем адаптере, а не на копии его логики в пробе.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL