Audion Hub Manager — история
Audion Hub Manager — история
English · О программе · Руководство · Решения
Содержание
История нужна не ради счёта версий, а чтобы не чинить дважды одно и то же. Здесь записано, что менялось и почему.
1.10.0
Испорченный реестр больше не мешает запуску. Одна лишняя запятая в config/projects.json роняла программу с трассировкой ещё до появления окна: реестр читался строгим разбором на этапе загрузки. Теперь чтение настроек при запуске откатывается к умолчаниям, сохраняет уцелевшие записи и говорит о проблеме в окне вывода. Пустой или нечитаемый реестр даёт временный проект, указывающий на саму программу, — окно открывается, и настройки правятся изнутри.
План зеркалирования перепроверяется перед записью. Применение доверяло корням, записанным в файле плана, — устаревший или отредактированный план мог удалить по пути, пересекающемуся с исходником. Профиль и запрет пересечения проверяются заново, прежде чем что-либо будет записано или удалено.
Изменение поведения: ошибка копирования безусловно запрещает удаление. Прежде настройка delete_after_successful_copy: false позволяла удалять после сбоев — ровно в том случае, когда зеркало способно потерять файлы, существующие только в нём. Настройка осталась в конфигурации, но отключить эту защиту больше не может.
Команды через движок, а не через строку оболочки. Создание пакета и приём перемоткой собирали командную строку в окне, подставляя в неё путь файловой системы: имя папки с & или кавычкой ломало команду. Теперь обе идут списком доводов. Нужные функции движка существовали всё это время и просто не вызывались.
Опознание в панели задач. Имя, уже начинающееся с марки, больше не получает второй приставки: программа зовётся Audion.Hub.Manager, а не Audion.Tools.Audion.Hub.Manager. Windows группирует окна именно по этому имени.
Новый значок — белый трёхлучевой знак на почти чёрной плитке со скруглением, в размерах от 16 до 256 точек; ниже 32 точек упрощённый вариант, где три отдельных узла сливаются. Прежний значок сохранён.
Убраны два помощника обращения к серверу, которыми ничто не пользовалось.
1.9.0
Токен заработал сразу. Прежде каждая кнопка читала токен обратно из хранилища — и введённый в поле не делал ничего, пока не был сохранён. Получалось, что сохранение было условием работы, а не удобством. Теперь введённый токен используется немедленно, а «запомнить токен» делает ровно то, что обещает названием: помнит между запусками. Строка состояния называет, каким именно токеном воспользуются кнопки.
Забывание чистит оба места сразу — и поле, и запомненную копию в хранилище учётных данных.
1.8.0
Клонирование появилось в панели удалённых, где не было вовсе. Берёт адрес из поля, клонирует рядом с папкой активного проекта, отказывается клонировать поверх существующей папки и запускает git списком доводов, а не через оболочку.
Клонирование не виснет. Оно идёт с запретом на запрос пароля: запрос из окна всё равно некому увидеть, и вместо ожидания в пустоту программа сразу предупреждает, что Git читает хранилище, а не форму.
Панель удалённых помнит выбор — платформу и вид адреса между запусками, и открывается там, где её оставили, а не сбрасывается на GitHub.
1.7.3
Области действия токена следуют маршруту, а не объекту. Проверка на живом сервере Forgejo 15 показала: создание репозитория лежит под /api/v1/user/* и потому требует права на пользователя, а не на репозиторий. Git по HTTPS оценивается отдельно и требует права на репозиторий в любом случае — одним набором закрыть и обращения к серверу, и Git нельзя.
Записано, чем плох адрес с учётными данными: Git пишет такой токен открытым текстом в .git/config рабочей копии, где он переживает каждый резерв и каждое зеркало этой папки. Та же семья ошибок, что секрет в параметрах адреса, и полностью обходится через помощника учётных данных.
1.7.2
Закрыт путь внедрения команды. Разбор адреса сохраняет ;, && и $(…) внутри имени хоста, а это имя подставлялось в пробу ssh -T, которую окно запускает через оболочку. Файл forgejo_hosts.json, приехавший с клонированным проектом, мог таким образом выполнить команду на первой же пробе. Имя хоста, пользователь и порт проверяются там, где сходятся все пути; враждебные записи отбрасываются вместо загрузки; адреса со встроенными учётными данными отвергаются сразу.
Отвергаются адреса, заставляющие Git выполнить команду (ext::, fd::), адреса, начинающиеся с дефиса, — Git прочтёт их как ключ, — и адреса с управляющими символами. Проверка идёт и при сохранении из панели, и при применении файла настроек, чтобы конфигурация из чужого проекта не протащила такой адрес.
Предупреждение о простом HTTP перед отправкой токена: для сервера в домашней сети это законно, но токен пойдёт по проводу открытым.
1.7.1
Сервер, введённый в форму, больше не теряется. Запись настроек шла через функцию, которая выходила раньше времени, если учётная запись уже совпадала, — и хост не попадал в файл, так что при следующем запуске его приходилось вводить заново.
Разбор настроек стал устойчивым к ошибкам. Файл, поправленный руками с опечаткой, прежде ронял обработчик события: панель читает его при каждом переключении платформы и каждом нажатии клавиши в поле адреса.
Список репозиториев больше не обрезается молча. Перебор страниц останавливается на тысяче записей, и достижение потолка теперь называется вслух, а не выдаётся за полный список.
Негодный порт отвергается, а не подменяется тихо на двадцать второй — это строило правдоподобный адрес, который отказывал потом, при отправке.
Адрес со встроенным логином или токеном не сохраняется в config/remotes.json — это файл, попадающий в коммит, и секрет был бы опубликован следующей записью.
Удаление токена требует названной учётной записи: хранилища учётных данных различают записи по хосту и имени, поэтому пустое имя не совпадало ни с чем, сообщая при этом об успехе.
1.7.0
Поддержка своих серверов Forgejo и Gitea. Файл config/forgejo_hosts.json описывает сервера — адрес, пользователя и порт SSH, предпочтительный вид адреса, запомненную учётную запись — и не содержит секретов.
Принят обычный договор учётной записи: личный токен доступа, проверяемый запросом к серверу и передаваемый помощнику учётных данных. В настройки проекта не пишется ничего, а обычная отправка по HTTPS подхватывает тот же токен.
Вход через OAuth2 рассмотрен и отклонён: в Forgejo для него не реализованы области действия, такие токены несут административные права учётной записи, быстро истекают и сами по себе отправку не обслуживают.
403 отделено от 401 в каждом обращении. Недостаточное право теперь сообщает: «токен верный, но создан без права, которое нужно этому вызову», — называет требуемое право и предлагает рабочий набор, вместо голого кода состояния рядом с токеном, который на самом деле в порядке.
Текст ошибки сервера затирается перед показом. Forgejo цитирует неизвестный токен обратно в сообщении — и отозванный или истёкший токен появился бы в окне вывода дословно, а оттуда в снимках экрана и скопированном тексте.
Записан случай 413 для серверов за прокси или туннелем с ограничением на размер запроса: упирается в него именно первая отправка истории, а обход — отправка по SSH, в том числе через проброс порта.
Ранние версии
0.2.x — планирование: договоры безопасности зеркала, разделение слоёв, профили фильтрации. v0.1.0 — скелет приложения.
Из этого периода в программу перешли правила, изложенные в Решениях: они собраны по следам настоящих поломок Disk Auditor, и повторять их заново не нужно.