GithubHelp home page GithubHelp logo

dropbox-fake's Introduction

Dropbox Fake

Build Status

Заглушка, реализующая подмножество Dropbox REST API v1, достаточное для работы простых программ резервного копирования.

Для работы нужно каким-либо образом перенаправить https запросы к api.dropboxapi.com, content.dropboxapi.com и www.dropbox.com на эту заглушку (hosts, fiddler, nginx?)

Установка и запуск

  1. Установите Node.js (возможно, потребуется настроить прокси для npm)
  2. Перейдите в папку с исходным кодом приложения
  3. Выполните npm install --production, чтобы скачать и установить зависимости.
  4. Укажите в файле .env свои настройки портов (по-умолчанию 3000-http, 3001-https).
  5. Вывполните npm start, чтобы запустить приложение.

Если используются стандартные порты (80, 443), то, возможно, потребуется запускать с правами администратора.

Настройка прокси для npm

  1. npm config set strict-ssl false
  2. npm config set registry "http://registry.npmjs.org"
  3. npm config set proxy http://user:[email protected]:1234

Если в имени пользователя/пароле есть спец.символы, то нужно преобразовать эти строки в urlencoded-форму.

Запуск тестов

Вместе с заглушкой поставляется два набора тестов:

  1. Юнит-тесты в папке test. Для из запуска используется фреймворк mocha (копия устанавливается вместе с dev-зависимостями).
  2. Функциональные тесты в папке test-rest. Эти тесты запускаются как отдельное приложение, сами запускают сервер и выполняют ряд типичных http-запросов.

Для запуска тестов нужно доустановить dev-зависимости с помощью команды npm install --dev в папке с приложением.

Команда npm test запустит все тесты. Команда npm run test-rest - только функциональные.

Авторизация пользователей по OAuth

В заглушке реализована авторизация по OAuth 1.0. Процедура состоит из трех шагов:

  1. get request_token -- получить временный токен для второго шага авторизации.
  2. authorize -- открыть страницу в браузере, где пользователь поддтвердит запрос.
  3. 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

Для работы по https используется самоподписанный сертификат, который выписан для адресов dropbox.com, www.dropbox.com, api.dropboxapi.com, content.dropboxapi.com.

Сертификат, ключ и настройки для openssl лежат в папке cert. Возможно, потребуется установить его в качестве доверенного сертификата в вашей ОС.

Имитация выключения API V1

Для тестирования реакции на отключения устаревшего API V1 нужно в файле .env (либо в переменных окружения) выставить переменную DISABLE_V1=true. В этом случае на все запросы будет возвращаться ошибка 400 с телом {"error": "v1_retired"}.

dropbox-fake's People

Contributors

variar avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.