{"action":"created","comment":{"url":"https://api.github.com/repos/ashfurrow/blog/pulls/comments/65096966","id":65096966,"diff_hunk":"@@ -0,0 +1,99 @@\n+---\n+title: Dropping Dropbox\n+date: 2016-05-30 16:23:22 UTC\n+og_image: /img/blog/dropping-dropbox/dashboard.png\n+background_image: /img/blog/dropping-dropbox/background.jpg\n+background_image_source: https://twitter.com/CloudyConway/status/737279203532541952\n+---\n+\n+Dropbox is a jewel of the Y-Combinator industrial complex: a successful company that provides software as a service to ordinary people. They even allegedly [turned down an acquisition offer from Steve Jobs](http://techcrunch.com/2011/10/18/dropbox-said-no-to-nine-digits-acquisition-offer-from-apple-steve-jobs/). Their success is no small feat, but sadly it appears that they had to make a deal with the devil to achieve so much. \n+\n+From my perspective, the company has been acting suspiciously for a while. Appointing [George W. Bush's Secretary of State to their Board](http://bits.blogs.nytimes.com/2014/04/18/protests-continue-against-dropbox-after-appointing-condoleezza-rice-to-board/) was a big red flag. It inspired a whole [Drop Dropbox](http://www.drop-dropbox.com/) movement. I've been uneasy about Dropbox, but when they announced they'd be integrating in with my [operating system's kernel](https://blogs.dropbox.com/tech/2016/05/going-deeper-with-project-infinite/), I decided to move away from them. \n+\n+<!-- more -->\n+\n+<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Things I don&#39;t want: <a href=\"https://twitter.com/hashtag/Dropbox?src=hash\">#Dropbox</a> up in my kernel. <a href=\"https://t.co/p4LV87cKYy\">pic.twitter.com/p4LV87cKYy</a></p>&mdash; Dusty (@duspom) <a href=\"https://twitter.com/duspom/status/735263193497505792\">May 25, 2016</a></blockquote> <script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n+\n+I've been trying to move away from online services that allow easy mass surveillance. For example, I started in 2012, when I [moved off of Gmail](https://ashfurrow.com/blog/switching-from-gmail-to-fastmail/). It's not been easy, I think in part because services that are popular are typically ad-supported – viewing your data is how they sell ads to you – this implies a lack of end-to-end encryption, and security in general. I've been tolerating Dropbox because it's so _damm_ convenient, but the kernel extension was the last straw, so I [asked for alternatives](https://twitter.com/ashfurrow/status/736936037876895744). \n+\n+The solution that appealed to me the most was [BitTorrent Sync](https://getsync.com). It's closed source (boo) but offers a good compromise between security and convenience. I decided to give it a try, and in the process I ran into confusing documentation and advice that would make me _less_ secure than using Dropbox. It really sucks that in order to _securely_ do something as commonplace as syncing files, you have to be pretty tech savvy. While I'm continuing to evaluate it for a sync solution (I haven't moved off Dropbox yet), I'm hoping this post will be a resource for anyone who wants to use BitTorrent Sync securely.\n+\n+(But I'm hopeful that next month we'll see Apple show us some awesome end-to-end encryption features for iCloud Drive, too.)\n+\n+I am not a security expert, so I've marked the aspects of this post that I'm not 100% sure of with [?] so that I can be honest about what I know. If you can verify – or correct – something I'm unsure of, please [let me know](https://github.com/ashfurrow/blog/issues/new) or [send a correction](https://github.com/ashfurrow/blog/compare). My hope is that this post can evolve to be somewhat authoritative instructions on how to securely sync files across devices, aimed at people who are computer savvy but maybe not familiar with server administration and security (like me).\n+\n+## Overview\n+\n+Okay, so BitTorrent Sync is a service that runs on computers and synchronizes files across them using BitTorrent. Cool. Their site isn't clear on this, but you [need to buy a license](https://getsync.com/features#compare) to sync across multiple devices. It's $40/year, but has a 30-day trial (that they only tell you about after you download the app). Yeah, documentation needs some work.\n+\n+BitTorrent Sync is a really impressive service that provides a _tonne_ of awesome features. I'm probably not going to use most of them, but crucially, it provides secure syncing of files across computers and smartphones.\n+\n+The BitTorrent protocol is inherently decentralized, so naturally syncing with BitTorrent is decentralized too. If you have two computers online, and add a file to one, then it'll get transferred to the other over a secure, encrypted connection [?]. But consider the following scenario:\n+\n+1. Computer A is on, B is off.\n+1. Add a file to A.\n+1. Turn A off.\n+1. Turn B on.\n+1. The file isn't sync'd to B, because A isn't online to send it.\n+\n+The solution to this is to have a computer that's running BitTorrent Sync that's always on. Unless you have a home server or colocated machine, you're going to have to use a virtual server. That's where Amazon Web Services comes in.\n+\n+AWS is super-popular, but managing it is so infamously unfriendly that there's a [AWS in Plain English](https://www.expeditedssl.com/aws-in-plain-english) site to help. We're going to use EC2, their virtual server service. The best blog post I found to help this is [here](http://meltingice.net/2015/07/27/how-to-run-bittorrent-sync-on-aws/), and it's an excellent reference on how to set up BitTorrent Sync on a new EC2 instance (basically a virtual server). You get a year of free service from AWS, and after that it's about $10/month (when billed hourly – you can save money by [billing monthly or yearly](https://aws.amazon.com/ec2/pricing/)). \n+\n+The post has some great suggestions, like using a random, pre-configured port for BitTorrent Sync, and allowing incoming connections only on that one port and port 80 for administration. However, there are a few aspects to the post I think can be improved upon:\n+\n+1. <p>The post recommends opening port 80 to the entire internet, exposing the BitTorrent Sync dashboard (and consequently, access to your files [?]) to anyone who provides the username and password, which are [stored on the server in plaintext](http://help.getsync.com/hc/en-us/articles/204762689-Running-Sync-in-configuration-mode#overview).</p><p>Further complicating this problem is the fact that to administer BitTorrent Sync, you send your username and password to the server over port 80 _unencrypted_, so anyone monitoring your traffic can see the auth details in plaintext [?]. Yikes.</p>\n+\n+1. The server syncs your files _in plaintext_, so an attacker who gains access to the server, or an NSA employee issuing a subpoena to Amazon for your instance's filesystem [?], now has all your files. \n+\n+These problems can be pretty easily mitigated. First, though, I need to explain a bit more about how BitTorrent Sync works.\n+\n+## BitTorrent Sync\n+\n+The first time you start their app, you create an _identity_. Under the hood, BitTorrent Sync creates an [X.509 certificate](http://help.getsync.com/hc/en-us/articles/205451005) that's used to identify you and authenticate with computers you want to sync with, like your home desktop, work laptop, and smartphone. Nice. To link a new device to your identity, you use [a key in text or QR code format](http://help.getsync.com/hc/en-us/articles/205457815-Sync-Private-Identity-Linking-My-Devices). \n+\n+Your identity syncs folders across devices. Unlike Dropbox where you have one big folder, BitTorrent Sync lets you have many folders with different permission/sharing settings. Any machine with your identity has access to all your files, unencrypted.\n+\n+The blog post I linked to suggests adding your identity to your new EC2 instance. I'm not sure this is wise, because an attacker who gains access to the instance now has your files. The process of adding the instance to your identity over unencrypted HTTP traffic also opens up concerns (I think the X.509 certificates mitigate this concern though [?]). My solution to this problem is to use _encrypted folders_.\n+\n+## Encrypted folders\n+\n+An [encrypted folder](http://help.getsync.com/hc/en-us/articles/207370466) is the perfect solution to this problem, and in fact, the docs recommend using encrypted folders for syncing with virtual private servers (which are [similar to EC2 instances](https://www.quora.com/Is-there-any-benefit-of-EC2-over-VPS-offered-by-dedicated-server-providers)). So let's do it!\n+\n+An encrypted folder is just like a regular folder that BitTorrent Sync synchronizes across devices, except that it adds encryption to the file contents it syncs. But encrypted folders separates the encryption keys for syncing the files and the keys for decrypting the files once they're sync'd. Your _identity_ automatically has access to the decryption key. \n+\n+So my solution was **not adding my identity to the EC2 instance**. Instead, I gave it the \"Encrypted Key\" to sync with (under the share menu for the folder). This lets the EC2 instance securely sync the files _without_ having access to the decrypted version of the files. Nice. \n+","path":"source/blog/2016-05-30-dropping-dropbox.html.markdown","position":66,"original_position":66,"commit_id":"0021c1cbda482859036057b07504d718ced8c507","original_commit_id":"0021c1cbda482859036057b07504d718ced8c507","user":{"login":"jbeker","id":5288575,"avatar_url":"https://avatars.githubusercontent.com/u/5288575?v=3","gravatar_id":"","url":"https://api.github.com/users/jbeker","html_url":"https://github.com/jbeker","followers_url":"https://api.github.com/users/jbeker/followers","following_url":"https://api.github.com/users/jbeker/following{/other_user}","gists_url":"https://api.github.com/users/jbeker/gists{/gist_id}","starred_url":"https://api.github.com/users/jbeker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jbeker/subscriptions","organizations_url":"https://api.github.com/users/jbeker/orgs","repos_url":"https://api.github.com/users/jbeker/repos","events_url":"https://api.github.com/users/jbeker/events{/privacy}","received_events_url":"https://api.github.com/users/jbeker/received_events","type":"User","site_admin":false},"body":"Yup! Each device only knows about the folders you manually add.\r\n\r\nI like the extra control (and the no-license-fee)","created_at":"2016-05-30T18:04:29Z","updated_at":"2016-05-30T18:04:29Z","html_url":"https://github.com/ashfurrow/blog/pull/212#discussion_r65096966","pull_request_url":"https://api.github.com/repos/ashfurrow/blog/pulls/212","_links":{"self":{"href":"https://api.github.com/repos/ashfurrow/blog/pulls/comments/65096966"},"html":{"href":"https://github.com/ashfurrow/blog/pull/212#discussion_r65096966"},"pull_request":{"href":"https://api.github.com/repos/ashfurrow/blog/pulls/212"}}},"pull_request":{"url":"https://api.github.com/repos/ashfurrow/blog/pulls/212","id":71924758,"html_url":"https://github.com/ashfurrow/blog/pull/212","diff_url":"https://github.com/ashfurrow/blog/pull/212.diff","patch_url":"https://github.com/ashfurrow/blog/pull/212.patch","issue_url":"https://api.github.com/repos/ashfurrow/blog/issues/212","number":212,"state":"open","locked":false,"title":"Dropping Dropbox","user":{"login":"ashfurrow","id":498212,"avatar_url":"https://avatars.githubusercontent.com/u/498212?v=3","gravatar_id":"","url":"https://api.github.com/users/ashfurrow","html_url":"https://github.com/ashfurrow","followers_url":"https://api.github.com/users/ashfurrow/followers","following_url":"https://api.github.com/users/ashfurrow/following{/other_user}","gists_url":"https://api.github.com/users/ashfurrow/gists{/gist_id}","starred_url":"https://api.github.com/users/ashfurrow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ashfurrow/subscriptions","organizations_url":"https://api.github.com/users/ashfurrow/orgs","repos_url":"https://api.github.com/users/ashfurrow/repos","events_url":"https://api.github.com/users/ashfurrow/events{/privacy}","received_events_url":"https://api.github.com/users/ashfurrow/received_events","type":"User","site_admin":false},"body":"For anyone reviewing, please note the [?] you see, they're places where I'm not totally confident in what I've written, and would love feedback either verifying or correcting me.\r\n\r\n(The list with manual `<p>` tags is to overcome a bug in my markdown engine 😞)","created_at":"2016-05-30T17:22:39Z","updated_at":"2016-05-30T18:04:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bd84a559088639d33ee6cf78796615d95d8c6db3","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ashfurrow/blog/pulls/212/commits","review_comments_url":"https://api.github.com/repos/ashfurrow/blog/pulls/212/comments","review_comment_url":"https://api.github.com/repos/ashfurrow/blog/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ashfurrow/blog/issues/212/comments","statuses_url":"https://api.github.com/repos/ashfurrow/blog/statuses/0021c1cbda482859036057b07504d718ced8c507","head":{"label":"ashfurrow:dropping-dropbox","ref":"dropping-dropbox","sha":"0021c1cbda482859036057b07504d718ced8c507","user":{"login":"ashfurrow","id":498212,"avatar_url":"https://avatars.githubusercontent.com/u/498212?v=3","gravatar_id":"","url":"https://api.github.com/users/ashfurrow","html_url":"https://github.com/ashfurrow","followers_url":"https://api.github.com/users/ashfurrow/followers","following_url":"https://api.github.com/users/ashfurrow/following{/other_user}","gists_url":"https://api.github.com/users/ashfurrow/gists{/gist_id}","starred_url":"https://api.github.com/users/ashfurrow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ashfurrow/subscriptions","organizations_url":"https://api.github.com/users/ashfurrow/orgs","repos_url":"https://api.github.com/users/ashfurrow/repos","events_url":"https://api.github.com/users/ashfurrow/events{/privacy}","received_events_url":"https://api.github.com/users/ashfurrow/received_events","type":"User","site_admin":false},"repo":{"id":25270902,"name":"blog","full_name":"ashfurrow/blog","owner":{"login":"ashfurrow","id":498212,"avatar_url":"https://avatars.githubusercontent.com/u/498212?v=3","gravatar_id":"","url":"https://api.github.com/users/ashfurrow","html_url":"https://github.com/ashfurrow","followers_url":"https://api.github.com/users/ashfurrow/followers","following_url":"https://api.github.com/users/ashfurrow/following{/other_user}","gists_url":"https://api.github.com/users/ashfurrow/gists{/gist_id}","starred_url":"https://api.github.com/users/ashfurrow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ashfurrow/subscriptions","organizations_url":"https://api.github.com/users/ashfurrow/orgs","repos_url":"https://api.github.com/users/ashfurrow/repos","events_url":"https://api.github.com/users/ashfurrow/events{/privacy}","received_events_url":"https://api.github.com/users/ashfurrow/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ashfurrow/blog","description":"My Blog. ","fork":false,"url":"https://api.github.com/repos/ashfurrow/blog","forks_url":"https://api.github.com/repos/ashfurrow/blog/forks","keys_url":"https://api.github.com/repos/ashfurrow/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ashfurrow/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ashfurrow/blog/teams","hooks_url":"https://api.github.com/repos/ashfurrow/blog/hooks","issue_events_url":"https://api.github.com/repos/ashfurrow/blog/issues/events{/number}","events_url":"https://api.github.com/repos/ashfurrow/blog/events","assignees_url":"https://api.github.com/repos/ashfurrow/blog/assignees{/user}","branches_url":"https://api.github.com/repos/ashfurrow/blog/branches{/branch}","tags_url":"https://api.github.com/repos/ashfurrow/blog/tags","blobs_url":"https://api.github.com/repos/ashfurrow/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ashfurrow/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ashfurrow/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/ashfurrow/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ashfurrow/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/ashfurrow/blog/languages","stargazers_url":"https://api.github.com/repos/ashfurrow/blog/stargazers","contributors_url":"https://api.github.com/repos/ashfurrow/blog/contributors","subscribers_url":"https://api.github.com/repos/ashfurrow/blog/subscribers","subscription_url":"https://api.github.com/repos/ashfurrow/blog/subscription","commits_url":"https://api.github.com/repos/ashfurrow/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/ashfurrow/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/ashfurrow/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/ashfurrow/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/ashfurrow/blog/contents/{+path}","compare_url":"https://api.github.com/repos/ashfurrow/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ashfurrow/blog/merges","archive_url":"https://api.github.com/repos/ashfurrow/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ashfurrow/blog/downloads","issues_url":"https://api.github.com/repos/ashfurrow/blog/issues{/number}","pulls_url":"https://api.github.com/repos/ashfurrow/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/ashfurrow/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/ashfurrow/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ashfurrow/blog/labels{/name}","releases_url":"https://api.github.com/repos/ashfurrow/blog/releases{/id}","deployments_url":"https://api.github.com/repos/ashfurrow/blog/deployments","created_at":"2014-10-15T19:51:32Z","updated_at":"2016-05-30T00:30:03Z","pushed_at":"2016-05-30T17:47:42Z","git_url":"git://github.com/ashfurrow/blog.git","ssh_url":"git@github.com:ashfurrow/blog.git","clone_url":"https://github.com/ashfurrow/blog.git","svn_url":"https://github.com/ashfurrow/blog","homepage":"http://ashfurrow.com","size":159027,"stargazers_count":36,"watchers_count":36,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":12,"mirror_url":null,"open_issues_count":6,"forks":12,"open_issues":6,"watchers":36,"default_branch":"master"}},"base":{"label":"ashfurrow:master","ref":"master","sha":"d1c4a0bdf18e1991af405f93199c1ecd382598bf","user":{"login":"ashfurrow","id":498212,"avatar_url":"https://avatars.githubusercontent.com/u/498212?v=3","gravatar_id":"","url":"https://api.github.com/users/ashfurrow","html_url":"https://github.com/ashfurrow","followers_url":"https://api.github.com/users/ashfurrow/followers","following_url":"https://api.github.com/users/ashfurrow/following{/other_user}","gists_url":"https://api.github.com/users/ashfurrow/gists{/gist_id}","starred_url":"https://api.github.com/users/ashfurrow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ashfurrow/subscriptions","organizations_url":"https://api.github.com/users/ashfurrow/orgs","repos_url":"https://api.github.com/users/ashfurrow/repos","events_url":"https://api.github.com/users/ashfurrow/events{/privacy}","received_events_url":"https://api.github.com/users/ashfurrow/received_events","type":"User","site_admin":false},"repo":{"id":25270902,"name":"blog","full_name":"ashfurrow/blog","owner":{"login":"ashfurrow","id":498212,"avatar_url":"https://avatars.githubusercontent.com/u/498212?v=3","gravatar_id":"","url":"https://api.github.com/users/ashfurrow","html_url":"https://github.com/ashfurrow","followers_url":"https://api.github.com/users/ashfurrow/followers","following_url":"https://api.github.com/users/ashfurrow/following{/other_user}","gists_url":"https://api.github.com/users/ashfurrow/gists{/gist_id}","starred_url":"https://api.github.com/users/ashfurrow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ashfurrow/subscriptions","organizations_url":"https://api.github.com/users/ashfurrow/orgs","repos_url":"https://api.github.com/users/ashfurrow/repos","events_url":"https://api.github.com/users/ashfurrow/events{/privacy}","received_events_url":"https://api.github.com/users/ashfurrow/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ashfurrow/blog","description":"My Blog. ","fork":false,"url":"https://api.github.com/repos/ashfurrow/blog","forks_url":"https://api.github.com/repos/ashfurrow/blog/forks","keys_url":"https://api.github.com/repos/ashfurrow/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ashfurrow/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ashfurrow/blog/teams","hooks_url":"https://api.github.com/repos/ashfurrow/blog/hooks","issue_events_url":"https://api.github.com/repos/ashfurrow/blog/issues/events{/number}","events_url":"https://api.github.com/repos/ashfurrow/blog/events","assignees_url":"https://api.github.com/repos/ashfurrow/blog/assignees{/user}","branches_url":"https://api.github.com/repos/ashfurrow/blog/branches{/branch}","tags_url":"https://api.github.com/repos/ashfurrow/blog/tags","blobs_url":"https://api.github.com/repos/ashfurrow/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ashfurrow/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ashfurrow/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/ashfurrow/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ashfurrow/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/ashfurrow/blog/languages","stargazers_url":"https://api.github.com/repos/ashfurrow/blog/stargazers","contributors_url":"https://api.github.com/repos/ashfurrow/blog/contributors","subscribers_url":"https://api.github.com/repos/ashfurrow/blog/subscribers","subscription_url":"https://api.github.com/repos/ashfurrow/blog/subscription","commits_url":"https://api.github.com/repos/ashfurrow/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/ashfurrow/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/ashfurrow/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/ashfurrow/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/ashfurrow/blog/contents/{+path}","compare_url":"https://api.github.com/repos/ashfurrow/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ashfurrow/blog/merges","archive_url":"https://api.github.com/repos/ashfurrow/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ashfurrow/blog/downloads","issues_url":"https://api.github.com/repos/ashfurrow/blog/issues{/number}","pulls_url":"https://api.github.com/repos/ashfurrow/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/ashfurrow/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/ashfurrow/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ashfurrow/blog/labels{/name}","releases_url":"https://api.github.com/repos/ashfurrow/blog/releases{/id}","deployments_url":"https://api.github.com/repos/ashfurrow/blog/deployments","created_at":"2014-10-15T19:51:32Z","updated_at":"2016-05-30T00:30:03Z","pushed_at":"2016-05-30T17:47:42Z","git_url":"git://github.com/ashfurrow/blog.git","ssh_url":"git@github.com:ashfurrow/blog.git","clone_url":"https://github.com/ashfurrow/blog.git","svn_url":"https://github.com/ashfurrow/blog","homepage":"http://ashfurrow.com","size":159027,"stargazers_count":36,"watchers_count":36,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":12,"mirror_url":null,"open_issues_count":6,"forks":12,"open_issues":6,"watchers":36,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ashfurrow/blog/pulls/212"},"html":{"href":"https://github.com/ashfurrow/blog/pull/212"},"issue":{"href":"https://api.github.com/repos/ashfurrow/blog/issues/212"},"comments":{"href":"https://api.github.com/repos/ashfurrow/blog/issues/212/comments"},"review_comments":{"href":"https://api.github.com/repos/ashfurrow/blog/pulls/212/comments"},"review_comment":{"href":"https://api.github.com/repos/ashfurrow/blog/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ashfurrow/blog/pulls/212/commits"},"statuses":{"href":"https://api.github.com/repos/ashfurrow/blog/statuses/0021c1cbda482859036057b07504d718ced8c507"}}}}
{"actor":{"display_login":"jbeker"}}