{"action":"closed","number":59,"pull_request":{"url":"https://api.github.com/repos/codaco/Server/pulls/59","id":176482003,"html_url":"https://github.com/codaco/Server/pull/59","diff_url":"https://github.com/codaco/Server/pull/59.diff","patch_url":"https://github.com/codaco/Server/pull/59.patch","issue_url":"https://api.github.com/repos/codaco/Server/issues/59","number":59,"state":"closed","locked":false,"title":"Lay groundwork for device pairing","user":{"login":"bryfox","id":39674,"avatar_url":"https://avatars2.githubusercontent.com/u/39674?v=4","gravatar_id":"","url":"https://api.github.com/users/bryfox","html_url":"https://github.com/bryfox","followers_url":"https://api.github.com/users/bryfox/followers","following_url":"https://api.github.com/users/bryfox/following{/other_user}","gists_url":"https://api.github.com/users/bryfox/gists{/gist_id}","starred_url":"https://api.github.com/users/bryfox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bryfox/subscriptions","organizations_url":"https://api.github.com/users/bryfox/orgs","repos_url":"https://api.github.com/users/bryfox/repos","events_url":"https://api.github.com/users/bryfox/events{/privacy}","received_events_url":"https://api.github.com/users/bryfox/received_events","type":"User","site_admin":false},"body":"This is a prototype of the new server requirements & takes care of a lot of the initial work for #41. Includes:\r\n\r\n- http/rest-based API for devices\r\n- http/rest-based API for admin/gui\r\n- pairing modals are hooked up to API + redux states\r\n\r\nBrowser + bare server dev is still supported, but there's a new recommended electron workflow in the readme (which I'll gradually improve).\r\n\r\n### Testing device pairing:\r\n\r\n1. Run the dev app: `npm start:electron-renderer` and `npm run start:electron`\r\n1. Open the main dashboard UI\r\n1. Initiate a pairing request, e.g.: `curl localhost:51001/devices/new`\r\n    - expected: API response containing request ID.\r\n    - expected: in GUI, see pairing prompt (with dismiss & pair buttons)\r\n1. Click Pair with Device\r\n    - expected: see modal with alphanumeric pairing code\r\n1. Validate the pairing request (as though you entered code on a client device)\r\n    - e.g.: `curl -H \"Content-Type: application/json\" -d '{\"requestId\":\"01d30d6c-e134-443f-b488-431d5b5360a4\", \"pairingCode\":\"3kkEDBS0cVhQ\"}' localhost:51001/devices/`\r\n    - Note you can select & copy the pairing code from the GUI display boxes\r\n    - expected: API success response\r\n    - expected: GUI confirmation (\"all set\" modal)\r\n    - If request ID or code were invalid, expect 4xx API response and no GUI change.\r\n\r\n### Known issues\r\n\r\n- API / model objects will likely change\r\n- UI 'finish' (e.g., modal transitions)\r\n- no crypto on key transmission yet\r\n\r\n... and more... as this is a fairly significant departure based on the server changes doc, I'd like to get feedback on the general direction rather than wait until a feature is complete.","created_at":"2018-03-21T13:50:44Z","updated_at":"2018-03-28T21:26:23Z","closed_at":"2018-03-28T21:26:23Z","merged_at":"2018-03-28T21:26:23Z","merge_commit_sha":"aee6085721b943c6013b417a03fcab3d26c1c23e","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/codaco/Server/pulls/59/commits","review_comments_url":"https://api.github.com/repos/codaco/Server/pulls/59/comments","review_comment_url":"https://api.github.com/repos/codaco/Server/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codaco/Server/issues/59/comments","statuses_url":"https://api.github.com/repos/codaco/Server/statuses/0926e57b1857a624470d4376d629dcbea8a1c7df","head":{"label":"codaco:feature/services","ref":"feature/services","sha":"0926e57b1857a624470d4376d629dcbea8a1c7df","user":{"login":"codaco","id":20207505,"avatar_url":"https://avatars0.githubusercontent.com/u/20207505?v=4","gravatar_id":"","url":"https://api.github.com/users/codaco","html_url":"https://github.com/codaco","followers_url":"https://api.github.com/users/codaco/followers","following_url":"https://api.github.com/users/codaco/following{/other_user}","gists_url":"https://api.github.com/users/codaco/gists{/gist_id}","starred_url":"https://api.github.com/users/codaco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codaco/subscriptions","organizations_url":"https://api.github.com/users/codaco/orgs","repos_url":"https://api.github.com/users/codaco/repos","events_url":"https://api.github.com/users/codaco/events{/privacy}","received_events_url":"https://api.github.com/users/codaco/received_events","type":"Organization","site_admin":false},"repo":{"id":62644575,"name":"Server","full_name":"codaco/Server","owner":{"login":"codaco","id":20207505,"avatar_url":"https://avatars0.githubusercontent.com/u/20207505?v=4","gravatar_id":"","url":"https://api.github.com/users/codaco","html_url":"https://github.com/codaco","followers_url":"https://api.github.com/users/codaco/followers","following_url":"https://api.github.com/users/codaco/following{/other_user}","gists_url":"https://api.github.com/users/codaco/gists{/gist_id}","starred_url":"https://api.github.com/users/codaco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codaco/subscriptions","organizations_url":"https://api.github.com/users/codaco/orgs","repos_url":"https://api.github.com/users/codaco/repos","events_url":"https://api.github.com/users/codaco/events{/privacy}","received_events_url":"https://api.github.com/users/codaco/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codaco/Server","description":"A tool for storing, analyzing, and exporting Network Canvas interview data.","fork":false,"url":"https://api.github.com/repos/codaco/Server","forks_url":"https://api.github.com/repos/codaco/Server/forks","keys_url":"https://api.github.com/repos/codaco/Server/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codaco/Server/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codaco/Server/teams","hooks_url":"https://api.github.com/repos/codaco/Server/hooks","issue_events_url":"https://api.github.com/repos/codaco/Server/issues/events{/number}","events_url":"https://api.github.com/repos/codaco/Server/events","assignees_url":"https://api.github.com/repos/codaco/Server/assignees{/user}","branches_url":"https://api.github.com/repos/codaco/Server/branches{/branch}","tags_url":"https://api.github.com/repos/codaco/Server/tags","blobs_url":"https://api.github.com/repos/codaco/Server/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codaco/Server/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codaco/Server/git/refs{/sha}","trees_url":"https://api.github.com/repos/codaco/Server/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codaco/Server/statuses/{sha}","languages_url":"https://api.github.com/repos/codaco/Server/languages","stargazers_url":"https://api.github.com/repos/codaco/Server/stargazers","contributors_url":"https://api.github.com/repos/codaco/Server/contributors","subscribers_url":"https://api.github.com/repos/codaco/Server/subscribers","subscription_url":"https://api.github.com/repos/codaco/Server/subscription","commits_url":"https://api.github.com/repos/codaco/Server/commits{/sha}","git_commits_url":"https://api.github.com/repos/codaco/Server/git/commits{/sha}","comments_url":"https://api.github.com/repos/codaco/Server/comments{/number}","issue_comment_url":"https://api.github.com/repos/codaco/Server/issues/comments{/number}","contents_url":"https://api.github.com/repos/codaco/Server/contents/{+path}","compare_url":"https://api.github.com/repos/codaco/Server/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codaco/Server/merges","archive_url":"https://api.github.com/repos/codaco/Server/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codaco/Server/downloads","issues_url":"https://api.github.com/repos/codaco/Server/issues{/number}","pulls_url":"https://api.github.com/repos/codaco/Server/pulls{/number}","milestones_url":"https://api.github.com/repos/codaco/Server/milestones{/number}","notifications_url":"https://api.github.com/repos/codaco/Server/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codaco/Server/labels{/name}","releases_url":"https://api.github.com/repos/codaco/Server/releases{/id}","deployments_url":"https://api.github.com/repos/codaco/Server/deployments","created_at":"2016-07-05T14:42:08Z","updated_at":"2018-03-28T19:51:42Z","pushed_at":"2018-03-28T21:26:22Z","git_url":"git://github.com/codaco/Server.git","ssh_url":"git@github.com:codaco/Server.git","clone_url":"https://github.com/codaco/Server.git","svn_url":"https://github.com/codaco/Server","homepage":"http://networkcanvas.com/","size":4968,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":18,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":1,"open_issues":18,"watchers":1,"default_branch":"master"}},"base":{"label":"codaco:master","ref":"master","sha":"addd31d43ec2c628d48cc92231bd9098d5fb87f4","user":{"login":"codaco","id":20207505,"avatar_url":"https://avatars0.githubusercontent.com/u/20207505?v=4","gravatar_id":"","url":"https://api.github.com/users/codaco","html_url":"https://github.com/codaco","followers_url":"https://api.github.com/users/codaco/followers","following_url":"https://api.github.com/users/codaco/following{/other_user}","gists_url":"https://api.github.com/users/codaco/gists{/gist_id}","starred_url":"https://api.github.com/users/codaco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codaco/subscriptions","organizations_url":"https://api.github.com/users/codaco/orgs","repos_url":"https://api.github.com/users/codaco/repos","events_url":"https://api.github.com/users/codaco/events{/privacy}","received_events_url":"https://api.github.com/users/codaco/received_events","type":"Organization","site_admin":false},"repo":{"id":62644575,"name":"Server","full_name":"codaco/Server","owner":{"login":"codaco","id":20207505,"avatar_url":"https://avatars0.githubusercontent.com/u/20207505?v=4","gravatar_id":"","url":"https://api.github.com/users/codaco","html_url":"https://github.com/codaco","followers_url":"https://api.github.com/users/codaco/followers","following_url":"https://api.github.com/users/codaco/following{/other_user}","gists_url":"https://api.github.com/users/codaco/gists{/gist_id}","starred_url":"https://api.github.com/users/codaco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codaco/subscriptions","organizations_url":"https://api.github.com/users/codaco/orgs","repos_url":"https://api.github.com/users/codaco/repos","events_url":"https://api.github.com/users/codaco/events{/privacy}","received_events_url":"https://api.github.com/users/codaco/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codaco/Server","description":"A tool for storing, analyzing, and exporting Network Canvas interview data.","fork":false,"url":"https://api.github.com/repos/codaco/Server","forks_url":"https://api.github.com/repos/codaco/Server/forks","keys_url":"https://api.github.com/repos/codaco/Server/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codaco/Server/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codaco/Server/teams","hooks_url":"https://api.github.com/repos/codaco/Server/hooks","issue_events_url":"https://api.github.com/repos/codaco/Server/issues/events{/number}","events_url":"https://api.github.com/repos/codaco/Server/events","assignees_url":"https://api.github.com/repos/codaco/Server/assignees{/user}","branches_url":"https://api.github.com/repos/codaco/Server/branches{/branch}","tags_url":"https://api.github.com/repos/codaco/Server/tags","blobs_url":"https://api.github.com/repos/codaco/Server/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codaco/Server/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codaco/Server/git/refs{/sha}","trees_url":"https://api.github.com/repos/codaco/Server/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codaco/Server/statuses/{sha}","languages_url":"https://api.github.com/repos/codaco/Server/languages","stargazers_url":"https://api.github.com/repos/codaco/Server/stargazers","contributors_url":"https://api.github.com/repos/codaco/Server/contributors","subscribers_url":"https://api.github.com/repos/codaco/Server/subscribers","subscription_url":"https://api.github.com/repos/codaco/Server/subscription","commits_url":"https://api.github.com/repos/codaco/Server/commits{/sha}","git_commits_url":"https://api.github.com/repos/codaco/Server/git/commits{/sha}","comments_url":"https://api.github.com/repos/codaco/Server/comments{/number}","issue_comment_url":"https://api.github.com/repos/codaco/Server/issues/comments{/number}","contents_url":"https://api.github.com/repos/codaco/Server/contents/{+path}","compare_url":"https://api.github.com/repos/codaco/Server/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codaco/Server/merges","archive_url":"https://api.github.com/repos/codaco/Server/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codaco/Server/downloads","issues_url":"https://api.github.com/repos/codaco/Server/issues{/number}","pulls_url":"https://api.github.com/repos/codaco/Server/pulls{/number}","milestones_url":"https://api.github.com/repos/codaco/Server/milestones{/number}","notifications_url":"https://api.github.com/repos/codaco/Server/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codaco/Server/labels{/name}","releases_url":"https://api.github.com/repos/codaco/Server/releases{/id}","deployments_url":"https://api.github.com/repos/codaco/Server/deployments","created_at":"2016-07-05T14:42:08Z","updated_at":"2018-03-28T19:51:42Z","pushed_at":"2018-03-28T21:26:22Z","git_url":"git://github.com/codaco/Server.git","ssh_url":"git@github.com:codaco/Server.git","clone_url":"https://github.com/codaco/Server.git","svn_url":"https://github.com/codaco/Server","homepage":"http://networkcanvas.com/","size":4968,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":18,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":1,"open_issues":18,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codaco/Server/pulls/59"},"html":{"href":"https://github.com/codaco/Server/pull/59"},"issue":{"href":"https://api.github.com/repos/codaco/Server/issues/59"},"comments":{"href":"https://api.github.com/repos/codaco/Server/issues/59/comments"},"review_comments":{"href":"https://api.github.com/repos/codaco/Server/pulls/59/comments"},"review_comment":{"href":"https://api.github.com/repos/codaco/Server/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codaco/Server/pulls/59/commits"},"statuses":{"href":"https://api.github.com/repos/codaco/Server/statuses/0926e57b1857a624470d4376d629dcbea8a1c7df"}},"author_association":"COLLABORATOR","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"bryfox","id":39674,"avatar_url":"https://avatars2.githubusercontent.com/u/39674?v=4","gravatar_id":"","url":"https://api.github.com/users/bryfox","html_url":"https://github.com/bryfox","followers_url":"https://api.github.com/users/bryfox/followers","following_url":"https://api.github.com/users/bryfox/following{/other_user}","gists_url":"https://api.github.com/users/bryfox/gists{/gist_id}","starred_url":"https://api.github.com/users/bryfox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bryfox/subscriptions","organizations_url":"https://api.github.com/users/bryfox/orgs","repos_url":"https://api.github.com/users/bryfox/repos","events_url":"https://api.github.com/users/bryfox/events{/privacy}","received_events_url":"https://api.github.com/users/bryfox/received_events","type":"User","site_admin":false},"comments":5,"review_comments":1,"maintainer_can_modify":false,"commits":31,"additions":1991,"deletions":880,"changed_files":70}}
{"actor":{"display_login":"bryfox"}}