{"action":"created","issue":{"url":"https://api.github.com/repos/broadinstitute/leonardo/issues/21","repository_url":"https://api.github.com/repos/broadinstitute/leonardo","labels_url":"https://api.github.com/repos/broadinstitute/leonardo/issues/21/labels{/name}","comments_url":"https://api.github.com/repos/broadinstitute/leonardo/issues/21/comments","events_url":"https://api.github.com/repos/broadinstitute/leonardo/issues/21/events","html_url":"https://github.com/broadinstitute/leonardo/pull/21","id":253056799,"number":21,"title":"[GAWB-2263] Notebook Service: Implement the GET /clusters endpoint for connecting to a notebook","user":{"login":"rtitle","id":5368863,"avatar_url":"https://avatars3.githubusercontent.com/u/5368863?v=4","gravatar_id":"","url":"https://api.github.com/users/rtitle","html_url":"https://github.com/rtitle","followers_url":"https://api.github.com/users/rtitle/followers","following_url":"https://api.github.com/users/rtitle/following{/other_user}","gists_url":"https://api.github.com/users/rtitle/gists{/gist_id}","starred_url":"https://api.github.com/users/rtitle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rtitle/subscriptions","organizations_url":"https://api.github.com/users/rtitle/orgs","repos_url":"https://api.github.com/users/rtitle/repos","events_url":"https://api.github.com/users/rtitle/events{/privacy}","received_events_url":"https://api.github.com/users/rtitle/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2017-08-26T03:02:54Z","updated_at":"2017-08-29T18:03:06Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/broadinstitute/leonardo/pulls/21","html_url":"https://github.com/broadinstitute/leonardo/pull/21","diff_url":"https://github.com/broadinstitute/leonardo/pull/21.diff","patch_url":"https://github.com/broadinstitute/leonardo/pull/21.patch"},"body":"https://broadinstitute.atlassian.net/browse/GAWB-2263\r\n\r\nRequires: https://github.com/broadinstitute/firecloud-develop/pull/605\r\n\r\nHigh level flow:\r\n\r\n1. Leo receives a GET request for `/api/notebooks/{project}/{name}/view`\r\n2. Looks up the cluster UUID from the (project, name) in the URI\r\n3. Opens https (or wss) connection to `<uuid>.jupyter-dev.firecloud.org`\r\n4. This resolves to the actual cluster IP using our fake DNS\r\n   - as if we had updated /etc/hosts, but using the Java Way\r\n5. SSL negotiation happens. It checks:\r\n   - the client cert matches the server cert (i.e. \"two-way\" authentication)\r\n   - the hostname matches the server cert -- it does, because `<uuid>.jupyter-dev.firecloud.org` matches the wildcard `*.jupyter-dev.firecloud.org`\r\n6. Request gets proxied\r\n\r\nA lot of trial and error, but it's working against a local Apache+Jupyter.\r\n\r\n- [x] **Submitter**: Include the JIRA issue number in the PR description\r\n- [ ] **Submitter**: Make sure Swagger is updated if API changes\r\n- [ ] **Submitter**: If updating admin endpoints, also update [firecloud-admin-cli](https://github.com/broadinstitute/firecloud-admin-cli)\r\n- [ ] **Submitter**: Check documentation and code comments. Add explanatory PR comments if helpful.\r\n- [ ] **Submitter**: JIRA ticket checks:\r\n  * Acceptance criteria exists and is met\r\n  * Note any changes to implementation from the description\r\n  * To Demo flag is set\r\n  * Release Summary is filled out, if applicable\r\n  * Add notes on how to QA\r\n- [ ] **Submitter**: Update RC_XXX release ticket with any config or environment changes necessary\r\n- [ ] **Submitter**: Update FISMA documentation if changes to:\r\n  * Authentication\r\n  * Authorization\r\n  * Encryption\r\n  * Audit trails\r\n- [ ] Tell the tech lead (TL) that the PR exists if they wants to look at it\r\n- [ ] Anoint a lead reviewer (LR). **Assign PR to LR**\r\n* Review cycle:\r\n  * LR reviews\r\n  * Rest of team may comment on PR at will\r\n  * **LR assigns to submitter** for feedback fixes\r\n  * Submitter rebases to develop again if necessary\r\n  * Submitter makes further commits. DO NOT SQUASH\r\n  * Submitter updates documentation as needed\r\n  * Submitter **reassigns to LR** for further feedback\r\n- [ ] **TL** sign off\r\n- [ ] **LR** sign off\r\n- [ ] **Product Owner** sign off\r\n- [ ] **Assign to submitter** to finalize\r\n- [ ] **Submitter**: Verify all tests go green, including CI tests\r\n- [ ] **Submitter**: Squash commits and merge to develop\r\n- [ ] **Submitter**: Delete branch after merge\r\n- [ ] **Submitter**: **Test this change works on dev environment after deployment**. YOU own getting it fixed if dev isn't working for ANY reason!\r\n- [ ] **Submitter**: Verify swagger UI on dev environment still works after deployment\r\n- [ ] **Submitter**: Inform other teams of any API changes via Slack and/or email\r\n- [ ] **Submitter**: Mark JIRA issue as resolved once this checklist is completed\r\n"},"comment":{"url":"https://api.github.com/repos/broadinstitute/leonardo/issues/comments/325745817","html_url":"https://github.com/broadinstitute/leonardo/pull/21#issuecomment-325745817","issue_url":"https://api.github.com/repos/broadinstitute/leonardo/issues/21","id":325745817,"user":{"login":"helgridly","id":775136,"avatar_url":"https://avatars1.githubusercontent.com/u/775136?v=4","gravatar_id":"","url":"https://api.github.com/users/helgridly","html_url":"https://github.com/helgridly","followers_url":"https://api.github.com/users/helgridly/followers","following_url":"https://api.github.com/users/helgridly/following{/other_user}","gists_url":"https://api.github.com/users/helgridly/gists{/gist_id}","starred_url":"https://api.github.com/users/helgridly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/helgridly/subscriptions","organizations_url":"https://api.github.com/users/helgridly/orgs","repos_url":"https://api.github.com/users/helgridly/repos","events_url":"https://api.github.com/users/helgridly/events{/privacy}","received_events_url":"https://api.github.com/users/helgridly/received_events","type":"User","site_admin":false},"created_at":"2017-08-29T18:03:06Z","updated_at":"2017-08-29T18:03:06Z","body":"+1 Anu's comments too. Documenting the \"this is where you go to get your Jupyter notebook\" endpoint is definitely a good idea. Also agree on config-ifying time intervals."}}
{"actor":{"display_login":"helgridly"}}