{"action":"created","comment":{"url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/comments/93886331","pull_request_review_id":14418632,"id":93886331,"diff_hunk":"@@ -5,77 +5,154 @@\n This proposal aims to provide a general and technical walkthrough of an\n offline messaging protocol for use with the Tox protocol using its existing\n Distributed Hash Table (DHT). Messages are only stored in the DHT when the\n-message receiver is currently offline. The sender does not have to be\n-online for the receiver to retrieve messages.\n+message receiver is currently offline. The sender does not have to be online\n+for the receiver to retrieve messages.\n \n As this method uses the DHT, it is currently UDP only and will not work\n unless UDP is enabled. This restriction will hopefully be lifted with\n further work and development of the Tox protocol.\n \n+## Terminology\n+PoW:\n+  Proof-of-Work -- Determines CPU work necessary in order to store an offline message on the DHT.\n+\n+SENDER:\n+  The friend of RECEIVER sending an offline message to her when she is offline.\n+\n+RECEIVER:\n+  The friend of SENDER receiving an offline message.\n+\n+STORAGE_NODE:\n+  One of potentially many nodes storing offline messages for other users.\n+\n+OM Keys:\n+  Offline Messaging public / private keypair.\n+\n ## DHT Extension\n \n-The DHT must be extended in order to be able to store arbitrary data. Tox\n-Clients should have a reasonable default for DHT storage size set and\n+The DHT must be extended in order to be able to store offline messages. Tox\n+Clients should have a reasonable default set for DHT storage size and\n optionally allow users to change it. This space will be used for storing\n messages of other users.\n \n-## Inserting Messages \n+## Storage Space Allocation\n \n-Analagous to dpush [0], a user creates a new public and private key pair\n-(Current DHT keys are ephemeral) to sign their inbox location. The inbox is\n-stored in the DHT on computers who are in charge of that key range. (TODO:\n-Should the public key be hashed?) Users then store messages they want to\n-send to a store in that inbox's location. \n+The RECEIVER must request a certain amount of storage space for incoming\n+offline messages on a number of STORAGE_NODEs. A PoW job must be completed\n+by the RECEIVER to do this. The more space required per node, the higher\n+the PoW difficulty.\n \n-(TODO: Inbox location can be changed if necessary, as long as new location\n-is always signed by OM key. Is this a useful feature? If you change you\n-lose all old messages stored in old locations).\n+## Inserting Messages\n \n-## Retrieving Messages\n+A user creates a new public and private key pair (Current DHT keys are\n+expected to be ephemeral) per friend to encrypt offline messages.  Messages are stored\n+amongst an array of known nodes.  Users then store messages they want to send\n+to a store on those nodes after optionally completing a PoW function. \n \n-Users simply check their inbox location in the DHT when they come online.\n-If any messages are available they will download them from the nodes\n-holding them and decrypt them with their OM private keys. Nodes holding\n-messages should them delete them from their store.\n+## Retrieving Messages\n \n-(TODO: Similar to what dpush does, we could have the receiver scan sender's\n-public keyspaces for messages intended for them, thus requiring no PoW from\n-the sender. I feel like this can reintroduce spam though, however the\n-receiver is fully in control of what they want to pull at this point.)\n+Users simply check the SENDER's STORAGE NODES in the DHT when they come\n+online.  If any messages are available they will download them from the nodes\n+holding them and decrypt them with their OM keys. Nodes holding messages\n+should then delete them from their store.\n \n ## Spam\n \n As a Proof-of-Work (PoW) hash function is used to insert messages into the\n-DHT. The sender must complete a certain amount of computational hashing\n-before they can send a message. Messages that do not properly complete the\n-hashing function will be dropped by network clients upon receival. Thus is\n-makes spamming a user unreliable and costly.\n-\n+DHT. The SENDER and RECEIVER must complete a certain amount of\n+computational hashing before they can send a message. Messages that do not\n+properly complete the hashing function will be dropped by network clients\n+upon receival. Thus is makes spamming a single user or the network\n+unreliable and costly.\n+\n+The difficulty of the PoW is increased relative to the storage space\n+required to storage messages, to ensure a malicious SENDER cannot simply\n+fill a STORAGE_NODE's available message space with a single message.\n+However, very small messages could game this multiplier, and thus even the\n+minimum PoW difficulty must be reasonably large.\n+\n+Messages should also expire eventually, and thus a higher PoW difficulty\n+should be required for a longer message TTL (time to live).\n+        \n ## Privacy\n \n Tox does not inherently provide anonymity, however this will not expose any\n more information about the user than using the DHT in Tox already does.\n-(TODO: A correlation between who is talking to whom may be possible?).\n+\n+A middle node can correlate which IPs are talking to each other by seeing who\n+requests messages sent by whom, however one could enumerate this simply by\n+watching traffic from either the SENDER or RECEIVER so this does not provide\n+much new information.\n \n ## Security\n \n-Messages are encrypted with the same encryption they normally are, and\n-users will not be able to read the content of other user's messages unless\n-intended for them.\n+Messages are encrypted by the SENDER with two layers, one layer for the\n+STORAGE_NODE which encrypts the metadata necessary to see whom the message is\n+intended for, and another layer for the RECEIVER that includes the message\n+itself. Users will not be able to read the content of other user's messages\n+unless intended for them.\n \n # Technical\n \n-Technical details below.\n-\n ## Packet details\n \n Need a packet type for sending message, sending message TTL updates,\n-retreiving messages from inbox.\n+retreiving messages from STORAGE_NODEs, sending PoW requests and responses.\n+\n+## Packet encryption\n+\n+There are 2 layers of encryption for a message, first the SENDER encrypts the\n+message using the agreed/shared key. (TODO: Is this the Tox per-friend key we\n+already use for messaging, or is this OM specific?) ","path":"tox-offline-draft.md","position":136,"original_position":136,"commit_id":"1b6edd52d4b3fe33c00f1091cb3d77efdc587407","original_commit_id":"1b6edd52d4b3fe33c00f1091cb3d77efdc587407","user":{"login":"nurupo","id":1855294,"avatar_url":"https://avatars.githubusercontent.com/u/1855294?v=3","gravatar_id":"","url":"https://api.github.com/users/nurupo","html_url":"https://github.com/nurupo","followers_url":"https://api.github.com/users/nurupo/followers","following_url":"https://api.github.com/users/nurupo/following{/other_user}","gists_url":"https://api.github.com/users/nurupo/gists{/gist_id}","starred_url":"https://api.github.com/users/nurupo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nurupo/subscriptions","organizations_url":"https://api.github.com/users/nurupo/orgs","repos_url":"https://api.github.com/users/nurupo/repos","events_url":"https://api.github.com/users/nurupo/events{/privacy}","received_events_url":"https://api.github.com/users/nurupo/received_events","type":"User","site_admin":false},"body":"@GrayHatter explain what is \"nonce rotation\" and how it provides forward secrecy, i.e. that once your offline shared key is obtained by an attacker, how does the \"nonce rotation\" prevent them from reading the offline messages you have already sent.","created_at":"2016-12-26T22:49:43Z","updated_at":"2016-12-26T22:49:43Z","html_url":"https://github.com/anoadragon453/tox-offline-messaging-prop/pull/2#discussion_r93886331","pull_request_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/comments/93886331"},"html":{"href":"https://github.com/anoadragon453/tox-offline-messaging-prop/pull/2#discussion_r93886331"},"pull_request":{"href":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/2","id":99352741,"html_url":"https://github.com/anoadragon453/tox-offline-messaging-prop/pull/2","diff_url":"https://github.com/anoadragon453/tox-offline-messaging-prop/pull/2.diff","patch_url":"https://github.com/anoadragon453/tox-offline-messaging-prop/pull/2.patch","issue_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues/2","number":2,"state":"open","locked":false,"title":"Update with latest changes","user":{"login":"anoadragon453","id":1342360,"avatar_url":"https://avatars.githubusercontent.com/u/1342360?v=3","gravatar_id":"","url":"https://api.github.com/users/anoadragon453","html_url":"https://github.com/anoadragon453","followers_url":"https://api.github.com/users/anoadragon453/followers","following_url":"https://api.github.com/users/anoadragon453/following{/other_user}","gists_url":"https://api.github.com/users/anoadragon453/gists{/gist_id}","starred_url":"https://api.github.com/users/anoadragon453/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anoadragon453/subscriptions","organizations_url":"https://api.github.com/users/anoadragon453/orgs","repos_url":"https://api.github.com/users/anoadragon453/repos","events_url":"https://api.github.com/users/anoadragon453/events{/privacy}","received_events_url":"https://api.github.com/users/anoadragon453/received_events","type":"User","site_admin":false},"body":"@grayhatter @iphydf @nurupo @endoffile78 @robinlinden @dvor @tux3 @irungentoo @cebe @SkyzohKey\r\n\r\nThis is an initial draft of an offline messaging protocol for Tox. Current thoughts and details are in the PR however we'd like as much feedback from current Tox developers as possible to ensure it meets everyone's needs. \r\n\r\nSome notes and discussion are hosted on [this copy of the document](https://devbot.cmdline.org:9001/p/tox_offline_messages) hosted on @Grayhatter's etherpad, however please use GitHub's review system to suggest and discuss changes as it's easier to follow.\r\n\r\nDo keep in mind this implementation should within reason suit both desktop and mobile clients.","created_at":"2016-12-26T09:01:54Z","updated_at":"2016-12-26T22:49:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ab2d57700e124962557745ffbd50a45bd8547ca7","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/2/commits","review_comments_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/2/comments","review_comment_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/comments{/number}","comments_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues/2/comments","statuses_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/statuses/1b6edd52d4b3fe33c00f1091cb3d77efdc587407","head":{"label":"anoadragon453:draft-revision-1","ref":"draft-revision-1","sha":"1b6edd52d4b3fe33c00f1091cb3d77efdc587407","user":{"login":"anoadragon453","id":1342360,"avatar_url":"https://avatars.githubusercontent.com/u/1342360?v=3","gravatar_id":"","url":"https://api.github.com/users/anoadragon453","html_url":"https://github.com/anoadragon453","followers_url":"https://api.github.com/users/anoadragon453/followers","following_url":"https://api.github.com/users/anoadragon453/following{/other_user}","gists_url":"https://api.github.com/users/anoadragon453/gists{/gist_id}","starred_url":"https://api.github.com/users/anoadragon453/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anoadragon453/subscriptions","organizations_url":"https://api.github.com/users/anoadragon453/orgs","repos_url":"https://api.github.com/users/anoadragon453/repos","events_url":"https://api.github.com/users/anoadragon453/events{/privacy}","received_events_url":"https://api.github.com/users/anoadragon453/received_events","type":"User","site_admin":false},"repo":{"id":77350070,"name":"tox-offline-messaging-prop","full_name":"anoadragon453/tox-offline-messaging-prop","owner":{"login":"anoadragon453","id":1342360,"avatar_url":"https://avatars.githubusercontent.com/u/1342360?v=3","gravatar_id":"","url":"https://api.github.com/users/anoadragon453","html_url":"https://github.com/anoadragon453","followers_url":"https://api.github.com/users/anoadragon453/followers","following_url":"https://api.github.com/users/anoadragon453/following{/other_user}","gists_url":"https://api.github.com/users/anoadragon453/gists{/gist_id}","starred_url":"https://api.github.com/users/anoadragon453/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anoadragon453/subscriptions","organizations_url":"https://api.github.com/users/anoadragon453/orgs","repos_url":"https://api.github.com/users/anoadragon453/repos","events_url":"https://api.github.com/users/anoadragon453/events{/privacy}","received_events_url":"https://api.github.com/users/anoadragon453/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/anoadragon453/tox-offline-messaging-prop","description":"Formal Proposal for Asynchronous Offline Messaging in the Tox Protocol","fork":false,"url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop","forks_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/forks","keys_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/keys{/key_id}","collaborators_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/teams","hooks_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/hooks","issue_events_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues/events{/number}","events_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/events","assignees_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/assignees{/user}","branches_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/branches{/branch}","tags_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/tags","blobs_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/refs{/sha}","trees_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/trees{/sha}","statuses_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/statuses/{sha}","languages_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/languages","stargazers_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/stargazers","contributors_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/contributors","subscribers_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/subscribers","subscription_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/subscription","commits_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/commits{/sha}","git_commits_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/commits{/sha}","comments_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/comments{/number}","issue_comment_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues/comments{/number}","contents_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/contents/{+path}","compare_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/compare/{base}...{head}","merges_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/merges","archive_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/downloads","issues_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues{/number}","pulls_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls{/number}","milestones_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/milestones{/number}","notifications_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/labels{/name}","releases_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/releases{/id}","deployments_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/deployments","created_at":"2016-12-26T01:31:45Z","updated_at":"2016-12-26T21:27:59Z","pushed_at":"2016-12-26T09:28:43Z","git_url":"git://github.com/anoadragon453/tox-offline-messaging-prop.git","ssh_url":"git@github.com:anoadragon453/tox-offline-messaging-prop.git","clone_url":"https://github.com/anoadragon453/tox-offline-messaging-prop.git","svn_url":"https://github.com/anoadragon453/tox-offline-messaging-prop","homepage":null,"size":15,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":1,"default_branch":"master"}},"base":{"label":"anoadragon453:master","ref":"master","sha":"837504aa1c8227d0125e701a9db3a01e276a2329","user":{"login":"anoadragon453","id":1342360,"avatar_url":"https://avatars.githubusercontent.com/u/1342360?v=3","gravatar_id":"","url":"https://api.github.com/users/anoadragon453","html_url":"https://github.com/anoadragon453","followers_url":"https://api.github.com/users/anoadragon453/followers","following_url":"https://api.github.com/users/anoadragon453/following{/other_user}","gists_url":"https://api.github.com/users/anoadragon453/gists{/gist_id}","starred_url":"https://api.github.com/users/anoadragon453/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anoadragon453/subscriptions","organizations_url":"https://api.github.com/users/anoadragon453/orgs","repos_url":"https://api.github.com/users/anoadragon453/repos","events_url":"https://api.github.com/users/anoadragon453/events{/privacy}","received_events_url":"https://api.github.com/users/anoadragon453/received_events","type":"User","site_admin":false},"repo":{"id":77350070,"name":"tox-offline-messaging-prop","full_name":"anoadragon453/tox-offline-messaging-prop","owner":{"login":"anoadragon453","id":1342360,"avatar_url":"https://avatars.githubusercontent.com/u/1342360?v=3","gravatar_id":"","url":"https://api.github.com/users/anoadragon453","html_url":"https://github.com/anoadragon453","followers_url":"https://api.github.com/users/anoadragon453/followers","following_url":"https://api.github.com/users/anoadragon453/following{/other_user}","gists_url":"https://api.github.com/users/anoadragon453/gists{/gist_id}","starred_url":"https://api.github.com/users/anoadragon453/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anoadragon453/subscriptions","organizations_url":"https://api.github.com/users/anoadragon453/orgs","repos_url":"https://api.github.com/users/anoadragon453/repos","events_url":"https://api.github.com/users/anoadragon453/events{/privacy}","received_events_url":"https://api.github.com/users/anoadragon453/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/anoadragon453/tox-offline-messaging-prop","description":"Formal Proposal for Asynchronous Offline Messaging in the Tox Protocol","fork":false,"url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop","forks_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/forks","keys_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/keys{/key_id}","collaborators_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/teams","hooks_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/hooks","issue_events_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues/events{/number}","events_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/events","assignees_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/assignees{/user}","branches_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/branches{/branch}","tags_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/tags","blobs_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/refs{/sha}","trees_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/trees{/sha}","statuses_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/statuses/{sha}","languages_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/languages","stargazers_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/stargazers","contributors_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/contributors","subscribers_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/subscribers","subscription_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/subscription","commits_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/commits{/sha}","git_commits_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/git/commits{/sha}","comments_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/comments{/number}","issue_comment_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues/comments{/number}","contents_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/contents/{+path}","compare_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/compare/{base}...{head}","merges_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/merges","archive_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/downloads","issues_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues{/number}","pulls_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls{/number}","milestones_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/milestones{/number}","notifications_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/labels{/name}","releases_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/releases{/id}","deployments_url":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/deployments","created_at":"2016-12-26T01:31:45Z","updated_at":"2016-12-26T21:27:59Z","pushed_at":"2016-12-26T09:28:43Z","git_url":"git://github.com/anoadragon453/tox-offline-messaging-prop.git","ssh_url":"git@github.com:anoadragon453/tox-offline-messaging-prop.git","clone_url":"https://github.com/anoadragon453/tox-offline-messaging-prop.git","svn_url":"https://github.com/anoadragon453/tox-offline-messaging-prop","homepage":null,"size":15,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/2"},"html":{"href":"https://github.com/anoadragon453/tox-offline-messaging-prop/pull/2"},"issue":{"href":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues/2"},"comments":{"href":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/anoadragon453/tox-offline-messaging-prop/statuses/1b6edd52d4b3fe33c00f1091cb3d77efdc587407"}}}}
{"actor":{"display_login":"nurupo"}}