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

Патч 3.6.0.2 (02.08.2021)

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

  1. В файлах NLog.config для всех сервисов и приложений теперь указано включение содержимого файлов NLog-*.config. Это позволяет удобно настраивать логирование со специфичными настройками, которые могут, например, применяться для одного сервера и не применяться для другого.
  2. Добавлено логирование ошибок при выполнении представлений с созданием карточки ошибки. Для отключения логирования ошибки необходимо в запросе ITessaViewRequest указать значение свойства SkipErrorLogging равным true. Для сессий пользователей без прав администратора значение игнорируется.
  3. В TessaAdmin на вкладке “Карточки” добавлена фильтрация по имени типа.
  4. В файле app.json веб-сервиса добавлен раздел ResponseHeaders, в котором можно перечислить значения заголовков, передаваемых в каждый ответ на запрос. По умолчанию указаны заголовки X-Frame-Options и X-XSS-Protection, это улучшает противодействие некоторым видам атак. Вы можете настроить поведение в app.json.
  5. В файлах app.json допустимо использовать комментарии. Они задаются как в C# (без кавычек): “// comment” или “/* multiline comment */”.
  6. В файл app.json веб-сервиса добавлена настройка SessionExpirationTimeSpan, посредством которой можно управлять максимальным сроком жизни сессии. Desktop-клиенты (TessaClient, TessaAdmin, TessaAppManager) пересоздают сессию, когда срок её жизни подходит к концу, тогда как для web-клиента срок определяет, сколько времени может использоваться токен сессии в cookies перед тем, как пользователю будет отображено окно логина. По умолчанию 7 дней.
  7. В файл app.json веб-сервиса добавлена настройка CookiesSameSite, определяющая параметры cookies, создаваемых при логине, для разрешения или запрета их отправки при выполнении cross site запросов.
  8. В файл app.json веб-сервиса добавлена настройка AllowedRefererValues, в которой можно перечислить допустимые значения HTTP-заголовка Referer, которые проверяются на каждый запрос. При проверке актуальное значение заголовка должно начинаться с подстроки, указанной в этом списке, без учёта регистра. Используйте эту настройку для противодействия CSRF-атакам.
  9. В файл app.json сервиса Chronos добавлена настройка Maintenance.RemoveClosedSessionsOlderThanDays, в которой указывается количество дней неактивности, по истечении которых открытые сессии удаляются. Удаление запускается ежедневно вместе с другими плагинами группы Maintenance. Если указать неположительное число дней, то плагин будет отключён. По умолчанию сессии закрываются спустя 8 дней неактивности, как это работало в предыдущих версиях системы, но без возможности выполнить настройку.
  10. В файл app.json веб-сервиса добавлена настройка HstsMaxAgeDays в группе WebServer. В ней указывается количество дней, на которые браузер будет запоминать, что к серверу обращение выполняется по HTTPS (заголовок Strict-Transport-Security, атрибут max-age).
  11. После смены пароля в web-клиенте теперь выполняется закрытие сессии, и пользователю отображается окно логина. Это требуется для обеспечения безопасности, чтобы предыдущую сессию нельзя было использовать, если каким-то образом токен сессии был получен злоумышленником. Для desktop-клиентов сессия пересоздаётся без закрытия приложения, незаметно для пользователя.
  12. Если в системе включены настройки безопасности на количество попыток и/или серию попыток по неудачному вводу пароля, то эти настройки теперь также применяются в окне изменения пароля при проверке старого пароля. После большого количества попыток некорректно ввести пароль в этом окне пользователь может быть заблокирован (на время или до ручной разблокировки администратором, в зависимости от настроек).

Консольная утилита tadmin

  1. Команде SetKey в параметре /path теперь можно передать не только папку, но и путь до файла, в котором требуется заменить ключ.
  2. Для команды CheckDatabase добавлен параметр “/db:databaseName”, посредством которого определяется имя базы данных, подключение к которой выполняется. Без параметра команда по-прежнему проверяет подключение к базе master/postgres, независимо от базы, заданной в строке подключения. Укажите пустую строку в качестве databaseName “/db:”, чтобы использовать то же имя базы, что и в строке подключения.

Новые версии библиотек

  1. .NET 5.0.8
  2. Kerberos.NET 4.5.115
  3. linq2db 3.4.2
  4. MailKit 2.14.0
  5. NLog.Web.AspNetCore 4.13.0
  6. Quartz 3.3.3

