2755: add support for signed locators in the Python SDK.
authorTim Pierce <twp@curoverse.com>
Wed, 21 May 2014 14:58:18 +0000 (10:58 -0400)
committerTim Pierce <twp@curoverse.com>
Fri, 23 May 2014 21:25:29 +0000 (17:25 -0400)
commit521457373a8f1e46f44a43311be2d9242ad5d0a9
tree010214558af58b5461c6b4325d0c2df1add566ae
parentb28565c8aa08cbf70762fa69e49c5067fcb57e96
2755: add support for signed locators in the Python SDK.

* arvados.Keep.put() saves the response body (which may contain a
  signed locator) and returns it to the caller.

* arvados.Keep.get() passes the full signed locator to the remote Keep
  server. The bare MD5 hash is still used for caching and for
  shuffled_service_roots

* run_test_server.run_keep() takes arguments 'blob_signing_key' and
  'enforce_permissions', for testing permission signatures in unit
  tests.

* test_keep_client: new unit tests for permissions:
    - with --enforce-permissions=true:
        - GET with a signed locator works
        - GET with an unsigned locator fails
        - unauthenticated GET fails
    - with --enforce-permissions=false:
        - GET with a signed locator works
- GET with an unsigned locator works
- unauthenticated GET works

Bug fixes to permission handling in the Keep server:

* Locator hints may appear in any order; be flexible. Parse them in
  GetBlockHandler rather than in the REST router.

* Returned locators are terminated with newline (consistent with
  Warehouse, and more friendly for human debugging).

* The locator returned from a PUT request always has a size hint.

* The correct Authorization header keyword is "OAuth2", not
  "OAuth". D'oh.

* Updated unit tests to accommodate newlines, size hints and OAuth2.

Refs #2755.
sdk/python/arvados/keep.py
sdk/python/run_test_server.py
sdk/python/test_keep_client.py
services/keep/src/keep/handler_test.go
services/keep/src/keep/keep.go
services/keep/src/keep/keep_test.go
services/keep/src/keep/perms.go