Страницы

Поиск по вопросам

Показаны сообщения с ярлыком dropbox. Показать все сообщения
Показаны сообщения с ярлыком dropbox. Показать все сообщения

четверг, 23 января 2020 г.

С какого запроса следует начинать авторизацию на DropBox?

#http #https #oauth #request #dropbox


Доброго времени суток, уважаемые форумчане!

Изучаю документацию по протоколу Oauth 1.0 для DropBox, но не могу понять, с какого
запроса следует начинать сеанс обращения к серверу DropBox. В документации написано,
что первый запрос должен содержать следующие параметры:


  
  oauth_consumer_key: The Consumer Key.
  oauth_signature_method:
  The signature method the Consumer used to sign the request.
  oauth_signature:
  The signature as defined in Signing Requests.
  oauth_timestamp:
  As defined in Nonce and Timestamp.
  oauth_nonce:
  As defined in Nonce and Timestamp.
  oauth_version:
  OPTIONAL. If present, value MUST be 1.0 . Service Providers MUST assume the protocol
version to be 1.0 if this parameter is not present. Service Providers’ response to
non-1.0 value is left undefined.
  Additional parameters:
  Any additional parameters, as defined by the Service Provider.
  


Для вычисления подписи предлагается использовать PLAINTEXT, HMAC-SHA1 или RSA-SHA1.
Методом PLAINTEXT ничего не получилось, как не пыталась отправлять запросы, сервер
всё время возвращал ошибку "Not authorized".

Решила попробовать создавать подпись с помощью HMAC-SHA1, но не понятно, что будет
являться входным параметром, а что ключом. Подскажите ещё, пожалуйста, какой нужно
отправлять метод: POST или GET, куда передавать параметры: в строку запроса или в тело
запроса?

Ссылка на рефы DropBox: http://oauth.net/core/1.0/#signing_process

Пример:

    wstring url = L"https://www.dropbox.com/home/request_token";
    wstring oauth_nonce;
    CreateRequestParam(oauth_nonce);
    wstring oauth_callback = L"";
    wstring oauth_consumer_key = L"my App key";
    wstring oauth_consumer_secret = L"my App secret";
    wstring oauth_signature_method = L"PLAINTEXT";
    wstring oauth_timestamp = to_wstring(*(double*)time);
    wstring oauth_version = L"1.0";
    wstring oauth_signature = oauth_consumer_secret + L"&";
    wstring params = L"oauth_consumer_key=" + oauth_consumer_key +
                     L"&oauth_signature_method=" + oauth_signature_method +
                     L"&oauth_signature=" + oauth_signature +
                     L"&oauth_timestamp=" + oauth_timestamp +
                     L"&oauth_nonce=" + oauth_nonce +
                     L"&oauth_version=" + oauth_version;

    int err = PostRequest(url, params);


На указанный url отправляю HTTP POST запрос, в теле передаю параметры, указанные
выше. Должны возвращаться out_token и outh_secret, но возвращается страница в html-формате,
в которой нет ни того, ни другого. Что я делаю не так?
    


Ответы

Ответ 1



Не знаю, актуален ли еще вопрос, попробую ответить. Первый запрос на адрес https://api.dropbox.com/1/oauth/request_token Пример: POST https://api.dropbox.com/1/oauth/request_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="105816471209",oauth_signature="wloizpn331cc8zd&",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A37%3A53%20%2B0000",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded В ответ получаете oauth_token HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:32 GMT Content-Type: application/x-www-form-urlencoded ... Content-Length: 64 oauth_token_secret=LZl8HyVRQuP1ifON&oauth_token=RS4XReiBykw8WHNz Затем отправляете пользователя в браузер на страничку https://www.dropbox.com/1/oauth/authorize?oauth_token=RS4XReiBykw8WHNz Пользователь нажимает кнопочку Allow. Затем выполняете запрос на второй URL (подписываете его уже с использованием полученного ранее oauth_token_secret: https://api.dropbox.com/1/oauth/access_token POST https://api.dropbox.com/1/oauth/access_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="847334669",oauth_signature="wloizpn331cc8zd&LZl8HyVRQuP1ifON",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A46%3A46%20%2B0000",oauth_token="RS4XReiBykw8WHNz",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded И получаете в ответ токен, который будете использовать при последующих запросах: HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:55 GMT Content-Type: application/x-www-form-urlencoded Connection: keep-alive ... Content-Length: 76 oauth_token_secret=32mdalirxxxxa8j&oauth_token=yx8f9rdxxxxj8dia&uid=1921xxxx Пример авторизации на Dropbox Пример OAuth авторизации на Flickr с подписыванием запроса HMAC-SHA1

