Видео. Теперь можно прикреплять видео к постам и комментариям! (И внутрь текста поста его тоже можно вставлять.) Пока максимальный размер ограничен 150 Mb, исключительно для экономии места в хранилище.
Хранение файлов в облаке. Сервер теперь умеет хранить картинки, видео и другие файлы в облачном хранилище на Amazon S3. Это гораздо дешевле, чем в локальной файловой системе, а место ограничено только бюджетом. Заодно и загружаться будут чуть быстрее.
Сжатие картинок на сервере. Сжатие больших картинок теперь происходит на сервере, а не на клиенте. Благодаря этому появилась возможность применить несколько недоступных на клиенте хороших техник, одновременно улучшив и степень сжатия, и качество итоговой картинки. Максимальный размер картинки до сжатия: не больше 8192 px по каждой стороне, не больше 40 Mpx в целом, не больше 20 Mb для форматов JPEG и PNG и не больше 3 Mb для всех остальных форматов. Картинки большего размера будут показываться просто как прикреплённые файлы. Все сжатые картинки теперь сохраняются в формате JPEG.
Прикреплённые файлы любого типа. Теперь можно прикреплять к посту или комментарию любые файлы, не только картинки. Ограничения по размеру такие же, как и для видео.
Любые файлы — значит, вредоносные тоже. Проблема реальна, и нужно её решить по-мойровски, не создавая концентрацию власти в одних руках. Разумеется, невозможно обнаружить любой вредоносный файл в момент загрузки, но, по крайней мере, можно создать базу данных известных вредоносных файлов и блокировать их загрузку пользователями. Для этого был создан специальный аккаунт Security Guard, который хранит эту базу данных (список хэшей), а остальные могут сверяться с ней. Таких баз данных может быть много, любой пользователь может выбрать, к какой из них подключаться (или к нескольким сразу) и подключаться ли вообще.
Кто и когда проверяет? На клиентском устройстве организовать проверку сложно, а узлу, на котором лежит файл, доверять нельзя — он может распространять вредоносные файлы намеренно. Остаётся домашняя нода. Поэтому каждый прикреплённый файл, который вы собираетесь скачать, сначала передаётся на вашу домашнюю ноду, проверяется там по списку, который вы для себя выбрали, и если проверка прошла успешно — становится доступным для скачивания. Это может занять некоторое время, но это ради вашей же безопасности 😉
Вот пример «вредоносного» файла, чтобы вы увидели, как это работает.
В дальнейшем, на домашней ноде могут быть установлены какие-то более совершенные системы защиты, или же Security Guard будет проактивно искать в сети файлы и проверять их — всё возможно.
Анонимные комментарии. Для желающих появилась возможность разрешить комментарии для незарегистрированных пользователей. Включается в редакторе постов внизу: Advanced options > Comments > Commenting allowed to и выбираете Everybody (anonymously). Нажатие на звёздочку сделает это настройкой по умолчанию.
Возможности для незарегистрированных пользователей ограничены: у них нет аватарки, нет возможности загружать картинки и редактировать комментарии. Анонимный комментарий сразу отправляется на премодерацию и станет виден всем только после того, как автор поста вручную его раскроет.
Как побочный эффект — появилась возможность включать премодерацию и для других групп пользователей по своему выбору (там же).
Счётчик просмотров. Хозяин блога теперь видит примерное число просмотров каждого поста.
Другие изменения
- Свёрнутые блоки (fold) теперь можно свободно раскрывать при просмотре поста в ленте.
- Если в посте много свёрнутых блоков, в начале поста появляется кнопка Развернуть все / Свернуть все.
- В форме логина и восстановления пароля добавлено напоминание, что в имени в Moera заглавные и строчные буквы важны.
- Если пользователь ввёл своё имя с символом
@в начале, этот символ теперь тихо игнорируется. - В превью ссылки на другой пост в Moera теперь показывается дата этого поста. (Спасибо @unidentified за идею.)
- Во всплывающей карточке пользователя нажатие на число его постов теперь открывает ленту этого пользователя.
- На счётчики реакций и комментариев в списке «Самое популярное» теперь тоже можно нажимать. (Спасибо @tigra за рекомендацию.)
- Открытие несуществующего блога теперь не приводит к бесконечным попыткам загрузки ленты.
- Firefox на Linux в новых версиях задействовал комбинацию клавиш
Ctrl-.для ввода эмодзи. Поэтому красивые кавычки теперь вводятся комбинациямиAlt-[Shift-],иAlt-[Shift-].. - Улучшено копирование постов из X (Twitter). (Спасибо @LeonidKoganStavsky за тестирование.)
- При копировании постов из Telegram добавлено угадывание, где должен быть абзац, а не просто новая строка.
- Исключено сохранение cartes для другого пользователя, при работе с разными аккаунтами в разных вкладках браузера.
- Посещённые ссылки в постах и комментариях показываются другим цветом, как и принято по стандарту.
- Диалог редактирования комментария теперь не заслоняет диалог с вопросом, о комментария из черновика.
- Убран поиск по ленте новостей, потому что поисковик больше не имеет к ней доступа.
- В процессе регистрации у пользователя больше нет возможности опять нажать на кнопку регистрации и оказаться между двух стульев. (Спасибо @IrinaVulf за тестирование.)
- Добавлено сообщение о необходимости обновить страницу, потому что опубликована новая версия клиента.
- Часто посещаемые блоги теперь показываются первыми в подсказках в строке поиска.
- Флеш-уведомления с длинными сообщениями теперь показываются подольше, чтобы можно было успеть их прочесть.
- И ещё много мелких ошибок исправлено.
Техническое
Загрузка больших файлов. Появился API для загрузки больших файлов на ноду — файл разделяется на фрагменты и может загружаться в несколько параллельных потоков.
Аренда больших файлов. При составлении ленты новостей все посты, которые её составляют, копируются на домашнюю ноду. До сих пор так было и с прикреплёнными картинками. Но в случае очень больших файлов это слишком накладно. Поэтому был реализован механизм аренды файлов одной нодой у другой, а клиент теперь умеет показывать посты с прикреплёнными файлами, физически находящимися на другой ноде. Подробное описание механизма аренды есть в документации. При аренде учитываются права доступа, возможность удаления оригинального поста и т.д. Максимальный размер прикреплённого файла, который по-прежнему копируется, а не арендуется, задаётся в настройках.
Черновики, как постов, так и комментариев, теперь хранятся только на домашней ноде.
Медиафайлы теперь загружаются только на домашнюю ноду. Если вы написали комментарий под чужим постом, и к комментарию прикреплён файл, изначально нода, на которой расположен комментарий, только арендует этот файл у вас. Но она может его потом скопировать, если посчитает нужным.
Это имеет два хороших последствия. Во-первых, не нужно думать, какого размера картинки и файлы разрешает блог, где вы комментируете. Обратите внимание, что теперь вы можете добавлять в комментах картинки и видео без сжатия. Во-вторых, убирается возможность DoS-атаки путём заливки большого числа картинок на чужую ноду.
Новая структура хранилища медиафайлов. Структура локального хранилища медиафайлов тоже поменялась. Теперь в нём нет явного разделения на публичную и приватную часть. Доступ ко всем файлам выдаётся в виде presigned URLs — URL с дополнительным параметром, в котором содержится криптографическая подпись. Подпись проверяется на стороне nginx.
Анонимный пользователь. Все комментарии от незарегистрированных пользователей подписываются зарезервированным именем пользователя unk и одним и тем же ключом. Этот ключ общеизвестен. Когда нода получает комментарий от unk, она сама подписывает его этим ключом.
Анонимный пользователь работает по принципу «запрещено всё, что не разрешено явно» — пока это только отправка комментариев и просмотр своих комментариев в течение 3 часов, если они не раскрыты автором поста.
Поскольку все анонимные пользователи работают под одним именем, идентификация конкретного пользователя происходит по случайному client ID, который генерируется клиентом, сохраняется в метаданных комментария на 3 часа и потом удаляется. Это позволяет анонимному пользователю в течение ограниченного времени видеть свой (и только свой) комментарий, даже если он ещё не раскрыт.
Client ID передаётся в HTTP-заголовке Client-ID, который теперь состоит из двух частей: постоянной, которая обновляется не чаще, чем раз в 3 часа, и переменной, которая обновляется при каждой перезагрузке страницы.
Мелкое техническое
- Moera node теперь требует Java 21 или выше и PostgreSQL 12 или выше.
- Carte теперь поддерживает привязку к нескольким IP-адресам, чаще всего это IPv4 и IPv6-адреса одного и того же сервера. В файле конфигурации теперь тоже можно указывать несколько адресов.
- Максимальная длина имени теперь везде одинакова и составляет 135 символов.
- Убрано отдельное право
view-media, потому что оно не имеет смысла с presigned URLs. Теперь проверяется толькоview-content.