Help us shape the future of Go! Take the 2026 Go Developer Survey

identityposture

package
v1.16.0 Latest Latest
Warning

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

Go to latest
Published: Oct 30, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package identityposture — ПОСАДКА ЛИЧНОСТИ: кто проверяет, что перед платформой именно этот человек (задача #1125, подфаза Ф4д эпика #896).

───────────────────────────────────────────────────────────────────────────── ЗАЧЕМ ПОЛЕ ЕСТЬ, КОГДА ЗАКОННОЕ ЗНАЧЕНИЕ ОДНО

Поле завели на время переезда со внешнего поставщика удостоверений на свою чеканку. Пока переезд шёл, в дереве жили ОБА тракта с противоположными требованиями: одному нужны три адреса поставщика, второму — ни одного. Поле разводило эти требования явно.

Посадка `external` из словаря снята (corelib#30): законное значение одно — `own`. Поле при этом остаётся обязательным. Профиль, объявивший снятую посадку строкой, получает отказ с именем настройки от Parse — тем же текстом, что любое незнакомое имя. Число мимо Parse отвергает Validate — тем же текстом, что любое число вне словаря, — но только в процессе, чья проверка старта этот метод зовёт. Перевод проверок старта обоих потребителей — службы прав и края — на Validate ведут задачи PRO-Robotech/kaname#424 и PRO-Robotech/kacho#2862; пока они открыты, потребители Validate при старте не зовут и судят только IsSet.

───────────────────────────────────────────────────────────────────────────── ИМЯ `External` ОСТАЛОСЬ, ЗНАЧЕНИЕ — ВНЕ СЛОВАРЯ

Путь модуля — без суффикса мажорной версии, и снятое экспортированное имя в минорном выпуске v1 ломало бы сборку потребителя, поднявшего пин. Поэтому `External` — устаревшая константа прежнего типа и прежнего числа с абзацем `Deprecated:`. Разбор её не производит, перечни её не называют, печатается она как величина вне словаря. Имя снимается только мажорным выпуском модуля.

«Вне словаря» не значит «недостижимо». Тип — целое, и число снятой посадки записывает в поле всякий, кто идёт мимо Parse: преобразование типа, декодер настройки, кладущий число прямо в целое поле. Такое значение IsSet называет объявленным — и это правда: профиль поле объявил. Законным его называет только словарь — IsLegal, а проверке старта служит Validate: он различает три исхода (не объявлено · объявлено вне словаря · законно) и отвергает снятую посадку наравне с любым другим числом вне словаря. Поэтому ветку потребителя, читающую External, снимают не раньше, чем перед ней встанет Validate: до того она может оказаться единственным, что за этим значением стоит.

───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ УМОЛЧАНИЯ В КОДЕ НЕТ

Умолчание `own` МОЛЧА подняло бы профиль, поля не объявивший, — в том числе написанный под снятую посадку и не обновлённый: адреса поставщика в нём остались бы без читателя, а стенд поднялся бы в посадке, которую никто не выбирал. Отказ старта заставляет выбрать явно. Второй довод прежней редакции — умолчание `external` требовало бы адресов у профиля, у которого их нет, — ушёл вместе со значением.

Умолчание живёт В ПРОФИЛЕ: профиль объявляет значение явно, а отдельный клон обязан выбрать сам.

───────────────────────────────────────────────────────────────────────────── «НЕ ЗАДАНО» НЕ ПЕРЕСЕКАЕТСЯ С ОБЛАСТЬЮ ЗНАЧЕНИЙ

Нулевое значение типа — Unset — означает РОВНО «профиль поля не объявил» и законным значением поля не является. Пустая строка значением тоже не является: она не «безопасное умолчание», а отсутствие ответа.

───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ В ОБЩЕМ ФУНДАМЕНТЕ, А НЕ В НАСТРОЙКЕ СЛУЖБЫ ПРАВ

Посадку читают ДВА процесса: служба прав и край. Ни один из них не вправе импортировать внутренности другого, поэтому словарь, оставленный в настройке одного, был бы переписан во втором — и разошёлся бы с первым молча, на первом же новом значении. Горизонтальное живёт в общем фундаменте.

───────────────────────────────────────────────────────────────────────────── СЛОВАРЬ ТОЧНЫЙ, БЕЗ ПРИВЕДЕНИЯ РЕГИСТРА И БЕЗ ОБРЕЗКИ

Разбор сверяет значение ДОСЛОВНО. Причина не в педантизме: соседняя раскладка (`Own`), лишний символ (`own `) и омоглиф кириллицы (`оwn` — буква `о` из другого алфавита) на глаз неотличимы от законного значения, а приведение регистра и обрезка сделали бы часть из них законными молча. Величина, от которой зависит, поднимется ли стенд, читается точным совпадением либо отвергается с именем поля.

Index

Constants

View Source
const FieldName = "identity-provider"

FieldName — КАНОНИЧЕСКОЕ имя поля, одинаковое у обоих процессов. Имя РУЧКИ у каждого своё (путь в настройке службы прав, переменная окружения на крае), и называет его вызывающий: отказ, назвавший чужую ручку, посылает оператора править не тот профиль.

Variables

This section is empty.

Functions

func Names

func Names() []string

Names возвращает канонические имена законных значений в порядке словаря — для текстов отказа и для табличных проб.

func NotDeclared

func NotDeclared(setting string) error

NotDeclared — отказ старта на профиле, поля не объявившем. Текст один на оба процесса: расхождение диагностики по процессам заставило бы оператора учить два объяснения одного предмета.

Types

type Provider

type Provider int

Provider — посадка личности: чем стенд проверяет человека.

const (
	// Unset — профиль поля не объявил. Отказ старта.
	Unset Provider = iota
	// External — прежняя посадка «личность проверяет внешний поставщик». Из
	// словаря снята (corelib#30): разбор её не производит, перечни её не
	// называют, проверка старта Validate её отвергает. Число прежнее — значение
	// константы в v1 не меняется.
	//
	// Deprecated: посадка с внешним поставщиком удостоверений снята. Parse её
	// отвергает, Values и Names её не перечисляют, но тип — целое, поэтому
	// преобразование типа или декодер, пишущий число прямо в поле, по-прежнему
	// производят её мимо Parse. Отвергайте её на проверке старта через Validate,
	// который отказывает ей наравне с любым другим значением вне словаря, а
	// ветку, читающую External, снимайте только после того, как перед ней встал
	// Validate. Имя сохранено для потребителей, поднимающих пин в пределах v1, и
	// снимается только мажорным выпуском модуля.
	External
	// Own — личность проверяем мы сами; адреса поставщика не
	// требуются, вместо них обязательна своя чеканка и свой вход человека.
	//
	// Переходным была объявлена посадка `external` (решение оркестратора по
	// §15 приёмки Ф4д) — она снята; `own` — то, к чему платформа пришла.
	Own
)

Значения. Нулевое — «не задано», и оно НЕ входит в словарь законных.

func Parse

func Parse(setting, s string) (Provider, error)

Parse — поточечно обратная String() для законных значений.

Отказ называет поле и перечень законных значений; отката к «безопасному» значению не происходит — возвращается Unset, то есть «ответа нет». Вызывающий, проглотивший ошибку, получит незаданную посадку и упрётся в тот же отказ старта, а не в молча выбранную полосу.

func Values

func Values() []Provider

Values возвращает законные значения поля — ВЫВЕДЕННЫЕ из словаря, а не выписанные вызывающим.

func (Provider) IsLegal added in v1.10.0

func (p Provider) IsLegal() bool

IsLegal сообщает, стоит ли значение в словаре. Unset и любое число вне словаря, в том числе снятое External, законными не являются.

func (Provider) IsSet

func (p Provider) IsSet() bool

IsSet сообщает, объявил ли профиль поле — каким угодно значением, в том числе вне словаря. Объявлено не значит законно: число, записанное в поле мимо Parse, IsSet считает объявленным, поэтому проверке старта его мало: число вне словаря отвергает только Validate. Потребители, судящие на старте IsSet, и задачи их перевода названы в шапке пакета.

func (Provider) MarshalJSON

func (p Provider) MarshalJSON() ([]byte, error)

MarshalJSON / UnmarshalJSON — сериализация под ту же дисциплину, что разбор.

func (Provider) String

func (p Provider) String() string

String — каноническое имя. У «не задано» имени в словаре нет, и печатается оно так, чтобы в тексте отказа не выглядеть значением.

func (*Provider) UnmarshalJSON

func (p *Provider) UnmarshalJSON(b []byte) error

UnmarshalJSON разбирает значение тем же Parse — второго разборщика не заводится.

func (Provider) Validate added in v1.10.0

func (p Provider) Validate(setting string) error

Validate — проверка старта. Исходов три, и у каждого свой ответ: законное значение — nil; поле не объявлено — NotDeclared(setting); объявлено числом вне словаря — отказ, называющий ручку вызывающего, это число и законный перечень. Последний исход отдельный намеренно: «не объявлено» послало бы оператора дописывать поле, которое он уже написал.

Jump to

Keyboard shortcuts

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