среда, 25 декабря 2019 г.

Обращение к git-dir через work-tree без симлинка

#git #macos #dropbox


Есть ~/work/project и ~/Dropbox/, в котором project → ~/work/project.

В самом ~/work/project папка .git вынесена в ~/work/project-git

Так вот, как без создания симлинка можно по прежнему вызывать git в ~/work/project?

Симлинк использовать нельзя так как дропбокс скопирует все содержимое. Может, ему
можно как-то сказать не делать этого?
    


Ответы

Ответ 1



адресоваться к каталогу с хранилищем (если он находится не в каталоге .git в корне проекта) можно разными способами. в вашем случае подойдёт адресация с помощью файла .git, описанная, например, в этом ответе. покажу на примере: рабочую копию (workdir) вы хотите держать в каталоге /путь/к/проекту а само хранилище (gitdir) хотите держать в каталоге /путь/к/хранилищу сделайте текущим каталог /путь/к/проекту: $ cd /путь/к/проекту инициализируйте хранилище: для программы git версии 1.7.5 или выше: $ git --separate-git-dir /путь/к/хранилищу init в каталоге /путь/к/хранилищу будет создано полноценное хранилище со всеми необходимыми файлами/каталогами: branches, config, description и т.д., а в текущем каталоге будет создан файл .git с «отсылкой» к месторасположению хранилища, такого содержания: gitdir: /путь/к/хранилищу для программы git версии ниже 1.7.5 надо будет проделать описанное в полу-ручном режиме: $ git --git-dir=/путь/к/хранилищу --work-tree=. init $ echo "gitdir: /путь/к/хранилищу" > .git для случая, если хранилище уже существует в каталоге .git в корне вашего проекта, потребуются такие действия: сделайте текущим каталог /путь/к/проекту $ cd /путь/к/проекту установите явно в конфигурации хранилища путь к рабочему каталогу: $ git config core.worktree /путь/к/проекту переместите каталог .git в нужное место с нужным именем (целевой каталог /путь/к/хранилищу не должен существовать в этот момент, иначе файлы/каталоги хранилища попадут в /путь/к/хранилищу/.git): $ mv .git /путь/к/хранилищу создайте файл .git в текущем каталоге: $ echo "gitdir: /путь/к/хранилищу" > .git

суббота, 16 марта 2019 г.

С какого запроса следует начинать авторизацию на DropBox?

Доброго времени суток, уважаемые форумчане!
Изучаю документацию по протоколу Oauth 1.0 для DropBox, но не могу понять, с какого запроса следует начинать сеанс обращения к серверу DropBox. В документации написано, что первый запрос должен содержать следующие параметры:
oauth_consumer_key: The Consumer Key. oauth_signature_method: The signature method the Consumer used to sign the request. oauth_signature: The signature as defined in Signing Requests. oauth_timestamp: As defined in Nonce and Timestamp. oauth_nonce: As defined in Nonce and Timestamp. oauth_version: OPTIONAL. If present, value MUST be 1.0 . Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. Service Providers’ response to non-1.0 value is left undefined. Additional parameters: Any additional parameters, as defined by the Service Provider.
Для вычисления подписи предлагается использовать PLAINTEXT, HMAC-SHA1 или RSA-SHA1. Методом PLAINTEXT ничего не получилось, как не пыталась отправлять запросы, сервер всё время возвращал ошибку "Not authorized".
Решила попробовать создавать подпись с помощью HMAC-SHA1, но не понятно, что будет являться входным параметром, а что ключом. Подскажите ещё, пожалуйста, какой нужно отправлять метод: POST или GET, куда передавать параметры: в строку запроса или в тело запроса?
Ссылка на рефы DropBox: http://oauth.net/core/1.0/#signing_process
Пример:
wstring url = L"https://www.dropbox.com/home/request_token"; wstring oauth_nonce; CreateRequestParam(oauth_nonce); wstring oauth_callback = L""; wstring oauth_consumer_key = L"my App key"; wstring oauth_consumer_secret = L"my App secret"; wstring oauth_signature_method = L"PLAINTEXT"; wstring oauth_timestamp = to_wstring(*(double*)time); wstring oauth_version = L"1.0"; wstring oauth_signature = oauth_consumer_secret + L"&"; wstring params = L"oauth_consumer_key=" + oauth_consumer_key + L"&oauth_signature_method=" + oauth_signature_method + L"&oauth_signature=" + oauth_signature + L"&oauth_timestamp=" + oauth_timestamp + L"&oauth_nonce=" + oauth_nonce + L"&oauth_version=" + oauth_version;
int err = PostRequest(url, params);
На указанный url отправляю HTTP POST запрос, в теле передаю параметры, указанные выше. Должны возвращаться out_token и outh_secret, но возвращается страница в html-формате, в которой нет ни того, ни другого. Что я делаю не так?


