)]}'
{
  "commit": "1ef8a99a4d58ea235cb65ea66b27bd154f100a6d",
  "tree": "ad4ac4debe7f9d891c50c275b596d560521beddf",
  "parents": [
    "922ca5e7311959deba5f8a9fd4145b069c9c79bb"
  ],
  "author": {
    "name": "David Ostrovsky",
    "email": "david@ostrovsky.org",
    "time": "Sun Sep 06 13:34:07 2026 +0200"
  },
  "committer": {
    "name": "David Ostrovsky",
    "email": "david@ostrovsky.org",
    "time": "Sun Sep 06 17:14:03 2026 +0200"
  },
  "message": "Consolidate shared plumbing into AbstractOAuthService\n\nToken exchange, the authorization redirect, the version and the name\nwere repeated in both StandardResourceOAuthService and\nStandardIdTokenOAuthService. Pull them into a common\nAbstractOAuthService that both now extend, so the four methods and the\nclient/log/name state exist once.\n\nMigrate the two remaining hybrid providers, google and azure, onto the\nsame base with their own getUserInfo. Both fetch a resource and also\nvalidate a claim from the id_token: google matches the hosted\ndomain (hd), azure matches the tenant (tid) and audience (aud), and both\nreturn null to deny login on mismatch. They now fetch through\nOAuthClient instead of a raw OAuth20Service.\n\nGoogle keeps its authorization-redirect customization by overriding\ngetAuthorizationInfo to append the hd parameter.\n\nAzure needs its \"Accept: */*\" request header, so OAuthClient gains a\nget overload taking extra headers; the plain get delegates to it with\nnone. With this, google and azure no longer import ScribeJava request,\nresponse or token types.\n\nChange-Id: I2e263ee5f7ffca533a2ed92b396c77b83f44bade\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cae5bd1c63699b277118ebc792f4f9898905abcc",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/AbstractOAuthService.java"
    },
    {
      "type": "modify",
      "old_id": "f114b5ba09b4c25e8f6b2aaee7d879731c4ba2d6",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/OAuthClient.java",
      "new_id": "9c2ef9a012e36baeca6cb65b982279a4661c0e18",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/OAuthClient.java"
    },
    {
      "type": "modify",
      "old_id": "481b9d233ca2bb0775cfae5de7b9cf1e7c22054d",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/ScribeOAuthClient.java",
      "new_id": "2988c74748379db5046371d846648878ac3b74df",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/ScribeOAuthClient.java"
    },
    {
      "type": "modify",
      "old_id": "b8ebe827985276720e3b49a4198b26f1148fec1d",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/StandardIdTokenOAuthService.java",
      "new_id": "bde1758ffd095024cee9d2ffa6922fe25e8fddfc",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/StandardIdTokenOAuthService.java"
    },
    {
      "type": "modify",
      "old_id": "3131113405a5f5a373415296a4ff13b6f34ee9ab",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/StandardResourceOAuthService.java",
      "new_id": "a8a10ea774fa6cd85228feedc8d4f99e6d087ac5",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/StandardResourceOAuthService.java"
    },
    {
      "type": "modify",
      "old_id": "2e141b05c9770bed11862a092efb51084de85e9b",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/azure/AzureActiveDirectoryService.java",
      "new_id": "d3fb5c5fef4d66f35979130528e9b8f4660b7783",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/azure/AzureActiveDirectoryService.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "73ca43036a065060b658313e1a93731037f0fb24",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/azure/AzureApi.java"
    },
    {
      "type": "modify",
      "old_id": "dd64ffcee5d7d3ae787d900096bb6c6af9560b5e",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/google/GoogleOAuthService.java",
      "new_id": "d80cd2b93d60438506c9aa8088edefdd3b0e9500",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/oauth/google/GoogleOAuthService.java"
    }
  ]
}
