Перейти к содержанию

Патч 3.5.0.12 (01.08.2021)

Переход на новую сборку

  1. Обновите файл app.json для сервиса web.
  2. Изменены библиотеки локализации.

Добавление и изменение функциональности

  1. В файлах NLog.config для всех сервисов и приложений теперь указано включение содержимого файлов NLog-*.config. Это позволяет удобно настраивать логирование со специфичными настройками, которые могут, например, применяться для одного сервера и не применяться для другого.
  2. В TessaAdmin на вкладке “Карточки” добавлена фильтрация по имени типа.
  3. В файле app.json веб-сервиса добавлен раздел ResponseHeaders, в котором можно перечислить значения заголовков, передаваемых в каждый ответ на запрос. По умолчанию указаны заголовки X-Frame-Options и X-XSS-Protection, это улучшает противодействие некоторым видам атак. Вы можете настроить поведение в app.json.
  4. В файлах app.json допустимо использовать комментарии. Они задаются как в C# (без кавычек): “// comment” или “/* multiline comment */”.
  5. В файл app.json веб-сервиса добавлена настройка SessionExpirationTimeSpan, посредством которой можно управлять максимальным сроком жизни сессии. Desktop-клиенты (TessaClient, TessaAdmin, TessaAppManager) пересоздают сессию, когда срок её жизни подходит к концу, тогда как для web-клиента срок определяет, сколько времени может использоваться токен сессии в cookies перед тем, как пользователю будет отображено окно логина. По умолчанию 7 дней.
  6. В файл app.json веб-сервиса добавлена настройка CookiesSameSite, определяющая параметры cookies, создаваемых при логине, для разрешения или запрета их отправки при выполнении cross site запросов.
  7. В файл app.json веб-сервиса добавлена настройка AllowedRefererValues, в которой можно перечислить допустимые значения HTTP-заголовка Referer, которые проверяются на каждый запрос. При проверке актуальное значение заголовка должно начинаться с подстроки, указанной в этом списке, без учёта регистра. Используйте эту настройку для противодействия CSRF-атакам.
  8. После смены пароля в web-клиенте теперь выполняется закрытие сессии, и пользователю отображается окно логина. Это требуется для обеспечения безопасности, чтобы предыдущую сессию нельзя было использовать, если каким-то образом токен сессии был получен злоумышленником. Для desktop-клиентов сессия пересоздаётся без закрытия приложения, незаметно для пользователя.
  9. Если в системе включены настройки безопасности на количество попыток и/или серию попыток по неудачному вводу пароля, то эти настройки теперь также применяются в окне изменения пароля при проверке старого пароля. После большого количества попыток некорректно ввести пароль в этом окне пользователь может быть заблокирован (на время или до ручной разблокировки администратором, в зависимости от настроек).
  10. Утилита tadmin: команде SetKey в параметре /path теперь можно передать не только папку, но и путь до файла, в котором требуется заменить ключ.
  11. Утилита tadmin: для команды CheckDatabase добавлен параметр “/db:databaseName”, посредством которого определяется имя базы данных, подключение к которой выполняется. Без параметра команда по-прежнему проверяет подключение к базе master/postgres, независимо от базы, заданной в строке подключения. Укажите пустую строку в качестве databaseName “/db:”, чтобы использовать то же имя базы, что и в строке подключения.
  12. API: В desktop-клиенте для интерфейса области с постраничным предпросмотром PDF-файлов IFilePagingControlModel добавлены свойства ***CommandClosure, позволяющие переопределить команды для кнопок перехода между страницами и для кнопок поворота страниц.
  13. API: Изменено поведение объекта Tessa.Platform.DbScopeSequentialGuidProvider при задании значения null параметру dbScope конструктора. В этом случае последовательность генерируется способом по умолчанию, который подходит для MSSQL, но не PostgreSQL.
  14. API: В метод ILoginProvider.GetLoginParametersAsync добавлен параметр title, посредством которого возможно изменить заголовок окна логина, отображаемого для этого вызова метода.
  15. API: В desktop-клиенте для области предпросмотра IFilePreviewModel (стандартной на вкладке IFormViewModel и для контролов “Предпросмотр файлов”) добавлена возможность переопределить контрол WPF или модель представления, которая будет отображена в области предпросмотра вместо стандартного UI. Для этого используйте функции TryLoadCustomPreviewFuncAsync и UnloadCustomPreviewFuncAsync в интерфейсе IFilePreviewModel.
  16. API: В метод IValidationResultBuilder.Build() добавлен опциональный параметр localize (false по умолчанию). Если указано localize = true, то текст всех сообщений валидации и их детали обрабатываются методом LocalizationManager.Format(text) для локализации плейсхолдеров форматирования {$Placeholder}.
  17. API: В плагинах Chronos, наследуемых от класса Plugin, добавлено свойство StopRequestedToken типа CancellationToken, которое можно использовать в методе EntryPointAsync, чтобы остановить асинхронную операцию в момент запроса остановки, а не позднее перед таймаутом на запрос остановки. StopRequestedToken срабатывает в тот же момент, что и устанавливается свойство StopRequested.
  18. API: В web-клиенте в обсуждениях без топиков (EmptyForumViewModel) добавлена возможность добавлять команды в выпадающее меню.
  19. API: На сервере добавлена зависимость IHtmlSanitizer, посредством которой можно очистить содержимое html-документа или html-фрагмента от потенциально вредоносных скриптов и тегов. Используйте метод для противодействия XSS атакам перед отображением html в браузере.
  20. API: Обновлены библиотеки: .NET Core 3.1.17, BarcodeLib 2.4.0, ITfoxtec.Identity.Saml2 4.6.3, Kerberos.NET 4.5.115, MailKit 2.14.0, NLog.Web.AspNetCore 4.13.0, NTwain 3.7.0, Quartz 3.3.3, StackExchange.Redis 2.2.62.