Изменения API

  1. В desktop-клиенте для интерфейса области с постраничным предпросмотром PDF-файлов IFilePagingControlModel добавлены свойства ***CommandClosure, позволяющие переопределить команды для кнопок перехода между страницами и для кнопок поворота страниц.
  2. В web-клиенте актуализированы примеры кода в расширении CarUIExtension.
  3. Изменено поведение объекта Tessa.Platform.DbScopeSequentialGuidProvider при задании значения null параметру dbScope конструктора. В этом случае последовательность генерируется способом по умолчанию, который подходит для MSSQL, но не PostgreSQL.
  4. В метод ILoginProvider.GetLoginParametersAsync добавлен параметр title, посредством которого возможно изменить заголовок окна логина, отображаемого для этого вызова метода.
  5. Добавлены методы FormattingHelper.FormatNullable, возвращающие значение константы FormattingHelper.NullText, если переданный объект имеет значение null, иначе строковое представление объекта.
  6. Добавлен метод Tessa.Views.ViewHelper.LogViewExecutionErrorAsync, выполняющий создание карточки ошибки, которая содержит информацию об ошибке выполнения представления.
  7. Добавлен метод Tessa.Cards.CardHelper.TryGetLinkAsync, который возвращает ссылку на открытие карточки в desktop- или в web-клиенте в соответствии с объектом сессии.
  8. В web-клиенте доработана объектная модель обсуждений.
  9. В desktop-клиенте для области предпросмотра IFilePreviewModel (стандартной на вкладке IFormViewModel и для контролов “Предпросмотр файлов”) добавлена возможность переопределить контрол WPF или модель представления, которая будет отображена в области предпросмотра вместо стандартного UI. Для этого используйте функции TryLoadCustomPreviewFuncAsync и UnloadCustomPreviewFuncAsync в интерфейсе IFilePreviewModel.
  10. В метод IValidationResultBuilder.Build() добавлен опциональный параметр localize (false по умолчанию). Если указано localize = true, то текст всех сообщений валидации и их детали обрабатываются методом LocalizationManager.Format(text) для локализации плейсхолдеров форматирования {$Placeholder}.
  11. В плагинах Chronos, наследуемых от класса Plugin, добавлено свойство StopRequestedToken типа CancellationToken, которое можно использовать в методе EntryPointAsync, чтобы остановить асинхронную операцию в момент запроса остановки, а не позднее перед таймаутом на запрос остановки. StopRequestedToken срабатывает в тот же момент, что и устанавливается свойство StopRequested.
  12. В web-клиенте в обсуждениях без топиков (EmptyForumViewModel) добавлена возможность добавлять команды в выпадающее меню.
  13. На сервере добавлена зависимость IHtmlSanitizer, посредством которой можно очистить содержимое html-документа или html-фрагмента от потенциально вредоносных скриптов и тегов. Используйте метод для противодействия XSS атакам перед отображением html в браузере.
  14. Добавлен параметр CancellationToken в метод IViewInterceptor.GetInterceptedViewAliasesAsync.
  15. В web-клиенте добавлена возможность устанавливать собственные средства предпросмотра. Описание возможности приведено в разделе “Дополнительно” руководства разработчика web-расширений.
  16. В desktop-клиенте в методах интерфейса ICAdESManager и в клиентских расширениях CardRequestExtension с типом DefaultRequestTypes.CAdESSignature теперь доступна информация по текущему контексту UIContext.Current, который будет содержать карточку, с файлами которой выполняется действие.

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

  1. В desktop-клиенте функция проверки значения ValidationFunc для контрола “Нумератор” теперь функционирует в модальном диалоге.
  2. В desktop-клиенте для контрола “Нумератор” исправлено отображение подсказки, заданной в расширениях, если пользователь выполнил действия с нумератором. Теперь отображается и заданная подсказка, и выполненное действие.
  3. Исправлена рассылка уведомлений об окончании срока действия пароля. Исправление актуально, если в карточке “Настройки сервера” на вкладке “Безопасность” указано непустое значение в поле “Срок действия пароля, дни”.
  4. Исправлена опечатка в методе IViewCardControlInitializationStrategy.InitializeMatadataAsync.
  5. Исправлена регистрация объекта Tessa.Platform.DbScopeSequentialGuidProvider, если в контейнере недоступна зависимость IDbScope.
  6. Для команд tadmin SchemeCompact и SchemeScript исправлено формирование результата для случая, когда подключенная через параметр /include папка включает несколько библиотек схемы.
  7. В desktop-клиенте исправлены ситуации, когда обработчики PropertyChanged на некоторые свойства моделей представлений с интерфейсом IFormViewModel и с его наследниками, такие как свойство SelectedTab, могли запускаться не в потоке UI, что приводило к ошибкам доступа к потоку Dispatcher.
  8. Исправлена валидация свойства AutoWidthRowLimit в редакторе метаданных представления.
  9. В Chronos исправлен синтаксис app.json, введённый в предыдущем патче: использование переменных окружений в .if и переопределение ключей посредством “key!!”.
  10. В web-клиенте в контроле “Таблица” исправлено форматирование ячейки типа DateTime с настройкой “Только время”.
  11. В TessaClient устранено зависание при обновлении узла дерева, содержащего сабсеты с одинаковыми идентификаторами.
  12. В TessaClient добавлено логирование и отображение в UI ошибок, возникающих при открытии сабсета.
  13. Исправлены конструкторы объекта CardContentContext, которые требовали наличие необязательного параметра validationResult, отличного от null, хотя документация описывала корректное поведение в случае, когда передавался null. Эта ошибка косвенно приводила к невозможности поменять фон в web-клиенте на нестандартный фон из файла с изображением.
  14. В web-клиенте в обусждуниях исправлен перенос длинных слов.
  15. В web-клиенте изменен цвет фона элементов управления в режиме “Только для чтения”.
  16. В web-клиенте уменьшены отступы для текста внутри элемента управления “Текст с форматированием”.
  17. В редакторе виртуальной схемы типа диалога исправлена ошибка, из-за которой колонки секции не удалялись.
  18. В редакторе виртуальной схемы типа диалога исправлена ошибка, из-за которой можно было добавить колонку с системным именем.
  19. В маршрутах исправлены потенциальные NRE и другие ошибки, вызванные возвратом значения null методами: IMainCardAccessStrategy.GetCardAsync и IKrTaskHistoryResolver.ResolveTaskHistoryGroupAsync.
  20. В web-клиенте исправлено отображение списка заданий в карточке внутри диалога.
  21. Оптимизировано редактирование типов карточек в TessaAdmin.
  22. Исправлена ошибка в конвертации представлений из прежнего формата (exchange) в новый (JSON): флаг Multiple параметра представления теперь, если значение не задано явно, принимает по умолчанию значение “true”.
  23. В методе KrScript.GetMainCardAsync исправлена ошибка NRE. Ошибка возникала, если выполнение осуществляется вне KrScopeContext, и параметр validationResult имеет значение null.
  24. В методе ObviousMainCardAccessStrategy.GetCardAsync исправлена ошибка NRE. Ошибка возникала, если объект был инициализирован с параметром card, равным значению null.
  25. В маршрутах исправлена ошибка потери результатов валидации. Она возникала, например, при загрузке карточки с помощью метода IKrScope.GetMainCardAsync, если при этом происходит ошибка в расширении CardGetExtension в методе AfterRequest.
  26. В desktop-клиентах исправлена прокрутка пальцами на тач-скрине во вкладках карточки, в списке обсуждений, в области с заданиями, в списке выбора этапов маршрутов для добавления и в окнах TessaAdmin.
  27. В web-клиенте исправлена ошибка, приводившая к закрытию диалога создания нового топика после отображения ошибки при сохранении с пустым заголовком.
  28. В web-клиенте исправлена ошибка, приводившая к неправильному позиционированию описания топика, если у карточки есть задания.
  29. Исправлен скролл колесом мыши в различных элементах интерфейса в desktop-приложениях. Ошибка появилась в сборке 3.5.0.
  30. В desktop-клиенте для кнопок “Добавить” и “Удалить” под контролом “Таблица” исправлено изменение размеров, если расширение заменило текст в кнопках на длинный.
  31. Исправлено повторное открытие сессии в desktop-клиенте при близости её срока окончания действия, если приложение не было перезапущено после изменения пароля.
  32. Улучшен вывод сообщений об ошибках в API карточек при обработке исключений ValidationException. Теперь не выполняется их оборачивание в ещё один объект ValidationException.
  33. Исправлены ситуации, когда cancellationToken мог преждевременно отменить откат транзакции при вызовах RollbackTransaction.
  34. При использовании реализации RoleManager для расчёта ролей (вместо текущей реализации AdvancedRoleManager), теперь пересчёт замещений контекстных ролей выполняется в отдельной транзакции, что предотвращает возможные блокировки в базе данных.
  35. Текст html-сообщений форумов очищается на сервере от потенциально опасных html-тегов и атрибутов для противодействия XSS атакам.
  36. Содержимое ссылок на файлы web-клиента /api/filelink с параметром asHTML=true очищается на сервере от потенциально опасных html-тегов и атрибутов для противодействия XSS атакам.
  37. В почтовых уведомлениях о новых сообщениях в обсуждениях исправлен вывод даты/времени сообщений с учётом часового пояса сотрудника.
  38. В команде tadmin ImportUsers исправлено определение временной зоны для сотрудника и подразделения на СУБД PostgreSQL.

Обновление на новую сборку

  1. Обновите файл app.json для сервисов web и chronos.
  2. В папке с исходным кодом проектных решений Source добавлены файлы Tessa.Config.Client.targets и Tessa.Config.Server.targets, которые включают в csproj проектов (по умолчанию это проекты тестов) файлы, посредством которых возможно переопределить параметры подключения к веб-сервису для клиентов и к базам данных для сервисов. Обновлены файлы проектов csproj для тестов, в которые добавлены инклюды файлов targets. Вызовите app-init.bat для генерации файлов app-local-*.json в папке с проектным решением, такие файлы индивидуальны для разработчика и не сохраняются в репозитории. Добавьте файлы app-local*.json в папку с индивидуальным проектом, чтобы переопределить любые параметры конфигурации для этого проекта, такое разделение добавлено на смену app.json+app.json.sample. Обновите файлы, чтобы задействовать функциональность в проектном решении.

Back to top