Ответ

Не знаю, актуален ли еще вопрос, попробую ответить.
Первый запрос на адрес https://api.dropbox.com/1/oauth/request_token
Пример:
POST https://api.dropbox.com/1/oauth/request_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="105816471209",oauth_signature="wloizpn331cc8zd&",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A37%3A53%20%2B0000",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded
В ответ получаете oauth_token
HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:32 GMT Content-Type: application/x-www-form-urlencoded ... Content-Length: 64
oauth_token_secret=LZl8HyVRQuP1ifON&oauth_token=RS4XReiBykw8WHNz
Затем отправляете пользователя в браузер на страничку https://www.dropbox.com/1/oauth/authorize?oauth_token=RS4XReiBykw8WHNz
Пользователь нажимает кнопочку Allow.
Затем выполняете запрос на второй URL (подписываете его уже с использованием полученного ранее oauth_token_secret
https://api.dropbox.com/1/oauth/access_token
POST https://api.dropbox.com/1/oauth/access_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="847334669",oauth_signature="wloizpn331cc8zd&LZl8HyVRQuP1ifON",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A46%3A46%20%2B0000",oauth_token="RS4XReiBykw8WHNz",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded
И получаете в ответ токен, который будете использовать при последующих запросах:
HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:55 GMT Content-Type: application/x-www-form-urlencoded Connection: keep-alive ... Content-Length: 76
oauth_token_secret=32mdalirxxxxa8j&oauth_token=yx8f9rdxxxxj8dia&uid=1921xxxx
Пример авторизации на Dropbox
Пример OAuth авторизации на Flickr с подписыванием запроса HMAC-SHA1

четверг, 29 ноября 2018 г.

Обращение к git-dir через work-tree без симлинка

Есть ~/work/project и ~/Dropbox/, в котором project → ~/work/project
В самом ~/work/project папка .git вынесена в ~/work/project-git
Так вот, как без создания симлинка можно по прежнему вызывать git в ~/work/project?
Симлинк использовать нельзя так как дропбокс скопирует все содержимое. Может, ему можно как-то сказать не делать этого?


Ответ

адресоваться к каталогу с хранилищем (если он находится не в каталоге .git в корне проекта) можно разными способами.
в вашем случае подойдёт адресация с помощью файла .git, описанная, например, в этом ответе

покажу на примере:
рабочую копию (workdir) вы хотите держать в каталоге /путь/к/проекту а само хранилище (gitdir) хотите держать в каталоге /путь/к/хранилищу

сделайте текущим каталог /путь/к/проекту
$ cd /путь/к/проекту инициализируйте хранилище:
для программы git версии 1.7.5 или выше
$ git --separate-git-dir /путь/к/хранилищу init
в каталоге /путь/к/хранилищу будет создано полноценное хранилище со всеми необходимыми файлами/каталогами: branches, config, description и т.д., а в текущем каталоге будет создан файл .git с «отсылкой» к месторасположению хранилища, такого содержания:
gitdir: /путь/к/хранилищу для программы git версии ниже 1.7.5 надо будет проделать описанное в полу-ручном режиме:
$ git --git-dir=/путь/к/хранилищу --work-tree=. init $ echo "gitdir: /путь/к/хранилищу" > .git

для случая, если хранилище уже существует в каталоге .git в корне вашего проекта, потребуются такие действия:
сделайте текущим каталог /путь/к/проекту
$ cd /путь/к/проекту установите явно в конфигурации хранилища путь к рабочему каталогу:
$ git config core.worktree /путь/к/проекту переместите каталог .git в нужное место с нужным именем (целевой каталог /путь/к/хранилищу не должен существовать в этот момент, иначе файлы/каталоги хранилища попадут в /путь/к/хранилищу/.git):
$ mv .git /путь/к/хранилищу создайте файл .git в текущем каталоге:
$ echo "gitdir: /путь/к/хранилищу" > .git