{"action":"created","comment":{"url":"https://api.github.com/repos/projectatomic/atomic-site/pulls/comments/56352276","id":56352276,"diff_hunk":"@@ -0,0 +1,113 @@\n+---\n+title: Docker credentials store\n+author: runcom\n+date: 2016-03-15 10:00:00 UTC\n+tags: docker\n+published: true\n+comments: true\n+---\n+\n+One security feature in the upcoming Docker 1.11 is the ability to use an external credentials store for registry authentication. The new version will automatically detect a configured external store, if it is available, and use it instead of the JSON file. We'll be talking more about this in a few paragraphs, but first, let's see how Docker is currently storing credentials.\n+\n+Login and logout\n+=\n+\n+Today, Docker stores the credentials used for registry authentication inside a JSON file (usually in `$HOME/.docker/config.json`).\n+Its format is pretty simple:\n+\n+```bash\n+$ cat $HOME/.docker/config.json\n+{\n+\t\"auths\": {\n+\t\t\"https://index.docker.io/v1/\": {\n+\t\t\t\"auth\": \"YW11cmRhY2E6c3VwZXJzZWNyZXRwYXNzd29yZA==\",\n+\t\t\t\"email\": \"amurdaca@redhat.com\"\n+\t\t},\n+\t\t\"localhost:5001\": {\n+\t\t\t\"auth\": \"aGVzdHVzZXI6dGVzdHBhc3N3b3Jk\",\n+\t\t\t\"email\": \"\"\n+\t\t}\n+\t}\n+}\n+```\n+After a successful `docker login`, Docker stores a base64 encoded string from the concatenation of the username, a colon,\n+and the password and associates this string to the registry the user is logging into:\n+\n+```bash\n+$ echo YW11cmRhY2E6c3VwZXJzZWNyZXRwYXNzd29yZA== | base64 -d -\n+amurdaca:supersecretpassword\n+```\n+\n+Let's forget about the `email` field, since it will be removed in Docker 1.11, and has never been used for authentication purposes.\n+\n+A `docker logout` simply removes the entry from the JSON file for the given registry:\n+\n+```bash\n+$ docker logout localhost:5001\n+Remove login credentials for localhost:5001\n+\n+$ cat $HOME/.docker/config.json\n+{\n+\t\"auths\": {\n+\t\t\"https://index.docker.io/v1/\": {\n+\t\t\t\"auth\": \"YW11cmRhY2E6c3VwZXJzZWNyZXRwYXNzd29yZA==\",\n+\t\t\t\"email\": \"amurdaca@redhat.com\"\n+\t\t}\n+\t}\n+}\n+```\n+\n+Interacting with registries\n+=\n+\n+Let's put this simply; if the registry the user is interacting with requires authentication, Docker retrieves the username and  the password from the aforementioned JSON file and use them to authenticate. No big deal.\n+\n+External Credentials Store\n+=\n+\n+As said above, Docker 1.11 implements communication with an external credentials store, in the same way as the `git-credential-helper` does for git.\n+The implementation calls out to a helper program process when a credentials store is configured. The helper program can be implemented in any programming language as long as it follows the conventions for passed arguments and information. The pull request which added this new feature can be found at [docker/docker#20107](https://github.com/docker/docker/pull/20107).\n+Docker is also providing a library to help building those credentials helpers at [docker/docker-credential-helpers](https://github.com/docker/docker-credential-helpers).\n+\n+To configure an *external* credentials store a user need an external helper program to interact with a specific keychain or external store. Docker requires the helper  program to be in the client's host `$PATH`. The Docker project itself is providing sane defaults for OSX and Windows. I've recently added support for a credentials store for desktop Linux ([docker/docker-credential-helpers#7](https://github.com/docker/docker-credential-helpers/pull/7)) which is using `libsecret` to work with the gnome keyring (and the KDE one).\n+\n+Once the helper program is installed on the client's host the user just needs to tell the Docker client to actually use it. Be aware that the user needs to perform a `docker logout` to remove the credentials already stored in the JSON file.\n+\n+This is what a configuration file looks like after a successful `docker login`:\n+\n+```bash\n+$ cat $HOME/.docker/config.json\n+{\n+\t\"auths\": {\n+\t\t\"localhost:5001\": {}\n+\t},\n+\t\"credsStore\": \"secretservice\"\n+}\n+```\n+\n+This file is telling us that we have stored credentials for the registry at `localhost:5001` and we can see no credentials are stored in the file. Instead we can see that `credsStore` is populated with the string `secretservice` (which is the default on Linux if installed). Docker reads the `credsStore` string and execute the helper `docker-credential-secretservice` to interact with the credentials store.\n+\n+With the help of the binary `secret-tool` we can retrieve the credentials stored (just for debugging purposes):\n+\n+```bash\n+$ secret-tool search server localhost:5001\n+[/org/freedesktop/secrets/collection/login/3774]\n+label = localhost:5001\n+secret = testpassword\n+created = 2016-03-11 17:47:36\n+modified = 2016-03-12 12:29:31\n+schema = io.docker.Credentials\n+attribute.username = testuser\n+attribute.server = localhost:5001\n+attribute.docker_cli = 1\n+```\n+\n+When interacting with registries Docker queries the credentials store configured and uses the credentials returned (if any).\n+\n+Generally, it's desirable to have the system credentials store managing secrets (specifically passwords) in order to apply any additional security measures (apart from file permissions).  \n+The default desktop Linux credentials store uses the system keyring to store username and password for Docker in the default Login session, in the same way that other software like Google Chrome does. This means the keyring is automatically unlocked when the user logins into the system. Passwords stored there also persist indefinitely, so that a reboot won't erase them.  \n+\n+The feature's pluggability helps us create and use more advanced *secrets backends*, especially for server use. We're currently exploring the [`custodia`](https://github.com/latchset/custodia) project to be used as an external credentials store for Docker, so stay tuned for more information!  \n+Other implementations may store encrypted (hashed) credentials and validate the credentials provided without explicitly storing plain passwords.","path":"source/blog/2016-03-11-docker-credentials-store.html.md","position":111,"original_position":111,"commit_id":"d103b1c4f734e2ed03f1aeab039e4812fd31a14d","original_commit_id":"d103b1c4f734e2ed03f1aeab039e4812fd31a14d","user":{"login":"bproffitt","id":1998949,"avatar_url":"https://avatars.githubusercontent.com/u/1998949?v=3","gravatar_id":"","url":"https://api.github.com/users/bproffitt","html_url":"https://github.com/bproffitt","followers_url":"https://api.github.com/users/bproffitt/followers","following_url":"https://api.github.com/users/bproffitt/following{/other_user}","gists_url":"https://api.github.com/users/bproffitt/gists{/gist_id}","starred_url":"https://api.github.com/users/bproffitt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bproffitt/subscriptions","organizations_url":"https://api.github.com/users/bproffitt/orgs","repos_url":"https://api.github.com/users/bproffitt/repos","events_url":"https://api.github.com/users/bproffitt/events{/privacy}","received_events_url":"https://api.github.com/users/bproffitt/received_events","type":"User","site_admin":false},"body":"Fixed and pushed. Should go live in 15-20 minutes.\n\nBKP\n\nOn Wed, Mar 16, 2016 at 11:12 AM, Antonio Murdaca <notifications@github.com>\nwrote:\n\n> In source/blog/2016-03-11-docker-credentials-store.html.md\n> <https://github.com/projectatomic/atomic-site/pull/270#discussion_r56351495>\n> :\n>\n> > +secret = testpassword\n> > +created = 2016-03-11 17:47:36\n> > +modified = 2016-03-12 12:29:31\n> > +schema = io.docker.Credentials\n> > +attribute.username = testuser\n> > +attribute.server = localhost:5001\n> > +attribute.docker_cli = 1\n> > +```\n> > +\n> > +When interacting with registries Docker queries the credentials store configured and uses the credentials returned (if any).\n> > +\n> > +Generally, it's desirable to have the system credentials store managing secrets (specifically passwords) in order to apply any additional security measures (apart from file permissions).\n> > +The default desktop Linux credentials store uses the system keyring to store username and password for Docker in the default Login session, in the same way that other software like Google Chrome does. This means the keyring is automatically unlocked when the user logins into the system. Passwords stored there also persist indefinitely, so that a reboot won't erase them.\n> > +\n> > +The feature's pluggability helps us create and use more advanced *secrets backends*, especially for server use. We're currently exploring the [`custodia`](https://github.com/latchset/custodia) project to be used as an external credentials store for Docker, so stay tuned for more information!\n> > +Other implementations may store encrypted (hashed) credentials and validate the credentials provided without explicitly storing plain passwords.\n>\n> just spotted this line now that I re-read the post on the website - this\n> line should be removed @jberkus <https://github.com/jberkus> @bproffitt\n> <https://github.com/bproffitt>\n>\n> —\n> You are receiving this because you were mentioned.\n> Reply to this email directly or view it on GitHub\n> <https://github.com/projectatomic/atomic-site/pull/270/files/d103b1c4f734e2ed03f1aeab039e4812fd31a14d#r56351495>\n>\n\n\n\n-- \nBrian Proffitt\nPrincipal Community Analyst\nOpen Source and Standards\n@TheTechScribe\n574.383.9BKP\n","created_at":"2016-03-16T15:16:50Z","updated_at":"2016-03-16T15:16:50Z","html_url":"https://github.com/projectatomic/atomic-site/pull/270#discussion_r56352276","pull_request_url":"https://api.github.com/repos/projectatomic/atomic-site/pulls/270","_links":{"self":{"href":"https://api.github.com/repos/projectatomic/atomic-site/pulls/comments/56352276"},"html":{"href":"https://github.com/projectatomic/atomic-site/pull/270#discussion_r56352276"},"pull_request":{"href":"https://api.github.com/repos/projectatomic/atomic-site/pulls/270"}}},"pull_request":{"url":"https://api.github.com/repos/projectatomic/atomic-site/pulls/270","id":62832287,"html_url":"https://github.com/projectatomic/atomic-site/pull/270","diff_url":"https://github.com/projectatomic/atomic-site/pull/270.diff","patch_url":"https://github.com/projectatomic/atomic-site/pull/270.patch","issue_url":"https://api.github.com/repos/projectatomic/atomic-site/issues/270","number":270,"state":"closed","locked":false,"title":"Runcom docker credentials store","user":{"login":"jberkus","id":115146,"avatar_url":"https://avatars.githubusercontent.com/u/115146?v=3","gravatar_id":"","url":"https://api.github.com/users/jberkus","html_url":"https://github.com/jberkus","followers_url":"https://api.github.com/users/jberkus/followers","following_url":"https://api.github.com/users/jberkus/following{/other_user}","gists_url":"https://api.github.com/users/jberkus/gists{/gist_id}","starred_url":"https://api.github.com/users/jberkus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jberkus/subscriptions","organizations_url":"https://api.github.com/users/jberkus/orgs","repos_url":"https://api.github.com/users/jberkus/repos","events_url":"https://api.github.com/users/jberkus/events{/privacy}","received_events_url":"https://api.github.com/users/jberkus/received_events","type":"User","site_admin":false},"body":"Replaces PR from @runcom with one I've edited.  @runcom, @rhatdan, etc., please approve.\r\n\r\n@bproffitt, once this is approved by them it's ready to go.\r\n\r\nOne query though:\r\n\r\n\"credentials store\" vs. \"credential store\"?  Which?","created_at":"2016-03-14T23:12:19Z","updated_at":"2016-03-16T15:16:51Z","closed_at":"2016-03-16T13:25:07Z","merged_at":"2016-03-16T13:25:07Z","merge_commit_sha":"9602aca6d798233ede1874cf1a495054bbdb2186","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/projectatomic/atomic-site/pulls/270/commits","review_comments_url":"https://api.github.com/repos/projectatomic/atomic-site/pulls/270/comments","review_comment_url":"https://api.github.com/repos/projectatomic/atomic-site/pulls/comments{/number}","comments_url":"https://api.github.com/repos/projectatomic/atomic-site/issues/270/comments","statuses_url":"https://api.github.com/repos/projectatomic/atomic-site/statuses/d103b1c4f734e2ed03f1aeab039e4812fd31a14d","head":{"label":"projectatomic:runcom-docker-credentials-store","ref":"runcom-docker-credentials-store","sha":"d103b1c4f734e2ed03f1aeab039e4812fd31a14d","user":{"login":"projectatomic","id":6852258,"avatar_url":"https://avatars.githubusercontent.com/u/6852258?v=3","gravatar_id":"","url":"https://api.github.com/users/projectatomic","html_url":"https://github.com/projectatomic","followers_url":"https://api.github.com/users/projectatomic/followers","following_url":"https://api.github.com/users/projectatomic/following{/other_user}","gists_url":"https://api.github.com/users/projectatomic/gists{/gist_id}","starred_url":"https://api.github.com/users/projectatomic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectatomic/subscriptions","organizations_url":"https://api.github.com/users/projectatomic/orgs","repos_url":"https://api.github.com/users/projectatomic/repos","events_url":"https://api.github.com/users/projectatomic/events{/privacy}","received_events_url":"https://api.github.com/users/projectatomic/received_events","type":"Organization","site_admin":false},"repo":{"id":18380917,"name":"atomic-site","full_name":"projectatomic/atomic-site","owner":{"login":"projectatomic","id":6852258,"avatar_url":"https://avatars.githubusercontent.com/u/6852258?v=3","gravatar_id":"","url":"https://api.github.com/users/projectatomic","html_url":"https://github.com/projectatomic","followers_url":"https://api.github.com/users/projectatomic/followers","following_url":"https://api.github.com/users/projectatomic/following{/other_user}","gists_url":"https://api.github.com/users/projectatomic/gists{/gist_id}","starred_url":"https://api.github.com/users/projectatomic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectatomic/subscriptions","organizations_url":"https://api.github.com/users/projectatomic/orgs","repos_url":"https://api.github.com/users/projectatomic/repos","events_url":"https://api.github.com/users/projectatomic/events{/privacy}","received_events_url":"https://api.github.com/users/projectatomic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/projectatomic/atomic-site","description":"Source code for projectatomic.io","fork":false,"url":"https://api.github.com/repos/projectatomic/atomic-site","forks_url":"https://api.github.com/repos/projectatomic/atomic-site/forks","keys_url":"https://api.github.com/repos/projectatomic/atomic-site/keys{/key_id}","collaborators_url":"https://api.github.com/repos/projectatomic/atomic-site/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/projectatomic/atomic-site/teams","hooks_url":"https://api.github.com/repos/projectatomic/atomic-site/hooks","issue_events_url":"https://api.github.com/repos/projectatomic/atomic-site/issues/events{/number}","events_url":"https://api.github.com/repos/projectatomic/atomic-site/events","assignees_url":"https://api.github.com/repos/projectatomic/atomic-site/assignees{/user}","branches_url":"https://api.github.com/repos/projectatomic/atomic-site/branches{/branch}","tags_url":"https://api.github.com/repos/projectatomic/atomic-site/tags","blobs_url":"https://api.github.com/repos/projectatomic/atomic-site/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/projectatomic/atomic-site/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/projectatomic/atomic-site/git/refs{/sha}","trees_url":"https://api.github.com/repos/projectatomic/atomic-site/git/trees{/sha}","statuses_url":"https://api.github.com/repos/projectatomic/atomic-site/statuses/{sha}","languages_url":"https://api.github.com/repos/projectatomic/atomic-site/languages","stargazers_url":"https://api.github.com/repos/projectatomic/atomic-site/stargazers","contributors_url":"https://api.github.com/repos/projectatomic/atomic-site/contributors","subscribers_url":"https://api.github.com/repos/projectatomic/atomic-site/subscribers","subscription_url":"https://api.github.com/repos/projectatomic/atomic-site/subscription","commits_url":"https://api.github.com/repos/projectatomic/atomic-site/commits{/sha}","git_commits_url":"https://api.github.com/repos/projectatomic/atomic-site/git/commits{/sha}","comments_url":"https://api.github.com/repos/projectatomic/atomic-site/comments{/number}","issue_comment_url":"https://api.github.com/repos/projectatomic/atomic-site/issues/comments{/number}","contents_url":"https://api.github.com/repos/projectatomic/atomic-site/contents/{+path}","compare_url":"https://api.github.com/repos/projectatomic/atomic-site/compare/{base}...{head}","merges_url":"https://api.github.com/repos/projectatomic/atomic-site/merges","archive_url":"https://api.github.com/repos/projectatomic/atomic-site/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/projectatomic/atomic-site/downloads","issues_url":"https://api.github.com/repos/projectatomic/atomic-site/issues{/number}","pulls_url":"https://api.github.com/repos/projectatomic/atomic-site/pulls{/number}","milestones_url":"https://api.github.com/repos/projectatomic/atomic-site/milestones{/number}","notifications_url":"https://api.github.com/repos/projectatomic/atomic-site/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/projectatomic/atomic-site/labels{/name}","releases_url":"https://api.github.com/repos/projectatomic/atomic-site/releases{/id}","deployments_url":"https://api.github.com/repos/projectatomic/atomic-site/deployments","created_at":"2014-04-02T20:46:32Z","updated_at":"2016-03-03T15:43:22Z","pushed_at":"2016-03-16T15:16:20Z","git_url":"git://github.com/projectatomic/atomic-site.git","ssh_url":"git@github.com:projectatomic/atomic-site.git","clone_url":"https://github.com/projectatomic/atomic-site.git","svn_url":"https://github.com/projectatomic/atomic-site","homepage":"projectatomic.io","size":8896,"stargazers_count":53,"watchers_count":53,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":70,"mirror_url":null,"open_issues_count":18,"forks":70,"open_issues":18,"watchers":53,"default_branch":"master"}},"base":{"label":"projectatomic:master","ref":"master","sha":"065a6bd9147169ca3127aaf78f242ee0412266d3","user":{"login":"projectatomic","id":6852258,"avatar_url":"https://avatars.githubusercontent.com/u/6852258?v=3","gravatar_id":"","url":"https://api.github.com/users/projectatomic","html_url":"https://github.com/projectatomic","followers_url":"https://api.github.com/users/projectatomic/followers","following_url":"https://api.github.com/users/projectatomic/following{/other_user}","gists_url":"https://api.github.com/users/projectatomic/gists{/gist_id}","starred_url":"https://api.github.com/users/projectatomic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectatomic/subscriptions","organizations_url":"https://api.github.com/users/projectatomic/orgs","repos_url":"https://api.github.com/users/projectatomic/repos","events_url":"https://api.github.com/users/projectatomic/events{/privacy}","received_events_url":"https://api.github.com/users/projectatomic/received_events","type":"Organization","site_admin":false},"repo":{"id":18380917,"name":"atomic-site","full_name":"projectatomic/atomic-site","owner":{"login":"projectatomic","id":6852258,"avatar_url":"https://avatars.githubusercontent.com/u/6852258?v=3","gravatar_id":"","url":"https://api.github.com/users/projectatomic","html_url":"https://github.com/projectatomic","followers_url":"https://api.github.com/users/projectatomic/followers","following_url":"https://api.github.com/users/projectatomic/following{/other_user}","gists_url":"https://api.github.com/users/projectatomic/gists{/gist_id}","starred_url":"https://api.github.com/users/projectatomic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectatomic/subscriptions","organizations_url":"https://api.github.com/users/projectatomic/orgs","repos_url":"https://api.github.com/users/projectatomic/repos","events_url":"https://api.github.com/users/projectatomic/events{/privacy}","received_events_url":"https://api.github.com/users/projectatomic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/projectatomic/atomic-site","description":"Source code for projectatomic.io","fork":false,"url":"https://api.github.com/repos/projectatomic/atomic-site","forks_url":"https://api.github.com/repos/projectatomic/atomic-site/forks","keys_url":"https://api.github.com/repos/projectatomic/atomic-site/keys{/key_id}","collaborators_url":"https://api.github.com/repos/projectatomic/atomic-site/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/projectatomic/atomic-site/teams","hooks_url":"https://api.github.com/repos/projectatomic/atomic-site/hooks","issue_events_url":"https://api.github.com/repos/projectatomic/atomic-site/issues/events{/number}","events_url":"https://api.github.com/repos/projectatomic/atomic-site/events","assignees_url":"https://api.github.com/repos/projectatomic/atomic-site/assignees{/user}","branches_url":"https://api.github.com/repos/projectatomic/atomic-site/branches{/branch}","tags_url":"https://api.github.com/repos/projectatomic/atomic-site/tags","blobs_url":"https://api.github.com/repos/projectatomic/atomic-site/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/projectatomic/atomic-site/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/projectatomic/atomic-site/git/refs{/sha}","trees_url":"https://api.github.com/repos/projectatomic/atomic-site/git/trees{/sha}","statuses_url":"https://api.github.com/repos/projectatomic/atomic-site/statuses/{sha}","languages_url":"https://api.github.com/repos/projectatomic/atomic-site/languages","stargazers_url":"https://api.github.com/repos/projectatomic/atomic-site/stargazers","contributors_url":"https://api.github.com/repos/projectatomic/atomic-site/contributors","subscribers_url":"https://api.github.com/repos/projectatomic/atomic-site/subscribers","subscription_url":"https://api.github.com/repos/projectatomic/atomic-site/subscription","commits_url":"https://api.github.com/repos/projectatomic/atomic-site/commits{/sha}","git_commits_url":"https://api.github.com/repos/projectatomic/atomic-site/git/commits{/sha}","comments_url":"https://api.github.com/repos/projectatomic/atomic-site/comments{/number}","issue_comment_url":"https://api.github.com/repos/projectatomic/atomic-site/issues/comments{/number}","contents_url":"https://api.github.com/repos/projectatomic/atomic-site/contents/{+path}","compare_url":"https://api.github.com/repos/projectatomic/atomic-site/compare/{base}...{head}","merges_url":"https://api.github.com/repos/projectatomic/atomic-site/merges","archive_url":"https://api.github.com/repos/projectatomic/atomic-site/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/projectatomic/atomic-site/downloads","issues_url":"https://api.github.com/repos/projectatomic/atomic-site/issues{/number}","pulls_url":"https://api.github.com/repos/projectatomic/atomic-site/pulls{/number}","milestones_url":"https://api.github.com/repos/projectatomic/atomic-site/milestones{/number}","notifications_url":"https://api.github.com/repos/projectatomic/atomic-site/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/projectatomic/atomic-site/labels{/name}","releases_url":"https://api.github.com/repos/projectatomic/atomic-site/releases{/id}","deployments_url":"https://api.github.com/repos/projectatomic/atomic-site/deployments","created_at":"2014-04-02T20:46:32Z","updated_at":"2016-03-03T15:43:22Z","pushed_at":"2016-03-16T15:16:20Z","git_url":"git://github.com/projectatomic/atomic-site.git","ssh_url":"git@github.com:projectatomic/atomic-site.git","clone_url":"https://github.com/projectatomic/atomic-site.git","svn_url":"https://github.com/projectatomic/atomic-site","homepage":"projectatomic.io","size":8896,"stargazers_count":53,"watchers_count":53,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":70,"mirror_url":null,"open_issues_count":18,"forks":70,"open_issues":18,"watchers":53,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/projectatomic/atomic-site/pulls/270"},"html":{"href":"https://github.com/projectatomic/atomic-site/pull/270"},"issue":{"href":"https://api.github.com/repos/projectatomic/atomic-site/issues/270"},"comments":{"href":"https://api.github.com/repos/projectatomic/atomic-site/issues/270/comments"},"review_comments":{"href":"https://api.github.com/repos/projectatomic/atomic-site/pulls/270/comments"},"review_comment":{"href":"https://api.github.com/repos/projectatomic/atomic-site/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/projectatomic/atomic-site/pulls/270/commits"},"statuses":{"href":"https://api.github.com/repos/projectatomic/atomic-site/statuses/d103b1c4f734e2ed03f1aeab039e4812fd31a14d"}}}}