)]}'
{
  "commit": "4fe71e314157576d2bdfe54cc6f8ce5df38c571d",
  "tree": "e9c0d8200c8462f87767f7059fc72c5594b8b547",
  "parents": [
    "3cbb6869edd05975fc876844bfff52d12ac32f66"
  ],
  "author": {
    "name": "Vitaly Buka",
    "email": "vitalybuka@google.com",
    "time": "Fri Jan 29 11:50:53 2016 -0800"
  },
  "committer": {
    "name": "Vitaly Buka",
    "email": "vitalybuka@google.com",
    "time": "Fri Jan 29 22:20:57 2016 +0000"
  },
  "message": "Make App ID a part of User ID\n\nIn addition to user ID, auth tokens could be bound to specific app ID.\nSo internal libweave User ID, named UserAppId, from now will consist of\nauth type, user ID and optional app ID. If operation was called with\ntoken containing only user ID, libweave will grant access to all\ncommands for every app for the given user ID.\n\nTo distinguish between user authorized with local, pairing or anonymous\ntokens libweave uses UserAppId::type field. As macaroons have no caveats\nfor this kind of information, current implementation will just append\nthe type to the user ID caveat of the access token.\n\nBUG: 26292014\n\nChange-Id: I528c2717c95c5daed74bb769b3569fac823761f2\nReviewed-on: https://weave-review.googlesource.com/2394\nReviewed-by: Alex Vakulenko \u003cavakulenko@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3c08071724d097e0fba9cf15cb12795f43547cfa",
      "old_mode": 33188,
      "old_path": "src/privet/auth_manager.cc",
      "new_id": "0b8a981403080487b2712e454ea3292573bda5a3",
      "new_mode": 33188,
      "new_path": "src/privet/auth_manager.cc"
    },
    {
      "type": "modify",
      "old_id": "d88d033af6e10ff7296593c74a04414e51466d97",
      "old_mode": 33188,
      "old_path": "src/privet/auth_manager_unittest.cc",
      "new_id": "a0a0d01fda248ea0956a37bce143ed97b137ba20",
      "new_mode": 33188,
      "new_path": "src/privet/auth_manager_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "5f31feef7e703d556f7441bb89a88487e3ac9e8a",
      "old_mode": 33188,
      "old_path": "src/privet/cloud_delegate.cc",
      "new_id": "49fceaa88ffccbf0c2cb0b3af342a933ddd88c1c",
      "new_mode": 33188,
      "new_path": "src/privet/cloud_delegate.cc"
    },
    {
      "type": "modify",
      "old_id": "c75d438f95eb895f4ea9910335b995b0d12cd49b",
      "old_mode": 33188,
      "old_path": "src/privet/mock_delegates.h",
      "new_id": "c2e9a89d1b5208393edd3411e8a6cdfb3fd5bcc5",
      "new_mode": 33188,
      "new_path": "src/privet/mock_delegates.h"
    },
    {
      "type": "modify",
      "old_id": "fa79e77bac8431364f60c0356be744f8ea89a76a",
      "old_mode": 33188,
      "old_path": "src/privet/privet_handler_unittest.cc",
      "new_id": "20f5aa08cd098823d9c16fccc28fb9511c5960f9",
      "new_mode": 33188,
      "new_path": "src/privet/privet_handler_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "49c4522fc0ab094ec5d974d92bdc01228c980584",
      "old_mode": 33188,
      "old_path": "src/privet/privet_types.h",
      "new_id": "0f51862bb3d2009680a4540987d334a5412ef0cd",
      "new_mode": 33188,
      "new_path": "src/privet/privet_types.h"
    },
    {
      "type": "modify",
      "old_id": "04164b3f40f09f5859d606e4477b296db436dbb9",
      "old_mode": 33188,
      "old_path": "src/privet/security_manager.cc",
      "new_id": "3b086135463ade020ca9193610036cb1cb8be13d",
      "new_mode": 33188,
      "new_path": "src/privet/security_manager.cc"
    },
    {
      "type": "modify",
      "old_id": "43b7f0071d7bd12188fa6d499b83a61c020e6307",
      "old_mode": 33188,
      "old_path": "src/privet/security_manager_unittest.cc",
      "new_id": "f596de99a7f49db15c5bbb58b7ecd174d7087d93",
      "new_mode": 33188,
      "new_path": "src/privet/security_manager_unittest.cc"
    }
  ]
}
