mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-11-24 08:52:18 +02:00
Преобразование OPI -> OInt (workflow)
This commit is contained in:
parent
c8ea5aba5f
commit
977170f7dd
174
.github/workflows/oint_test_Dropbox.yml
vendored
Normal file
174
.github/workflows/oint_test_Dropbox.yml
vendored
Normal file
@ -0,0 +1,174 @@
|
||||
|
||||
name: OINT | Тестирование Dropbox
|
||||
|
||||
# Controls when the workflow will run
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
|
||||
Decode:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ always() }}
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Расшифровать тестовые данные
|
||||
run: gpg --quiet --batch --yes --decrypt --passphrase="$ENC_JSON" --output ./data.json ./data.json.gpg
|
||||
env:
|
||||
ENC_JSON: ${{ secrets.ENC_JSON }}
|
||||
- name: Записать тестовые данные в кэш
|
||||
uses: actions/cache/save@v3
|
||||
with:
|
||||
key: test-data
|
||||
path: ./data.json
|
||||
|
||||
Build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: otymko/setup-onescript@v1.4
|
||||
with:
|
||||
version: 1.9.0
|
||||
|
||||
- name: Установить asserts и 1testrunner
|
||||
run: |
|
||||
opm install asserts
|
||||
opm install 1testrunner
|
||||
|
||||
- name: Установить OInt
|
||||
run: |
|
||||
cd ./OInt
|
||||
opm build
|
||||
opm install *.ospx
|
||||
|
||||
- name: Записать артефакт
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: oint
|
||||
path: ./OInt/*.ospx
|
||||
|
||||
|
||||
Testing-Dropbox:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [Decode, Build]
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- uses: otymko/setup-onescript@v1.4
|
||||
with:
|
||||
version: 1.9.0
|
||||
|
||||
- name: Получить тестовые данные из кэша
|
||||
uses: actions/cache/restore@v3
|
||||
with:
|
||||
key: test-data
|
||||
path: ./data.json
|
||||
|
||||
- name: Установить asserts и 1testrunner
|
||||
run: |
|
||||
opm install asserts
|
||||
opm install 1testrunner
|
||||
|
||||
- name: Установить OInt
|
||||
run: |
|
||||
cd ./OInt
|
||||
opm build
|
||||
opm install *.ospx
|
||||
|
||||
|
||||
|
||||
- name: Получить/Обновить токен
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ПолучитьОбновитьТокен"
|
||||
|
||||
- name: Загрузить файл
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ЗагрузитьФайл"
|
||||
|
||||
|
||||
- name: Записать логи
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Dropbox
|
||||
path: ./test_logs
|
||||
|
||||
|
||||
- name: Записать измененные данные
|
||||
if: ${{ cancelled() }} == false
|
||||
uses: actions/cache/save@v3
|
||||
with:
|
||||
key: test-data_new
|
||||
path: ./data.json
|
||||
|
||||
Encode:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [Testing-Dropbox]
|
||||
if: ${{ always() }}
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Обновить данные в репозитории
|
||||
run: git pull https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
- name: Получить тестовые данные из кэша
|
||||
uses: actions/cache/restore@v3
|
||||
with:
|
||||
key: test-data_new
|
||||
path: ./data.json
|
||||
|
||||
- name: Зашифровать данные обратно
|
||||
continue-on-error: false
|
||||
|
||||
run: |
|
||||
rm -f ./data.json.gpg
|
||||
gpg --batch --symmetric --cipher-algo AES256 --passphrase="$ENC_JSON" data.json
|
||||
rm -f ./data.json
|
||||
env:
|
||||
ENC_JSON: ${{ secrets.ENC_JSON }}
|
||||
|
||||
- name: Записать данные
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_user_name: Vitaly the Alpaca (bot)
|
||||
commit_user_email: vitaly.the.alpaca@gmail.com
|
||||
commit_author: Vitaly the Alpaca <vitaly.the.alpaca@gmail.com>
|
||||
commit_message: Обновление зашифрованных данных по результатам тестов (workflow)
|
||||
|
||||
|
||||
Clear-Cache:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [Testing-Dropbox, Encode]
|
||||
if: ${{ always() }}
|
||||
steps:
|
||||
- name: Очистка основного кэша
|
||||
run: |
|
||||
curl -L \
|
||||
-X DELETE \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data"
|
||||
|
||||
- name: Очистка кэша Google
|
||||
run: |
|
||||
curl -L \
|
||||
-X DELETE \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data_google"
|
||||
|
||||
- name: Очистка кэша Twitter
|
||||
run: |
|
||||
curl -L \
|
||||
-X DELETE \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data_new"
|
8
.github/workflows/oint_test_Telegram.yml
vendored
8
.github/workflows/oint_test_Telegram.yml
vendored
@ -91,10 +91,6 @@ jobs:
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_УстановитьWebhook"
|
||||
|
||||
- name: Удалить Webhook
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_УдалитьWebhook"
|
||||
|
||||
- name: Отправить текстовое сообщение
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьТекстовоеСообщение"
|
||||
@ -163,10 +159,6 @@ jobs:
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_СоздатьУдалитьТемуФорума"
|
||||
|
||||
- name: Открыть/Закрыть главную тему
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОткрытьЗакрытьГлавнуюТему"
|
||||
|
||||
- name: Изменить имя главной темы
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ИзменитьИмяГлавнойТемы"
|
||||
|
50
.github/workflows/oint_test_full.yml
vendored
50
.github/workflows/oint_test_full.yml
vendored
@ -91,10 +91,6 @@ jobs:
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_УстановитьWebhook"
|
||||
|
||||
- name: Удалить Webhook
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_УдалитьWebhook"
|
||||
|
||||
- name: Отправить текстовое сообщение
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьТекстовоеСообщение"
|
||||
@ -163,10 +159,6 @@ jobs:
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_СоздатьУдалитьТемуФорума"
|
||||
|
||||
- name: Открыть/Закрыть главную тему
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОткрытьЗакрытьГлавнуюТему"
|
||||
|
||||
- name: Изменить имя главной темы
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ИзменитьИмяГлавнойТемы"
|
||||
@ -864,10 +856,48 @@ jobs:
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьУдалитьЗаписи"
|
||||
|
||||
|
||||
Testing-Dropbox:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [Decode, Build]
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- uses: otymko/setup-onescript@v1.4
|
||||
with:
|
||||
version: 1.9.0
|
||||
|
||||
- name: Получить тестовые данные из кэша
|
||||
uses: actions/cache/restore@v3
|
||||
with:
|
||||
key: test-data
|
||||
path: ./data.json
|
||||
|
||||
- name: Установить asserts и 1testrunner
|
||||
run: |
|
||||
opm install asserts
|
||||
opm install 1testrunner
|
||||
|
||||
- name: Установить OInt
|
||||
run: |
|
||||
cd ./OInt
|
||||
opm build
|
||||
opm install *.ospx
|
||||
|
||||
|
||||
|
||||
- name: Получить/Обновить токен
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ПолучитьОбновитьТокен"
|
||||
|
||||
- name: Загрузить файл
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ЗагрузитьФайл"
|
||||
|
||||
|
||||
- name: Записать логи
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Airtable
|
||||
name: Dropbox
|
||||
path: ./test_logs
|
||||
|
||||
Encode:
|
||||
@ -911,7 +941,7 @@ jobs:
|
||||
|
||||
Clear-Cache:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [Testing-Telegram, Testing-VK, Testing-Viber, Testing-Twitter, Testing-YandexDisk, Testing-GoogleWorkspace, Testing-GoogleCalendar, Testing-GoogleDrive, Testing-GoogleSheets, Testing-Notion, Testing-Slack, Testing-Airtable, Encode]
|
||||
needs: [Testing-Telegram, Testing-VK, Testing-Viber, Testing-Twitter, Testing-YandexDisk, Testing-GoogleWorkspace, Testing-GoogleCalendar, Testing-GoogleDrive, Testing-GoogleSheets, Testing-Notion, Testing-Slack, Testing-Airtable, Testing-Dropbox, Encode]
|
||||
if: ${{ always() }}
|
||||
steps:
|
||||
- name: Очистка основного кэша
|
||||
|
@ -623,7 +623,7 @@
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт
|
||||
Функция ПолучитьЗаголовокАвторизации(Знач Токен)
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||
|
||||
|
294
OInt/core/Modules/OPI_Dropbox.os
Normal file
294
OInt/core/Modules/OPI_Dropbox.os
Normal file
@ -0,0 +1,294 @@
|
||||
// Расположение OS: ./OInt/core/Modules/OPI_Dropbox.os
|
||||
// Библиотека: Dropbox
|
||||
// Команда CLI: dropbox
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
#Использовать "../../tools"
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#Область Авторизация
|
||||
|
||||
// Получить ссылку авторизации
|
||||
// Генерирует ссылку авторизации для перехода в браузере
|
||||
//
|
||||
// Параметры:
|
||||
// КлючПриложения - Строка - Ключ приложения - appkey
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - URL для перехода в браузере
|
||||
Функция ПолучитьСсылкуАвторизации(Знач КлючПриложения) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючПриложения);
|
||||
Возврат "https://www.dropbox.com/oauth2/authorize?client_id="
|
||||
+ КлючПриложения
|
||||
+ "&response_type=code&token_access_type=offline";
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить токен
|
||||
// Полеучает токен на основе кода со страницы ПолучитьСсылкуАвторизации
|
||||
//
|
||||
// Параметры:
|
||||
// КлючПриложения - Строка - Ключ приложения - appkey
|
||||
// СекретПриложения - Строка - Секрет приложения - appsecret
|
||||
// Код - Строка - Код со страницы авторизации - code
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||
Функция ПолучитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач Код) Экспорт
|
||||
|
||||
URL = "https://api.dropbox.com/oauth2/token";
|
||||
ТипДанных = "application/x-www-form-urlencoded; charset=utf-8";
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("code" , Код , "Строка", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("grant_type", "authorization_code", "Строка", Параметры);
|
||||
|
||||
СтруктураURL = OPI_Инструменты.РазбитьURL(URL);
|
||||
Сервер = СтруктураURL["Сервер"];
|
||||
Адрес = СтруктураURL["Адрес"];
|
||||
|
||||
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес, , ТипДанных);
|
||||
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, КлючПриложения, СекретПриложения);
|
||||
|
||||
СтрокаПараметров = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
|
||||
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
|
||||
|
||||
Запрос.УстановитьТелоИзСтроки(Данные);
|
||||
|
||||
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
|
||||
OPI_Инструменты.ОбработатьОтвет(Ответ);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Обновить токен
|
||||
// Получает новый токен на основе рефреш токена
|
||||
//
|
||||
// Параметры:
|
||||
// КлючПриложения - Строка - Ключ приложения - appkey
|
||||
// СекретПриложения - Строка - Секрет приложения - appsecret
|
||||
// РефрешТокен - Строка - Рефреш токен - refresh
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||
Функция ОбновитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач РефрешТокен) Экспорт
|
||||
|
||||
URL = "https://api.dropbox.com/oauth2/token";
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("refresh_token", РефрешТокен , "Строка", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("grant_type" , "refresh_token" , "Строка", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("client_id" , КлючПриложения , "Строка", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("client_secret", СекретПриложения, "Строка", Параметры);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, , Ложь);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область РаботаСФайлами
|
||||
|
||||
// Загрузить файл
|
||||
// Загружает файл на облачный диск
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Файл - Строка, ДвоичныеДанные - Данные файл для загрузки - file
|
||||
// Путь - Строка - Путь сохранения на Dropbox - path
|
||||
// Перезаписывать - Булево - Перезаписывать файл при конфликте путей - overwrite
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
||||
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||
|
||||
Режим = ?(Перезаписывать, "overwrite", "add");
|
||||
Размер = Файл.Размер();
|
||||
Граница = 100000000;
|
||||
|
||||
Если Размер > Граница Тогда
|
||||
Ответ = ЗагрузитьБольшойФайл(Токен, Файл, Путь, Режим);
|
||||
Иначе
|
||||
Ответ = ЗагрузитьМалыйФайл(Токен, Файл, Путь, Режим);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УдалитьФайл(Знач Токен, Знач Путь) Экспорт
|
||||
|
||||
URL = "https://api.dropboxapi.com/2/files/delete_v2";
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Параметры);
|
||||
|
||||
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ПолучитьЗаголовкиЗапроса(Знач Токен, Знач Параметры = "")
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("Authorization" , "Bearer " + Токен);
|
||||
|
||||
Если ЗначениеЗаполнено(Параметры) Тогда
|
||||
|
||||
JSON = OPI_Инструменты.JSONСтрокой(Параметры, "Нет");
|
||||
JSON = СтрЗаменить(JSON, Символы.ВК + Символы.ПС, "");
|
||||
|
||||
Заголовки.Вставить("Dropbox-API-Arg", JSON);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Заголовки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗагрузитьБольшойФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
|
||||
|
||||
URL = "https://content.dropboxapi.com/2/files/upload_session/append_v2";
|
||||
|
||||
РазмерЧасти = 100000000;
|
||||
ТекущаяПозиция = 0;
|
||||
ПрочитаноБайт = 0;
|
||||
ОбщийРазмер = Файл.Размер();
|
||||
Сессия = ОткрытьСессию(Токен);
|
||||
|
||||
Пока ПрочитаноБайт < ОбщийРазмер Цикл
|
||||
|
||||
Отступ = ТекущаяПозиция;
|
||||
Курсор = Новый Структура("offset,session_id", Отступ, Сессия);
|
||||
|
||||
Параметры = Новый Структура("cursor", Курсор);
|
||||
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
|
||||
|
||||
ЧтениеДанных = Новый ЧтениеДанных(Файл);
|
||||
ПрочитаноБайт = ЧтениеДанных.Пропустить(ТекущаяПозиция);
|
||||
Результат = ЧтениеДанных.Прочитать(РазмерЧасти);
|
||||
ТекущиеДанные = Результат.ПолучитьДвоичныеДанные();
|
||||
РазмерТекущих = ТекущиеДанные.Размер();
|
||||
СледующаяПозиция = ТекущаяПозиция + РазмерТекущих;
|
||||
|
||||
Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Ответ = OPI_Инструменты.PostBinary(URL, ТекущиеДанные, Заголовки);
|
||||
|
||||
ТекущаяПозиция = СледующаяПозиция;
|
||||
|
||||
КБайт = 1024;
|
||||
МБайт = КБайт * КБайт;
|
||||
Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт));
|
||||
|
||||
ВыполнитьСборкуМусора();
|
||||
ОсвободитьОбъект(ТекущиеДанные);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Ответ = ЗакрытьСессию(Токен, Путь, Режим, ОбщийРазмер, Сессия);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗагрузитьМалыйФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
|
||||
|
||||
URL = "https://content.dropboxapi.com/2/files/upload";
|
||||
|
||||
Параметры = Новый Структура;
|
||||
|
||||
OPI_Инструменты.ДобавитьПоле("autorename" , Ложь , "Булево", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("mode" , Режим, "Строка", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("mute" , Ложь , "Булево", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("path" , Путь , "Строка", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("strict_conflict", Ложь , "Булево", Параметры);
|
||||
|
||||
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
|
||||
|
||||
Ответ = OPI_Инструменты.PostBinary(URL, Файл, Заголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОткрытьСессию(Знач Токен)
|
||||
|
||||
SessionId = "session_id";
|
||||
URL = "https://content.dropboxapi.com/2/files/upload_session/start";
|
||||
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
|
||||
|
||||
Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
|
||||
|
||||
Возврат Ответ[SessionId];
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗакрытьСессию(Знач Токен, Знач Путь, Знач Режим, Знач ОбщийРазмер, Знач Сессия)
|
||||
|
||||
URL = "https://content.dropboxapi.com/2/files/upload_session/finish";
|
||||
|
||||
Коммит = Новый Структура();
|
||||
OPI_Инструменты.ДобавитьПоле("mode", Режим, "Строка", Коммит);
|
||||
OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Коммит);
|
||||
|
||||
Курсор = Новый Структура("offset,session_id", ОбщийРазмер, Сессия);
|
||||
|
||||
Параметры = Новый Структура("commit,cursor", Коммит, Курсор);
|
||||
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
|
||||
|
||||
Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
@ -1,19 +1,20 @@
|
||||
<package-def>
|
||||
<module name="OPI_GoogleCalendar" file="core/Modules/OPI_GoogleCalendar.os"/>
|
||||
<module name="OPI_Airtable" file="core/Modules/OPI_Airtable.os"/>
|
||||
<module name="OPI_Twitter" file="core/Modules/OPI_Twitter.os"/>
|
||||
<module name="OPI_Slack" file="core/Modules/OPI_Slack.os"/>
|
||||
<module name="OPI_Viber" file="core/Modules/OPI_Viber.os"/>
|
||||
<module name="OPI_GoogleDrive" file="core/Modules/OPI_GoogleDrive.os"/>
|
||||
<module name="OPI_Notion" file="core/Modules/OPI_Notion.os"/>
|
||||
<module name="OPI_YandexID" file="core/Modules/OPI_YandexID.os"/>
|
||||
<module name="OPI_ПолучениеДанныхТестов" file="tools/Modules/OPI_ПолучениеДанныхТестов.os"/>
|
||||
<module name="OPI_GoogleSheets" file="core/Modules/OPI_GoogleSheets.os"/>
|
||||
<module name="OPI_ПреобразованиеТипов" file="tools/Modules/OPI_ПреобразованиеТипов.os"/>
|
||||
<module name="OPI_Telegram" file="core/Modules/OPI_Telegram.os"/>
|
||||
<module name="OPI_YandexDisk" file="core/Modules/OPI_YandexDisk.os"/>
|
||||
<module name="OPI_GoogleWorkspace" file="core/Modules/OPI_GoogleWorkspace.os"/>
|
||||
<module name="OPI_Инструменты" file="tools/Modules/internal/Modules/OPI_Инструменты.os"/>
|
||||
<module name="OPI_Notion" file="core/Modules/OPI_Notion.os"/>
|
||||
<module name="OPI_Telegram" file="core/Modules/OPI_Telegram.os"/>
|
||||
<module name="OPI_GoogleDrive" file="core/Modules/OPI_GoogleDrive.os"/>
|
||||
<module name="OPI_ПолучениеДанныхТестов" file="tools/Modules/OPI_ПолучениеДанныхТестов.os"/>
|
||||
<module name="OPI_Twitter" file="core/Modules/OPI_Twitter.os"/>
|
||||
<module name="OPI_Viber" file="core/Modules/OPI_Viber.os"/>
|
||||
<module name="OPI_ПреобразованиеТипов" file="tools/Modules/OPI_ПреобразованиеТипов.os"/>
|
||||
<module name="OPI_GoogleWorkspace" file="core/Modules/OPI_GoogleWorkspace.os"/>
|
||||
<module name="OPI_YandexDisk" file="core/Modules/OPI_YandexDisk.os"/>
|
||||
<module name="OPI_Dropbox" file="core/Modules/OPI_Dropbox.os"/>
|
||||
<module name="OPI_Airtable" file="core/Modules/OPI_Airtable.os"/>
|
||||
<module name="OPI_Slack" file="core/Modules/OPI_Slack.os"/>
|
||||
<module name="OPI_GoogleSheets" file="core/Modules/OPI_GoogleSheets.os"/>
|
||||
<module name="OPI_YandexID" file="core/Modules/OPI_YandexID.os"/>
|
||||
<module name="OPI_VK" file="core/Modules/OPI_VK.os"/>
|
||||
<module name="OPI_Криптография" file="tools/Modules/internal/Modules/OPI_Криптография.os"/>
|
||||
</package-def>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -59,6 +59,7 @@
|
||||
Разделы.Вставить("Notion" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("Slack" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("Airtable" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("Dropbox" , СтандартныеЗависимости);
|
||||
|
||||
Возврат Разделы;
|
||||
|
||||
@ -78,6 +79,7 @@
|
||||
Слак = "Slack";
|
||||
Таблицы = "GoogleSheets";
|
||||
АирТ = "Airtable";
|
||||
ДропБокс = "Dropbox";
|
||||
|
||||
ТаблицаТестов = Новый ТаблицаЗначений;
|
||||
ТаблицаТестов.Колонки.Добавить("Метод");
|
||||
@ -87,7 +89,6 @@
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_УдалитьWebhook" , "Удалить Webhook" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКартинку" , "Отправить картинку" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьВидео" , "Отправить видео" , Телеграм);
|
||||
@ -105,7 +106,6 @@
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьЧислоУчастников" , "Получить число участников" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьСписокАватаровФорума", "Получить список аватаров форума", Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОткрытьЗакрытьГлавнуюТему" , "Открыть/Закрыть главную тему" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему" , "Скрыть/Показать главную тему" , Телеграм);
|
||||
|
||||
@ -205,7 +205,10 @@
|
||||
НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ);
|
||||
НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ);
|
||||
НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ);
|
||||
|
||||
|
||||
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен" , "Получить/Обновить токен" , ДропБокс);
|
||||
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс);
|
||||
|
||||
Возврат ТаблицаТестов;
|
||||
|
||||
КонецФункции
|
||||
@ -317,6 +320,20 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт
|
||||
|
||||
Значение = ПолучитьПараметр(Параметр);
|
||||
Коллекция.Вставить(Параметр, Значение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт
|
||||
|
||||
Значение = ПолучитьДвоичные(Параметр);
|
||||
Коллекция.Вставить(Параметр, Значение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт
|
||||
|
||||
Путь = ПутьКФайлуДанных();
|
||||
|
@ -85,6 +85,12 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция PostBinary(Знач URL, Знач Тело, Знач ДопЗаголовки, Знач ПолныйОтвет = Ложь) Экспорт
|
||||
|
||||
Возврат ВыполнитьЗапросСДвоичнымиДанными(URL, "POST", Тело, ДопЗаголовки, ПолныйОтвет);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ЗапросыMultipart
|
||||
@ -171,6 +177,43 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция СоздатьЗапрос(Знач Адрес, Знач ДопЗаголовки = "", Знач ТипДанных = "") Экспорт
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("Accept-Encoding", "gzip");
|
||||
Заголовки.Вставить("Accept" , "*/*");
|
||||
Заголовки.Вставить("Connection" , "keep-alive");
|
||||
Заголовки.Вставить("Accept-Charset" , "utf-8");
|
||||
|
||||
Если ЗначениеЗаполнено(ТипДанных) Тогда
|
||||
Заголовки.Вставить("Content-Type", ТипДанных);
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
||||
|
||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
НовыйЗапрос = Новый HTTPЗапрос(Адрес, Заголовки);
|
||||
|
||||
Возврат НовыйЗапрос;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьСоединение(Знач Сервер, Знач Пользователь = "", Знач Пароль = "") Экспорт
|
||||
|
||||
Попытка
|
||||
SSL = Новый ЗащищенноеСоединениеOpenSSL;
|
||||
Возврат Новый HTTPСоединение(Сервер, 443, Пользователь, Пароль, , 3000, SSL);
|
||||
Исключение
|
||||
Возврат Новый HTTPСоединение(Сервер, 443, Пользователь, Пароль, , 3000);
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
@ -259,7 +302,7 @@
|
||||
ЗаписьJSON = Новый ЗаписьJSON;
|
||||
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
|
||||
|
||||
ЗаписатьJSON(ЗаписьJSON, Данные);
|
||||
ЗаписатьJSON(ЗаписьJSON, Данные,);
|
||||
Возврат ЗаписьJSON.Закрыть();
|
||||
|
||||
Исключение
|
||||
@ -313,7 +356,11 @@
|
||||
ОТД = Новый ОписаниеТипов("Дата");
|
||||
Дата = ОТД.ПривестиЗначение(Дата);
|
||||
|
||||
Возврат Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧЦ=10; ЧДЦ=0; ЧГ=0");
|
||||
UNIX = Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧЦ=10; ЧДЦ=0; ЧГ=0");
|
||||
UNIX = СтрЗаменить(UNIX, ",", "");
|
||||
UNIX = Лев(UNIX, 10);
|
||||
|
||||
Возврат UNIX;
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -490,6 +537,33 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьЗапросСДвоичнымиДанными(Знач URL, Знач Вид, Знач Данные, Знач ДопЗаголовки, Знач ПолныйОтвет)
|
||||
|
||||
СтруктураURL = РазбитьURL(URL);
|
||||
Сервер = СтруктураURL["Сервер"];
|
||||
Адрес = СтруктураURL["Адрес"];
|
||||
|
||||
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, "application/octet-stream");
|
||||
Соединение = СоздатьСоединение(Сервер);
|
||||
|
||||
Запрос.УстановитьТелоИзДвоичныхДанных(Данные);
|
||||
|
||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
||||
|
||||
Если ЭтоПереадресация(Ответ) Тогда
|
||||
Ответ = ВыполнитьЗапросСДвоичнымиДанными(Ответ.Заголовки["Location"]
|
||||
, Вид
|
||||
, Данные
|
||||
, ДопЗаголовки
|
||||
, ПолныйОтвет);
|
||||
Иначе
|
||||
ОбработатьОтвет(Ответ, ПолныйОтвет);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьЗапросБезТела(Знач URL
|
||||
, Знач Вид
|
||||
, Знач Параметры = ""
|
||||
@ -661,43 +735,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьЗапрос(Знач Адрес, Знач ДопЗаголовки = "", Знач ТипДанных = "")
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("Accept-Encoding", "gzip");
|
||||
Заголовки.Вставить("Accept" , "*/*");
|
||||
Заголовки.Вставить("Connection" , "keep-alive");
|
||||
Заголовки.Вставить("Accept-Charset" , "utf-8");
|
||||
|
||||
Если ЗначениеЗаполнено(ТипДанных) Тогда
|
||||
Заголовки.Вставить("Content-Type", ТипДанных);
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
||||
|
||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
НовыйЗапрос = Новый HTTPЗапрос(Адрес, Заголовки);
|
||||
|
||||
Возврат НовыйЗапрос;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьСоединение(Знач Сервер)
|
||||
|
||||
Попытка
|
||||
SSL = Новый ЗащищенноеСоединениеOpenSSL;
|
||||
Возврат Новый HTTPСоединение(Сервер, 443, , , , 3000, SSL);
|
||||
Исключение
|
||||
Возврат Новый HTTPСоединение(Сервер, 443, , , , 3000);
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоПереадресация(Знач Ответ)
|
||||
|
||||
Переадресация = 300;
|
||||
|
Loading…
Reference in New Issue
Block a user