SHiNE-server/Dev_Docs/Personal_Messages/Черновик_будущих_DM_вложений.md

3.3 KiB
Raw Permalink Blame History

Черновик будущих вложений в DM

Важно

Этот документ описывает только ранний черновик идеи.

Сейчас в проекте нет поддержки вложений в личных сообщениях:

  • в реализованном формате SHiNE_DM поле attachmentsCount пока всегда должно быть 0;
  • UI не показывает кнопку прикрепления файлов;
  • сервер не принимает upload файлов для DM;
  • сервер не раздаёт специальные DM-файлы по отдельным endpoints;
  • сервер не хранит отдельные файловые связи для личных сообщений.

Этот документ нужен только для того, чтобы рядом с актуальной документацией было явно видно:

  • какие идеи обсуждались;
  • что это не реализовано;
  • что формат, хранение и способ загрузки потом могут сильно измениться.

Что обсуждалось

Рассматривался такой общий подход:

  • у контентного DM есть внешний список вложений;
  • во внешнем формате лежат только технические данные;
  • человекочитаемые данные о файле живут внутри зашифрованного тела сообщения;
  • один и тот же blob-файл теоретически мог бы переиспользоваться в нескольких сообщениях.

Черновой вариант внешнего списка:

  • attachmentsCount
  • далее для каждого вложения:
    • encFileHashSHA256 (32 bytes)
    • encFileSize (u64)

Черновой вариант внутреннего маркера в тексте:

<<file:file-format(1.0):type|fileName|origSize|origHashB64u|encHashB64u|encSize|keyB64u|nonceB64u>>

Где обсуждались поля:

  • type
  • fileName
  • origSize
  • origHashB64u
  • encHashB64u
  • encSize
  • keyB64u
  • nonceB64u

Что может измениться

В будущем могут измениться любые части идеи:

  • сам бинарный формат;
  • способ привязки файлов к сообщению;
  • момент загрузки файла относительно отправки сообщения;
  • серверное хранение blob-файлов;
  • права доступа к скачиванию;
  • способ рендера вложения в UI.

Именно поэтому этот файл не надо воспринимать как актуальную спецификацию.

Источник истины на сейчас

Актуальное состояние личных сообщений описано только в:

  • Dev_Docs/Personal_Messages/README.md

Если между этим черновиком и основным README есть расхождение, верным считается README.md.