diff --git a/openspec/changes/fix-apex-webfinger-and-registration/.openspec.yaml b/openspec/changes/fix-apex-webfinger-and-registration/.openspec.yaml deleted file mode 100644 index 2e24cfa..0000000 --- a/openspec/changes/fix-apex-webfinger-and-registration/.openspec.yaml +++ /dev/null @@ -1,2 +0,0 @@ -schema: spec-driven -created: 2026-09-07 diff --git a/openspec/changes/fix-apex-webfinger-and-registration/design.md b/openspec/changes/fix-apex-webfinger-and-registration/design.md deleted file mode 100644 index 9078b16..0000000 --- a/openspec/changes/fix-apex-webfinger-and-registration/design.md +++ /dev/null @@ -1,51 +0,0 @@ -## Goals - -1. Восстановить короткий адрес `@kpa39l@dedinit.ru` в клиентах (Tusky/Mastodon). -2. Открыть регистрацию с лимитом 10 пользователей/день. -3. Убедиться, что SMTP работает (для писем подтверждения). - -## Non-Goals - -- Не меняем DNS (apex остаётся на Jino). -- Не меняем split-domain схему (host=social.dedinit.ru, account-domain=dedinit.ru). -- Не вводим PHP/мод_rewrite (недоступны на Jino). -- Не открываем регистрацию без лимита. - -## Architecture - -### Топология - -``` -Клиент (Tusky/Mastodon) - │ резолв @kpa39l@dedinit.ru - ▼ -dedinit.ru (apex, Jino/Apache) - │ /.well-known/webfinger?resource=acct:kpa39l@dedinit.ru - ▼ RedirectMatch 301 (mod_alias, .htaccess) -social.dedinit.ru (GtS, vps02→WG→bigbox→docker) - │ /.well-known/webfinger?resource=... - ▼ динамический JSON: subject=acct:kpa39l@dedinit.ru -``` - -### Регистрация - -`docker-compose.yml` env: -- `GTS_ACCOUNTS_REGISTRATION_OPEN=true` -- `GTS_ACCOUNTS_REGISTRATION_DAILY_LIMIT=10` - -approval_required=true (GtS по умолчанию): админ одобряет заявки. -Очередь одобрения: дефолт GtS (20) — при 10/день хватает. - -## Risks / Open Questions - -- **Tusky может кэшировать старый адрес**: после фикса apex-WebFinger нужно - перезайти/переподписаться в клиенте (или переустановить) — клиентский кэш - сам не сбросится. Это документируется, но не решается серверно. -- **`.htaccess` и rsync --delete**: деплой hugo (make deploy) использует - `rsync --delete public/`. `.htaccess` в `static/.well-known/` копируется в - `public/` и не затирается (файлы в public/ соответствуют static/, но - --delete удаляет только лишнее). Проверено: .htaccess в static/ → - public/.well-known/webfinger/.htaccess. -- Jino: `RedirectMatch` (mod_alias) работает; **mod_rewrite не работает** — - НЕ использовать RewriteRule. -- Статический index.html в webfinger УДАЛЁН — не восстанавливать. \ No newline at end of file diff --git a/openspec/changes/fix-apex-webfinger-and-registration/proposal.md b/openspec/changes/fix-apex-webfinger-and-registration/proposal.md deleted file mode 100644 index 1df5a0d..0000000 --- a/openspec/changes/fix-apex-webfinger-and-registration/proposal.md +++ /dev/null @@ -1,80 +0,0 @@ -## Why - -Пользователь обнаружил, что в клиентах Tusky и Mastodon адрес его аккаунта -отображается как `@kpa39l@social.dedinit.ru` (длинный), хотя ожидался короткий -`@kpa39l@dedinit.ru`. Дополнительно: в феде виден только свой пост, и нужно -открыть регистрацию на инстансе (до 10 пользователей в день). - -## Investigation - -Разбор показал: - -1. **Корень проблемы с адресом** — статический WebFinger на apex-домене: - - Инстанс (GtS) настроен split-domain: host=`social.dedinit.ru`, - account-domain=`dedinit.ru`. Сам GtS отдаёт корректный webfinger: - `https://social.dedinit.ru/.well-known/webfinger?resource=acct:kpa39l@dedinit.ru` - → `subject: acct:kpa39l@dedinit.ru` (короткий). - - Но клиенты (Tusky/Mastodon) при резолве `@kpa39l@dedinit.ru` ходят на - **apex** `dedinit.ru/.well-known/webfinger`, где лежал **статический** - `index.html` с захардкоженным JSON про `estorozhenko` (игнорировал - `resource`). Клиент получал ответ про другого пользователя → показывал - фолбэк-адрес на основе host (`social.dedinit.ru`). -2. **Регистрация** была закрыта: `/api/v1/instance` → `registrations: false`, - `approval_required: true`. -3. **SMTP** настроен (smtp.jino.ru:587, social@dedinit.ru), но не проверялся. - -## Solution - -### 1. Динамический WebFinger на apex (Jino) - -Apex обслуживается на Jino (Apache, без PHP/SSH-exec). Проверено: **mod_alias -`RedirectMatch` работает**. В `.htaccess` (webroot `/.well-known/webfinger/`) -добавлен редирект: - -``` -RedirectMatch 301 ^/\.well-known/webfinger(.*)$ https://social.dedinit.ru/.well-known/webfinger$1 -``` - -Теперь `dedinit.ru/.well-known/webfinger?resource=...` отдаёт 301 на GtS, -который динамически резолвит ЛЮБОЙ аккаунт (включая будущих пользователей) — -короткий адрес `@user@dedinit.ru` восстанавливается для всех клиентов. - -Аналогичный редирект добавлен для `/.well-known/nodeinfo`. - -`host-meta` на apex уже указывал на template `social.dedinit.ru/.well-known/webfinger` -— оставлен. - -### 2. Регистрация (10 пользователей/день) - -В `docker compose.yml` (env GTS_*): - -- `GTS_ACCOUNTS_REGISTRATION_OPEN: "true"` -- `GTS_ACCOUNTS_REGISTRATION_DAILY_LIMIT: "10"` -- `GTS_ACCOUNTS_REGISTRATION_BACKLOG_LIMIT`: не задан → дефолт 20 (очередь - одобрения). При желании можно поставить явно. - -`approval_required` остаётся `true` (GtS по умолчанию требует одобрение админом -новых аккаунтов; при лимите 10/день очередь управляема). - -### 3. Проверка SMTP - -SMTP-конфиг проверен тестовым письмом: smtp.jino.ru:587 STARTTLS, -auth social@dedinit.ru → письмо успешно отправлено на kpa39l@yandex.ru. -SMTP работает, проблем нет. - -## Files Changed - -- `docker-compose.yml` (gotosocial): +2 env registration -- `static/.well-known/webfinger/.htaccess` (dedinit.ru): RedirectMatch 301 -- `static/.well-known/nodeinfo/.htaccess` (dedinit.ru): RedirectMatch 301 -- Jino webroot: удалён статический `index.html` из `/.well-known/webfinger/` - (заменён .htaccess-редиректом) - -## Verification - -- `curl -L 'https://dedinit.ru/.well-known/webfinger?resource=acct:kpa39l@dedinit.ru'` - → `subject: acct:kpa39l@dedinit.ru` (короткий) -- `curl -L 'https://dedinit.ru/.well-known/webfinger?resource=acct:estorozhenko@dedinit.ru'` - → `subject: acct:estorozhenko@dedinit.ru` -- `curl 'https://social.dedinit.ru/api/v1/instance'` → `registrations: true` -- SMTP-тест: OK \ No newline at end of file diff --git a/openspec/changes/fix-apex-webfinger-and-registration/tasks.md b/openspec/changes/fix-apex-webfinger-and-registration/tasks.md deleted file mode 100644 index 1a04fea..0000000 --- a/openspec/changes/fix-apex-webfinger-and-registration/tasks.md +++ /dev/null @@ -1,39 +0,0 @@ -## Context - -- Инстанс: social.dedinit.ru (GtS 0.22.1, docker на bigbox), account-domain dedinit.ru. -- Apex: dedinit.ru (Jino/Apache, доступ SFTP kpa39l.myjino.ru:2222). -- GtS конфигурируется ТОЛЬКО через GTS_* env (config.yaml не подхватывается). - -## Tasks - -### 1. Apex WebFinger → динамический - -- [x] 1.1 Создать `static/.well-known/webfinger/.htaccess` в репо dedinit.ru: - `RedirectMatch 301 ^/\.well-known/webfinger(.*)$ https://social.dedinit.ru/.well-known/webfinger$1` -- [x] 1.2 Залить .htaccess на Jino (`/dedinit.ru/.well-known/webfinger/.htaccess`) через SFTP -- [x] 1.3 Удалить статический `index.html` из `/dedinit.ru/.well-known/webfinger/` -- [x] 1.4 Проверить: `curl -L 'https://dedinit.ru/.well-known/webfinger?resource=acct:kpa39l@dedinit.ru'` - → `subject: acct:kpa39l@dedinit.ru` - -### 2. Nodeinfo apex → динамический - -- [x] 2.1 Создать `static/.well-known/nodeinfo/.htaccess` (RedirectMatch 301 на social) -- [x] 2.2 Залить на Jino, проверить `curl -L 'https://dedinit.ru/.well-known/nodeinfo'` - -### 3. Регистрация (10/день) - -- [x] 3.1 В `docker-compose.yml`: `GTS_ACCOUNTS_REGISTRATION_OPEN=true`, - `GTS_ACCOUNTS_REGISTRATION_DAILY_LIMIT=10` -- [x] 3.2 `docker compose up -d gotosocial` (recreate) -- [x] 3.3 Проверить `/api/v1/instance` → `registrations: true`; env в контейнере - -### 4. SMTP - -- [x] 4.1 Тестовое письмо через smtplib (smtp.jino.ru:587 STARTTLS, social@dedinit.ru) - на kpa39l@yandex.ru — доставлено - -### 5. Финализация OpenSpec - -- [x] 5.1 Валидация change: `openspec validate fix-apex-webfinger-and-registration` -- [ ] 5.2 Коммит + пуш docker-compose.yml (gotosocial) и .htaccess (dedinit.ru) -- [ ] 5.3 Архив change (`openspec archive`) \ No newline at end of file diff --git a/openspec/changes/fix-apex-webfinger-and-registration/specs/gotosocial/webfinger-and-registration/spec.md b/openspec/specs/gotosocial/webfinger-and-registration/spec.md similarity index 88% rename from openspec/changes/fix-apex-webfinger-and-registration/specs/gotosocial/webfinger-and-registration/spec.md rename to openspec/specs/gotosocial/webfinger-and-registration/spec.md index f5a4e61..ab2fa75 100644 --- a/openspec/changes/fix-apex-webfinger-and-registration/specs/gotosocial/webfinger-and-registration/spec.md +++ b/openspec/specs/gotosocial/webfinger-and-registration/spec.md @@ -1,10 +1,9 @@ -## Why +# gotosocial/webfinger-and-registration Specification -Клиенты отображают длинный адрес `@user@social.dedinit.ru` вместо короткого -`@user@dedinit.ru`, потому что apex-WebFinger был статическим. Нужно открыть -регистрацию с суточным лимитом. +## Purpose +TBD - created by archiving change fix-apex-webfinger-and-registration. Update Purpose after archive. -## ADDED Requirements +## Requirements ### Requirement: Apex WebFinger резолвит любой аккаунт @@ -49,4 +48,4 @@ - **GIVEN** SMTP-конфиг в docker-compose.yml + пароль в .env - **WHEN** отправляется письмо на kpa39l@yandex.ru -- **THEN** сервер SMTP принимает сообщение (250), письмо доставляется \ No newline at end of file +- **THEN** сервер SMTP принимает сообщение (250), письмо доставляется