Заглушка, реализующая подмножество Dropbox REST API v1, достаточное для работы простых программ резервного копирования.
Для работы нужно каким-либо образом перенаправить https запросы к api.dropboxapi.com, content.dropboxapi.com и www.dropbox.com на эту заглушку (hosts, fiddler, nginx?)
- Установите Node.js (возможно, потребуется настроить прокси для npm)
- Перейдите в папку с исходным кодом приложения
- Выполните
npm install --production
, чтобы скачать и установить зависимости. - Укажите в файле .env свои настройки портов (по-умолчанию 3000-http, 3001-https).
- Вывполните
npm start
, чтобы запустить приложение.
Если используются стандартные порты (80, 443), то, возможно, потребуется запускать с правами администратора.
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org"
npm config set proxy http://user:[email protected]:1234
Если в имени пользователя/пароле есть спец.символы, то нужно преобразовать эти строки в urlencoded-форму.
Вместе с заглушкой поставляется два набора тестов:
- Юнит-тесты в папке
test
. Для из запуска используется фреймворкmocha
(копия устанавливается вместе с dev-зависимостями). - Функциональные тесты в папке
test-rest
. Эти тесты запускаются как отдельное приложение, сами запускают сервер и выполняют ряд типичных http-запросов.
Для запуска тестов нужно доустановить dev-зависимости с помощью команды
npm install --dev
в папке с приложением.
Команда npm test
запустит все тесты. Команда npm run test-rest
- только функциональные.
В заглушке реализована авторизация по OAuth 1.0. Процедура состоит из трех шагов:
- get request_token -- получить временный токен для второго шага авторизации.
- authorize -- открыть страницу в браузере, где пользователь поддтвердит запрос.
- get access_token -- получить постоянный токен, поддвержденный пользователем.
В Dropbox на шаге 2 открывается веб-страница, где пользователь может разрешить доступ или отказаться. В этой заглушке на шаге 2 открывается пустая страница, а доступ автоматически разрешается. Поведение может измениться в будущем.
OAuth в заглушке реализован корректно в части проверки валиндности request_token на втором шаге и проверки авторизованности request_token на третьем шаге.
При этом не проверяются consumer_secret. В Dropbox они используются для подключения различных приложений к одному аккаунту.
Для всех последующих запросов к api производится проверка соответствия токена и секрета.
Токены по умолчанию хранятся в базе данных (data\db.json
).
Если сохранять токены между запусками заглушики не требуется,
то нужно в файле .env
закомментировать SAVE_DB=true
.
Для каждого пользователя в процессе авторизации по OAuth генерируется
токен (guid). Для этого токена создаются папки в каталогах data
и chunks
.
В папку data\<token>
будут загружаться данные пользователя
(аналог папки приложения в Dropbox). В папку chunks\<token>
будут загружаться
частично загруженные файлы, которые по окончанию загрузки перемещаются в
data\<token>
.
Сервис сообщает, что пользователю доступно 2Гб данных. В реальности этот лимит никак не проверяется.
Для работы по https используется самоподписанный сертификат, который выписан для адресов dropbox.com, www.dropbox.com, api.dropboxapi.com, content.dropboxapi.com.
Сертификат, ключ и настройки для openssl лежат в папке cert
.
Возможно, потребуется установить его в качестве доверенного сертификата
в вашей ОС.
Для тестирования реакции на отключения устаревшего API V1 нужно в файле .env (либо в переменных окружения) выставить переменную DISABLE_V1=true. В этом случае на все запросы будет возвращаться ошибка 400 с телом {"error": "v1_retired"}.