loginmethod

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: Oct 27, 2026 License: AGPL-3.0 Imports: 3 Imported by: 0

Documentation

Overview

Package loginmethod — порт хранилища способа входа человека и подтверждённости его адреса (фаза Ф2, часть П1, задача PRO-Robotech/kacho#1268).

Кто его зовёт

Вызывающих в прод-коде у порта в этой части НЕТ, и это сказано прямо, а не оставлено читателю выводить из тишины. Их двое, и оба приходят своими частями той же линии: перенос личностей (часть П3 фазы Ф2) присоединяет способ к существующему человеку, полоса входа (Ф3) читает способ и отметку подтверждённости. До них порт держат интеграционные пробы адаптера (`internal/repo/kaname/pg/login_method_repo_integration_test.go`), и они же утверждают, что адаптер его исполняет.

Чего порт НЕ делает

Не проверяет пароль и не судит формат материала — это проверяющий (часть П2), и его ещё нет. Не выдаёт материал наружу: `domain.LoginVerifier` не печатается и не сериализуется, а его выход держит гейт дерева `internal/check` `TestLoginVerifierStaysInside`.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CostClassCensus

type CostClassCensus interface {
	// PasswordCostClasses — по строке на класс, с числом строк; один проход по
	// таблице способов без индекса по материалу (индекс копировал бы колонку в
	// свои страницы, и заводить его нельзя — шапка миграции таблицы).
	PasswordCostClasses(ctx context.Context) ([]CostClassCount, error)
}

CostClassCensus — перепись классов стоимости хранимых значений способа «пароль» (решение kaname#188): вызывающий — композиционный корень при старте, калибрующий огибающую по потолку на ФАКТИЧЕСКОЙ популяции. Материал перепись не выносит; порт отделён от `Store`, потому что читатель у него один и другой.

type CostClassCount

type CostClassCount struct {
	Prefix string
	Rows   int64
}

CostClassCount — строка переписи классов стоимости: префикс класса (значение без соли и тела — формат и числа параметров, как его читает `passwordverify.ParseCostClassPrefix`) и число строк этого класса. Пустой префикс — признак формата вне перечня: сегмент чужого признака из хранилища не выносится.

type Store

type Store interface {
	// Create заводит способ.
	//
	//   - INVALID_ARGUMENT — строка негодна (`domain.LoginMethod.Validate`); до
	//     базы вход не доходит;
	//   - ALREADY_EXISTS — у человека уже есть способ этого вида. Производит
	//     ключ базы, поэтому под конкуренцией проходит ровно одна вставка;
	//   - FAILED_PRECONDITION — человека нет.
	Create(ctx context.Context, m domain.LoginMethod) (domain.LoginMethod, error)

	// Get читает способ человека данного вида. NOT_FOUND — такого способа нет.
	Get(ctx context.Context, userID domain.UserID, kind domain.LoginMethodKind) (domain.LoginMethod, error)

	// MarkEmailVerified записывает момент подтверждения адреса address человеку
	// userID — ТОЛЬКО если текущий адрес человека побайтово равен address.
	// Подтверждённость есть свойство значения: подтверждение значения, которое
	// успело смениться, не ложится.
	//
	//   - INVALID_ARGUMENT — момент нулевой;
	//   - NOT_FOUND — человека нет;
	//   - FAILED_PRECONDITION — текущий адрес не тот, что подтверждали.
	MarkEmailVerified(ctx context.Context, userID domain.UserID, address domain.Email, at time.Time) error

	// EmailVerification — момент подтверждения ТЕКУЩЕГО адреса. Исходов три,
	// и различаются они типом: (момент, true) — подтверждён; (нуль, false) — не
	// подтверждён; ошибка — спросить не удалось (NOT_FOUND — человека нет).
	EmailVerification(ctx context.Context, userID domain.UserID) (at time.Time, verified bool, err error)

	// AccessKeyEnrolled — есть ли у человека хоть одна строка ключа доступа.
	// Ключ — ресурс своей таблицы, а не строка способа входа; ось «заведено»
	// единственного писателя обнуления счёта по адресу читает его этим
	// вопросом (`humansession/completed_login.go`).
	AccessKeyEnrolled(ctx context.Context, userID domain.UserID) (bool, error)
}

Store — хранилище способа входа и подтверждённости адреса.

Отказы — семейство `internal/errors`; коды сказаны у каждого метода.

Jump to

Keyboard shortcuts

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