Исправления и оптимизации

  1. В desktop-клиенте функция проверки значения ValidationFunc для контрола “Нумератор” теперь функционирует в модальном диалоге.
  2. В desktop-клиенте для контрола “Нумератор” исправлено отображение подсказки, заданной в расширениях, если пользователь выполнил действия с нумератором. Теперь отображается и заданная подсказка, и выполненное действие.
  3. Исправлена рассылка уведомлений об окончании срока действия пароля. Исправление актуально, если в карточке “Настройки сервера” на вкладке “Безопасность” указано непустое значение в поле “Срок действия пароля, дни”.
  4. Исправлена регистрация объекта Tessa.Platform.DbScopeSequentialGuidProvider, если в контейнере недоступна зависимость IDbScope.
  5. В desktop-клиенте исправлены ситуации, когда обработчики PropertyChanged на некоторые свойства моделей представлений с интерфейсом IFormViewModel и с его наследниками, такие как свойство SelectedTab, могли запускаться не в потоке UI, что приводило к ошибкам доступа к потоку Dispatcher.
  6. В web-клиенте исправлена ошибка, из-за которой сабсеты с одинаковыми именами могли пропадать при обновлении узла.
  7. В web-клиенте в контроле “Таблица” исправлено форматирование ячейки типа DateTime с настройкой “Только время”.
  8. В TessaClient устранено зависание при обновлении узла дерева, содержащего сабсеты с одинаковыми идентификаторами.
  9. В TessaClient добавлено логирование и отображение в UI ошибок, возникающих при открытии сабсета.
  10. Исправлены конструкторы объекта CardContentContext, которые требовали наличие необязательного параметра validationResult, отличного от null, хотя документация описывала корректное поведение в случае, когда передавался null. Эта ошибка косвенно приводила к невозможности поменять фон в web-клиенте на нестандартный фон из файла с изображением.
  11. В web-клиенте исправлено отображение списка заданий в карточке внутри диалога.
  12. Оптимизировано редактирование типов карточек в TessaAdmin.
  13. В методе KrScript.GetMainCardAsync исправлена ошибка NRE. Ошибка возникала, если выполнение осуществляется вне KrScopeContext, и параметр validationResult имеет значение null.
  14. В методе ObviousMainCardAccessStrategy.GetCardAsync исправлена ошибка NRE. Ошибка возникала, если объект был инициализирован с параметром card, равным значению null.
  15. В маршрутах исправлена ошибка потери результатов валидации. Она возникала, например, при загрузке карточки с помощью метода IKrScope.GetMainCardAsync, если при этом происходит ошибка в расширении CardGetExtension в методе AfterRequest.
  16. В desktop-клиентах исправлена прокрутка пальцами на тач-скрине во вкладках карточки, в списке обсуждений, в области с заданиями, в списке выбора этапов маршрутов для добавления и в окнах TessaAdmin.
  17. В web-клиенте исправлена ошибка, приводившая к закрытию диалога создания нового топика после отображения ошибки при сохранении с пустым заголовком.
  18. В web-клиенте исправлена ошибка в обсуждениях, не позволявшая отправить сообщение без текста с вложениями.
  19. Исправлен скролл колесом мыши в различных элементах интерфейса в desktop-приложениях. Ошибка появилась в сборке 3.5.0.
  20. В desktop-клиенте для кнопок “Добавить” и “Удалить” под контролом “Таблица” исправлено изменение размеров, если расширение заменило текст в кнопках на длинный.
  21. Исправлено повторное открытие сессии в desktop-клиенте при близости её срока окончания действия, если приложение не было перезапущено после изменения пароля.
  22. Улучшен вывод сообщений об ошибках в API карточек при обработке исключений ValidationException. Теперь не выполняется их оборачивание в ещё один объект ValidationException.
  23. Исправлены ситуации, когда cancellationToken мог преждевременно отменить откат транзакции при вызовах RollbackTransaction.
  24. При использовании реализации RoleManager для расчёта ролей (вместо текущей реализации AdvancedRoleManager), теперь пересчёт замещений контекстных ролей выполняется в отдельной транзакции, что предотвращает возможные блокировки в базе данных.
  25. Текст html-сообщений форумов очищается на сервере от потенциально опасных html-тегов и атрибутов для противодействия XSS атакам.
  26. Содержимое ссылок на файлы web-клиента /api/filelink с параметром asHTML=true очищается на сервере от потенциально опасных html-тегов и атрибутов для противодействия XSS атакам.
  27. В почтовых уведомлениях о новых сообщениях в обсуждениях исправлен вывод даты/времени сообщений с учётом часового пояса сотрудника.
  28. В команде tadmin ImportUsers исправлено определение временной зоны для сотрудника и подразделения на СУБД PostgreSQL.
Back to top