Оригинал на GitHub
Вопрос
Прошу вашего совета. При отправке сообщения на почту из системы TOTUM необходимо передать в тело письма кнопку (ну или ссылку), при нажатии на которую будет выполнятся какое-либо действие в системе по определенным условиям. Возможна ли реализация данной задачи? Может уже кто-нибудь сталкивался с этим?
Ответ
Генерируем ссылку используя row
с ключами key
и value
:
key
— это наш секретный ключ, который мы будем проверять.
value
— данные для действия, которое мы будем выполнять.
Превращаем этот row
в строку в json функцией jsonCreate
.
Что бы это все было защищено, мы шифруем функцией strEncrypt
.
Что бы это все пролезло в get
, нам нужно еще и закодировать в url-безопасный формат — strUrlEncode
.
Дальше, я здесь использую шаблон html
в котором заменяю get
-параметр на получившийся у меня шифр в url-encode
.
=: emailSend(to: "some-email.domen.com"; title: "crypt link"; body: str`"This is the link:" ++ $str`)
str: strReplace(str: $html; from: "{param}"; to: $url)
url: strUrlEncode(str: $param)
param: strEncrypt(str: $data)
data: jsonCreate(field: "key" = "my_secret_key"; field: "value" = "my_value")
```html:html
<a href="https://totum.online/Remotes/add_by_link?crypt={param}">some generated link</a>
```
Только нам нужно создать remotes
, который будет отвечать на внешний запрос:
Делаем remotes, в моем случае с именем add_by_link
.
Не забудте назначить пользователя, от которого он будет выполнятся remotes и включить его.
url-decode
делать не нужно, так как сервер url
-кодирование расшифровывает автоматически, при получении запроса и мы получаем шифрованную строку в $#get[crypt]
.
Дальше нам надо расшифровать, что у нас там было передано в crypt
и превратить строку json
в row
тотума функцией jsonExtract
(он фиксируется, чтобы несколько раз его не выполнять).
Теперь мы сравниваем ключ, и, если проверка проходит, выполняем действие.
=: if(condition: $extract[key] = "my_secret_key"; then: $insert)
insert: insert(table: 'some_table'; field: 'field_with_value' = $extract[value]; inserts: "inserts"; log: true)
~extract: jsonExtract(text: $decrypt)
decrypt: strDecrypt(str: $#get[crypt])