Skip to content

Latest commit

 

History

History
118 lines (98 loc) · 6.38 KB

README.org

File metadata and controls

118 lines (98 loc) · 6.38 KB

Черновик стандарта личных сообщений

Преамбула

Разговоры о личных сообщениях в сетях IDEC ведутся давно – года два. Но к какому либо решению, договоренности так и не пришли. Самая большая проблема – это оставить IDEC простым, plaintext. В этом документе попробуем набросать некий протип, который может быть войдет в стандарт.

Чеклист

  • [-] Описание стандарта в этом документе
    • [-] Формат бадла
    • [-] Формат сообщения на отправку
    • [-] Формат node2node API
    • [-] Формат client API
  • [-] Согласие на принятие стандарта от core-team(ники с Github)
    • [-] vit1-irk
    • [-] btimofeev
    • [-] spline1986
    • [-] Difrex
  • [-] Реализация PoC
    • [-] Сервер
    • [-] Клиент

Стандарт обмена

Сейчас у нас есть практически не используемые поля, такие как, tags и address.

  • tags Теги в IDEC в сообщении представляют из себя список с разделителем /. Так обязательные теги, которые проверяют все ноды/клиенты – это ii/ok. Также у нас имеется тег ответа на сообщение - repto/IZXhLBKJx0rhx0lXYu3L Для личного сообщения предлагается добавить некий тег, например, type/xmail по которому нода сможет определять, что это сообщение является личным.
  • address Адрес сейчас не используется никак и только говорит о том, с какой ноды пишет человек. Предлагается исправить этот недостаток. Мы можем использовать адреса для отправки сообщения определенному поинту на его адрес.

Формат бандла личного сообщения

На основе нижеизложенных фактов предлагается к рассмотрению следующий формат бандла

ii/ok/repto/IZXhLBKJx0rhx0lXYu3L/type/xmail # Тут мы проставлем тег ответа, а так же сообщаем, что сообщение является личным
dynamic,1                              # Вместо эхи мы используем адрес поинта, кому предназначено это сообщение
1455789357                             # Время сообщения в unixtime
Pupkin                                 # Имя пользователя отправившего сообщение
Lunar, 2                               # Адрес поинта отправившего сообщение
Vasya                                  # Имя пользователя, которому предназначенно сообщение
Re: Мое первое сообщение в эху         # Заголовок сообщения
                                       # Пустая строка
текст сообщения                        # Текст сообщения

Формат сообщения на отправку

dynamic,1                                      # Вместо эхи используем адрес
Vasya                                          # Имя пользователя, которому предназначено сообщение
Тестируем                                      # Заголовок сообщения
                                               # Пустая строка
@repto:2hEUbMAxKSA83vcmgU4s                    # Проставляем тег ответа, либо строка относится к телу сообщения
И вот я пишу своё первое письмо в нашу секту.  # Текст
Меня видно?                                    # сообщения

Формат node2node API

Формат client API

Т.к. мы используем теги, то API отправки сообщения можно не менять, но поменять конечный эндпоинт, вынеся его в расширения протокола.

Т.е.:

curl -XPOST -d 'pauth=authstring' -d 'tmsg=BASE64' http://node.domain.tld/x/m/point
# Либо
curl -XGET http://node.domain.tld/x/m/point/authstring/BASE64

А для получения сообщений адресованных вам делаем запрос вида

curl -XGET http://node.domain.tld/x/m/mail/authstring
# Либо
curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/
# Получение сообщений со сдвигом
curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/-10:10

Т.к. нода по authstring может узнать информацию о поинте, то она должна знать о том какие сообщения адресованные этому поинту есть на этой ноде и возвращает их.

Так, ответ от ноды предлагается сделать аналогичным /u/e:

curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/-1:1
HTTP/1.1 200 Ok
Content-Type: text/plain
dynamic,1
IZXhLBKJx0rhx0lXYu3L

Получаем это сообщение

curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/IZXhLBKJx0rhx0lXYu3L
HTTP/1.1 200 Ok
Content-Type: text/plain
IZXhLBKJx0rhx0lXYu3L:BASE64

Либо несколько сообщений, по аналогии с существующей схемой /u/e

curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/IZXhLBKJx0rhx0lXYu3L/IZahLHKJ10rZx0ZXAAA0/...
HTTP/1.1 200 Ok
Content-Type: text/plain
IZXhLBKJx0rhx0lXYu3L:BASE64
IZahLHKJ10rZx0ZXAAA0:BASE64
...:BASE64