Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 51 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,30 @@ Versions correspond to git tags (`v_X_Y_Z` tag → `X.Y.Z` version); see

## [Unreleased]

## [1.3.26] - 2026-08-12

<a name="changelog-1-3-26-en"></a>

### Added

- JWT Bearer **RS256**, **RS384**, and **RS512** via platform `ТокенДоступа`
(Closes #13): schema field `privateKey` (PEM, unencrypted); HS* still uses
`secret`. Choice button loads `.pem`/`.txt` into the private key field.
Postman `jwt` import/export round-trips `privateKey`.
- JWT Bearer **PS256**, **PS384**, and **PS512** (RSA-PSS) via the same
`privateKey` PEM field (Closes #13).
- JWT Bearer **ES256**, **ES384**, and **ES512** (ECDSA) via the same
`privateKey` PEM field (Closes #13).

### Changed

- JWT Bearer form shows **Secret** only for HS* and **Private key (PEM)** for
RS*/PS*/ES* (Postman-like); both keys remain in the params table for round-trip.
- JWT Bearer signing migrated from hand-rolled HMAC (`ХешированиеДанных`) to
platform `ТокенДоступа` / `АлгоритмПодписиТокенаДоступа` for **HS256**,
**HS384**, and **HS512** (Closes #13).
- Updated README demo GIF and main form screenshot for JWT Bearer.

## [1.3.25] - 2026-08-07

<a name="changelog-1-3-25-en"></a>
Expand Down Expand Up @@ -237,6 +261,31 @@ Versions correspond to git tags (`v_X_Y_Z` tag → `X.Y.Z` version); see

## [Unreleased]

## [1.3.26] - 2026-08-12

<a name="changelog-1-3-26-ru"></a>

### Добавлено

- JWT Bearer **RS256**, **RS384** и **RS512** через платформенный `ТокенДоступа`
(Closes #13): поле схемы `privateKey` (PEM без пароля); для HS* по-прежнему
`secret`. Кнопка выбора загружает `.pem`/`.txt` в поле приватного ключа.
Импорт/экспорт Postman `jwt` сохраняет `privateKey`.
- JWT Bearer **PS256**, **PS384** и **PS512** (RSA-PSS) через то же поле
`privateKey` (Closes #13).
- JWT Bearer **ES256**, **ES384** и **ES512** (ECDSA) через то же поле
`privateKey` (Closes #13).

### Изменено

- В форме JWT Bearer поле **Секрет** только для HS*, **Приватный ключ (PEM)**
для RS*/PS*/ES* (как в Postman); оба ключа остаются в таблице параметров для
round-trip.
- Подпись JWT Bearer переведена с самописного HMAC (`ХешированиеДанных`) на
платформенный `ТокенДоступа` / `АлгоритмПодписиТокенаДоступа` для **HS256**,
**HS384** и **HS512** (Closes #13).
- Обновлены demo GIF и скриншот главной формы в README под JWT Bearer.

## [1.3.25] - 2026-08-07

<a name="changelog-1-3-25-ru"></a>
Expand Down Expand Up @@ -447,7 +496,8 @@ Versions correspond to git tags (`v_X_Y_Z` tag → `X.Y.Z` version); see

- Разные исправления стабильности.

[Unreleased]: https://github.com/LunatikDG/GetManHTTP/compare/v_1_3_25...HEAD
[Unreleased]: https://github.com/LunatikDG/GetManHTTP/compare/v_1_3_26...HEAD
[1.3.26]: https://github.com/LunatikDG/GetManHTTP/compare/v_1_3_25...v_1_3_26
[1.3.25]: https://github.com/LunatikDG/GetManHTTP/compare/v_1_3_24...v_1_3_25
[1.3.24]: https://github.com/LunatikDG/GetManHTTP/compare/v_1_3_23...v_1_3_24
[1.3.23]: https://github.com/LunatikDG/GetManHTTP/compare/v_1_3_22...v_1_3_23
Expand Down
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[![License](https://img.shields.io/badge/license-GPL--3.0-blue)](https://github.com/LunatikDG/GetManHTTP/blob/main/LICENSE.txt)
[![1C Version](https://img.shields.io/badge/1С-8.3.26%2B-orange)](#)
[![Release](https://img.shields.io/badge/release-1.3.25-red)](https://github.com/LunatikDG/GetManHTTP/releases)
[![Release](https://img.shields.io/badge/release-1.3.26-red)](https://github.com/LunatikDG/GetManHTTP/releases)
[![BSL Lint](https://github.com/LunatikDG/GetManHTTP/actions/workflows/bsl-lint.yml/badge.svg)](https://github.com/LunatikDG/GetManHTTP/actions/workflows/bsl-lint.yml)

<p align="center">
Expand Down Expand Up @@ -58,7 +58,9 @@ indicator, response headers and formatted body.
![Response panel](docs/images/response-panel.png)

**Authorization** — type selector (Basic / Token / Bearer Token / API Key / JWT Bearer) with fields that adapt to
the selected scheme. JWT Bearer signs HS256/HS512 locally (no crypto provider required).
the selected scheme. JWT Bearer signs HS256/HS384/HS512 (HMAC secret) and
RS256/RS384/RS512, PS256/PS384/PS512, ES256/ES384/ES512 (PEM private key, no
passphrase) via platform `ТокенДоступа`.

![Authorization fields](docs/images/auth-fields.png)

Expand Down Expand Up @@ -223,7 +225,9 @@ GetManHTTP — это HTTP-клиент, оформленный как **вне
![Панель ответа](docs/images/response-panel.png)

**Авторизация** — выбор типа (Basic / Token / Bearer Token / API Key / JWT Bearer) с полями, которые меняются в
зависимости от схемы. JWT Bearer подписывает HS256/HS512 локально (криптопровайдер не нужен).
зависимости от схемы. JWT Bearer подписывает HS256/HS384/HS512 (HMAC-секрет) и
RS256/RS384/RS512, PS256/PS384/PS512, ES256/ES384/ES512 (PEM приватный ключ без
пароля) через платформенный `ТокенДоступа`.

![Поля авторизации](docs/images/auth-fields.png)

Expand Down
4 changes: 2 additions & 2 deletions docs/collection-format.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ Portable authorization object (collection, folder, or request).
| `Token` | collection, folder, request | `tokenPrefix`, `token` | Sent as `Authorization: {tokenPrefix} {token}`. Default prefix when empty at apply time: `Token`. `token` is secret. |
| `BearerToken` | collection, folder, request | `token` | Sent as `Authorization: Bearer {token}` (fixed prefix, RFC 6750). `token` is secret. |
| `ApiKey` | collection, folder, request | `key`, `value`, `addTo` | `addTo`: `Header` (default) or `Query`. Default `key` name: `X-API-Key`. `value` is secret. |
| `JwtBearer` | collection, folder, request | `algorithm`, `secret`, `claims`, `ttlSeconds` | Builds JWT (HS256/HS512) and sends `Authorization: Bearer {jwt}`. `algorithm` default `HS256`; `claims` is a JSON object string; `ttlSeconds` &gt; 0 sets `iat`/`exp` (Unix). `secret` is secret. |
| `JwtBearer` | collection, folder, request | `algorithm`, `secret`, `privateKey`, `claims`, `ttlSeconds` | Builds JWT via platform `ТокенДоступа` and sends `Authorization: Bearer {jwt}`. Algorithms: **HS256/HS384/HS512** (signing material: `secret`) and **RS256/RS384/RS512**, **PS256/PS384/PS512**, **ES256/ES384/ES512** (signing material: `privateKey` PEM, unencrypted; RSA or EC depending on algorithm). Default `algorithm`: `HS256`. `claims` is a JSON object string; `ttlSeconds` &gt; 0 sets `iat`/`exp` (Unix). Both `secret` and `privateKey` are secret; empty required material omits the Authorization header. |
| `InheritFromOwner` | folder, request | _(none)_ | Walk up folder → collection auth. **Not** valid as collection root auth (importers coerce unsupported types to the context default). |

---
Expand Down Expand Up @@ -378,7 +378,7 @@ v2.1: файлы Postman определяются отдельно и преоб
| `Token` | коллекция, папка, запрос | `tokenPrefix`, `token` | Заголовок `Authorization: {tokenPrefix} {token}`. Префикс по умолчанию при применении: `Token`. `token` — секрет. |
| `BearerToken` | коллекция, папка, запрос | `token` | Заголовок `Authorization: Bearer {token}` (фиксированный префикс, RFC 6750). `token` — секрет. |
| `ApiKey` | коллекция, папка, запрос | `key`, `value`, `addTo` | `addTo`: `Header` (по умолчанию) или `Query`. Имя ключа по умолчанию: `X-API-Key`. `value` — секрет. |
| `JwtBearer` | коллекция, папка, запрос | `algorithm`, `secret`, `claims`, `ttlSeconds` | Собирает JWT (HS256/HS512) и шлёт `Authorization: Bearer {jwt}`. `algorithm` по умолчанию `HS256`; `claims` — JSON-объект строкой; `ttlSeconds` &gt; 0 задаёт `iat`/`exp` (Unix). `secret` — секрет. |
| `JwtBearer` | коллекция, папка, запрос | `algorithm`, `secret`, `privateKey`, `claims`, `ttlSeconds` | Собирает JWT через платформенный `ТокенДоступа` и шлёт `Authorization: Bearer {jwt}`. Алгоритмы: **HS256/HS384/HS512** (материал: `secret`) и **RS256/RS384/RS512**, **PS256/PS384/PS512**, **ES256/ES384/ES512** (материал: `privateKey` PEM без пароля; RSA или EC в зависимости от алгоритма). `algorithm` по умолчанию `HS256`. `claims` — JSON-объект строкой; `ttlSeconds` &gt; 0 задаёт `iat`/`exp` (Unix). И `secret`, и `privateKey` — секреты; пустой нужный материал — без заголовка Authorization. |
| `InheritFromOwner` | папка, запрос | _(нет)_ | Наследование папка → коллекция. На корне коллекции не используется. |

---
Expand Down
Binary file modified docs/images/demo.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/main-form.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
62 changes: 55 additions & 7 deletions src/ExternalDataProcessors/GetManHTTP/Forms/Форма/Form.form
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form">
<title>
<key>ru</key>
<value>GetManHTTP (HTTP-клиент): v1.3.25</value>
<value>GetManHTTP (HTTP-клиент): v1.3.26</value>
</title>
<items xsi:type="form:FormGroup">
<name>ГруппаЛево</name>
Expand Down Expand Up @@ -2155,6 +2155,10 @@
<event>OnChange</event>
<name>ПолеАвторизацииПриИзменении</name>
</handlers>
<handlers>
<event>StartChoice</event>
<name>ПолеАвторизацииНачалоВыбора</name>
</handlers>
<extendedTooltip>
<name>ПолеАвторизации1РасширеннаяПодсказка</name>
<id>334</id>
Expand All @@ -2181,7 +2185,11 @@
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<wrap>true</wrap>
<chooseType>true</chooseType>
<choiceButton>false</choiceButton>
<choiceButtonPicture xsi:type="core:PictureRef">
<picture>StdPicture.OpenFile</picture>
</choiceButtonPicture>
<chooseType>false</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
Expand All @@ -2202,6 +2210,10 @@
<event>OnChange</event>
<name>ПолеАвторизацииПриИзменении</name>
</handlers>
<handlers>
<event>StartChoice</event>
<name>ПолеАвторизацииНачалоВыбора</name>
</handlers>
<extendedTooltip>
<name>ПолеАвторизации2РасширеннаяПодсказка</name>
<id>337</id>
Expand All @@ -2228,7 +2240,11 @@
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<wrap>true</wrap>
<chooseType>true</chooseType>
<choiceButton>false</choiceButton>
<choiceButtonPicture xsi:type="core:PictureRef">
<picture>StdPicture.OpenFile</picture>
</choiceButtonPicture>
<chooseType>false</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
Expand All @@ -2249,6 +2265,10 @@
<event>OnChange</event>
<name>ПолеАвторизацииПриИзменении</name>
</handlers>
<handlers>
<event>StartChoice</event>
<name>ПолеАвторизацииНачалоВыбора</name>
</handlers>
<extendedTooltip>
<name>ПолеАвторизации3РасширеннаяПодсказка</name>
<id>340</id>
Expand All @@ -2275,7 +2295,11 @@
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<wrap>true</wrap>
<chooseType>true</chooseType>
<choiceButton>false</choiceButton>
<choiceButtonPicture xsi:type="core:PictureRef">
<picture>StdPicture.OpenFile</picture>
</choiceButtonPicture>
<chooseType>false</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
Expand All @@ -2296,6 +2320,10 @@
<event>OnChange</event>
<name>ПолеАвторизацииПриИзменении</name>
</handlers>
<handlers>
<event>StartChoice</event>
<name>ПолеАвторизацииНачалоВыбора</name>
</handlers>
<extendedTooltip>
<name>ПолеАвторизации4РасширеннаяПодсказка</name>
<id>343</id>
Expand All @@ -2322,7 +2350,11 @@
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<wrap>true</wrap>
<chooseType>true</chooseType>
<choiceButton>false</choiceButton>
<choiceButtonPicture xsi:type="core:PictureRef">
<picture>StdPicture.OpenFile</picture>
</choiceButtonPicture>
<chooseType>false</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
Expand All @@ -2343,6 +2375,10 @@
<event>OnChange</event>
<name>ПолеАвторизацииПриИзменении</name>
</handlers>
<handlers>
<event>StartChoice</event>
<name>ПолеАвторизацииНачалоВыбора</name>
</handlers>
<extendedTooltip>
<name>ПолеАвторизации5РасширеннаяПодсказка</name>
<id>346</id>
Expand All @@ -2369,7 +2405,11 @@
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<wrap>true</wrap>
<chooseType>true</chooseType>
<choiceButton>false</choiceButton>
<choiceButtonPicture xsi:type="core:PictureRef">
<picture>StdPicture.OpenFile</picture>
</choiceButtonPicture>
<chooseType>false</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
Expand All @@ -2390,6 +2430,10 @@
<event>OnChange</event>
<name>ПолеАвторизацииПриИзменении</name>
</handlers>
<handlers>
<event>StartChoice</event>
<name>ПолеАвторизацииНачалоВыбора</name>
</handlers>
<extendedTooltip>
<name>ПолеАвторизации6РасширеннаяПодсказка</name>
<id>349</id>
Expand All @@ -2416,7 +2460,11 @@
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<wrap>true</wrap>
<chooseType>true</chooseType>
<choiceButton>false</choiceButton>
<choiceButtonPicture xsi:type="core:PictureRef">
<picture>StdPicture.OpenFile</picture>
</choiceButtonPicture>
<chooseType>false</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ <h2>Настройка HTTP-запроса</h2>
<li>по токену (свой префикс) — заголовок <code>Authorization</code> (префикс по умолчанию <code>Token</code>);</li>
<li>Bearer Token — заголовок <code>Authorization: Bearer …</code> (фиксированный префикс);</li>
<li>API Key — имя и значение ключа с выбором «добавить в заголовок» или «в Query-параметр»;</li>
<li>JWT Bearer — генерация JWT (алгоритмы HS256/HS512), секрет, Claims (JSON), TTL для <code>iat</code>/<code>exp</code>; заголовок <code>Authorization: Bearer …</code>.</li>
<li>JWT Bearer — генерация JWT через платформенный <code>ТокенДоступа</code>: HS256/HS384/HS512 (поле «Секрет») и RS256/RS384/RS512, PS256/PS384/PS512, ES256/ES384/ES512 (поле «Приватный ключ (PEM)» без пароля, кнопка выбора файла <code>.pem</code>/<code>.txt</code>), Claims (JSON), TTL для <code>iat</code>/<code>exp</code>; заголовок <code>Authorization: Bearer …</code>.</li>
</ul>
</li>
<li><strong>Тело запроса</strong> — варианты: отсутствует, JSON, XML, form-data (текстовые и файловые поля, несколько файлов в одном multipart; лимит размера тела 50&nbsp;МБ), двоичные данные (один файл целиком).</li>
Expand Down Expand Up @@ -125,7 +125,7 @@ <h2>Обратная связь</h2>

<p>Ошибки и предложения: <a href="https://github.com/LunatikDG/GetManHTTP">репозиторий на GitHub</a>, почта <code>main@lunatikdg.ru</code>, Telegram <a href="https://t.me/LunatikDG">@LunatikDG</a>.</p>

<p><em>Версия обработки: 1.3.25</em></p>
<p><em>Версия обработки: 1.3.26</em></p>

</body>
</html>
Loading
Loading