{"action":"created","comment":{"url":"https://api.github.com/repos/owncloud/core/pulls/comments/62328515","id":62328515,"diff_hunk":"@@ -139,25 +186,60 @@ public function setUser($user) {\n \t/**\n \t * get the current active user\n \t *\n-\t * @return \\OCP\\IUser|null Current user, otherwise null\n+\t * @return IUser|null Current user, otherwise null\n \t */\n \tpublic function getUser() {\n \t\t// FIXME: This is a quick'n dirty work-around for the incognito mode as\n \t\t// described at https://github.com/owncloud/core/pull/12912#issuecomment-67391155\n-\t\tif (\\OC_User::isIncognitoMode()) {\n+\t\tif (OC_User::isIncognitoMode()) {\n \t\t\treturn null;\n \t\t}\n-\t\tif ($this->activeUser) {\n-\t\t\treturn $this->activeUser;\n-\t\t} else {\n+\t\tif (is_null($this->activeUser)) {\n \t\t\t$uid = $this->session->get('user_id');\n-\t\t\tif ($uid !== null) {\n-\t\t\t\t$this->activeUser = $this->manager->get($uid);\n-\t\t\t\treturn $this->activeUser;\n-\t\t\t} else {\n+\t\t\tif (is_null($uid)) {\n \t\t\t\treturn null;\n \t\t\t}\n+\t\t\t$this->activeUser = $this->manager->get($uid);\n+\t\t\tif (is_null($this->activeUser)) {\n+\t\t\t\treturn null;\n+\t\t\t}\n+\t\t\t$this->validateSession($this->activeUser);\n+\t\t}\n+\t\treturn $this->activeUser;\n+\t}\n+\n+\tprotected function validateSession(IUser $user) {\n+\t\ttry {\n+\t\t\t$sessionId = $this->session->getId();\n+\t\t} catch (SessionNotAvailableException $ex) {\n+\t\t\treturn;","path":"lib/private/user/session.php","position":150,"original_position":150,"commit_id":"0b68d446ef67e7a04e14704c961cf23aea139a6d","original_commit_id":"0b68d446ef67e7a04e14704c961cf23aea139a6d","user":{"login":"LukasReschke","id":878997,"avatar_url":"https://avatars.githubusercontent.com/u/878997?v=3","gravatar_id":"","url":"https://api.github.com/users/LukasReschke","html_url":"https://github.com/LukasReschke","followers_url":"https://api.github.com/users/LukasReschke/followers","following_url":"https://api.github.com/users/LukasReschke/following{/other_user}","gists_url":"https://api.github.com/users/LukasReschke/gists{/gist_id}","starred_url":"https://api.github.com/users/LukasReschke/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LukasReschke/subscriptions","organizations_url":"https://api.github.com/users/LukasReschke/orgs","repos_url":"https://api.github.com/users/LukasReschke/repos","events_url":"https://api.github.com/users/LukasReschke/events{/privacy}","received_events_url":"https://api.github.com/users/LukasReschke/received_events","type":"User","site_admin":false},"body":"The return values confuse me. So this function can either return void or a bool but none of them seem to get checked anyways. So maybe just use void? :)","created_at":"2016-05-06T13:23:13Z","updated_at":"2016-05-06T13:23:13Z","html_url":"https://github.com/owncloud/core/pull/24189#discussion_r62328515","pull_request_url":"https://api.github.com/repos/owncloud/core/pulls/24189","_links":{"self":{"href":"https://api.github.com/repos/owncloud/core/pulls/comments/62328515"},"html":{"href":"https://github.com/owncloud/core/pull/24189#discussion_r62328515"},"pull_request":{"href":"https://api.github.com/repos/owncloud/core/pulls/24189"}}},"pull_request":{"url":"https://api.github.com/repos/owncloud/core/pulls/24189","id":67487184,"html_url":"https://github.com/owncloud/core/pull/24189","diff_url":"https://github.com/owncloud/core/pull/24189.diff","patch_url":"https://github.com/owncloud/core/pull/24189.patch","issue_url":"https://api.github.com/repos/owncloud/core/issues/24189","number":24189,"state":"open","locked":false,"title":"Pluggable auth","user":{"login":"ChristophWurst","id":1374172,"avatar_url":"https://avatars.githubusercontent.com/u/1374172?v=3","gravatar_id":"","url":"https://api.github.com/users/ChristophWurst","html_url":"https://github.com/ChristophWurst","followers_url":"https://api.github.com/users/ChristophWurst/followers","following_url":"https://api.github.com/users/ChristophWurst/following{/other_user}","gists_url":"https://api.github.com/users/ChristophWurst/gists{/gist_id}","starred_url":"https://api.github.com/users/ChristophWurst/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChristophWurst/subscriptions","organizations_url":"https://api.github.com/users/ChristophWurst/orgs","repos_url":"https://api.github.com/users/ChristophWurst/repos","events_url":"https://api.github.com/users/ChristophWurst/events{/privacy}","received_events_url":"https://api.github.com/users/ChristophWurst/received_events","type":"User","site_admin":false},"body":"~~This revives https://github.com/owncloud/core/pull/1975~~\r\n\r\nI removed the two-factor code from this PR to keep it simple.\r\n\r\nTODO:\r\n- [x] Create session token for new browser session (login)\r\n  - [x] Save hashed token + encrypted login password\r\n- [x] Invalidate (delete) session token on logout\r\n- [x] Add background job to kill old session tokens\r\n  - [x] Don't kill permanent client tokens\r\n- [x] Check browser session on every request -> logout if invalidated/not found\r\n- [x] Check login credentials each x minutes and log the user out if the check fails\r\n- [x] Update token 'last_activity' in every request\r\n- [ ] Invalidate tokens if the session is killed [in base.php](https://github.com/owncloud/core/blob/14c34919774484d095d26ad2a7246fc897dc2d41/lib/base.php#L433-L439)?\r\n- [x] Add controller where clients can get a new access token\r\n  - Can be tested with ``curl --request POST -F 'user=youruser' -F 'password=yourpassword' localhost:8080/token/generate``\r\n- [ ] Don't use sessions if the client sends an auth token\r\n- [x] Add DB index on 'last_activity'\r\n- [x] Add token type column\r\n- [x] Migrate [OCS auth](https://github.com/owncloud/core/blob/887045b790ced3473f2c0e955abcdd2bc1944612/lib/private/api.php#L330-L384)\r\n- [x] Adjust sabre auth backend\r\n- [x] Increase version number to trigger db migration\r\n- [x] Fix existing unit tests\r\n- [ ] Add new unit tests for token auth\r\n- [x] Fix existing integration test\r\n- [x] Fix apache auth (tested with shibboleth sso)\r\n- [ ] Show login errors\r\n- [x] Add new integration tests for token auth\r\n- [ ] Squash/arrange commits\r\n\r\nBUGS:\r\n- [x] setup is broken\r\n- [x] user agent is always undefined, so the default is used\r\n- [x] new user can not log in\r\n- [ ] Changing own password kicks you out, hence the session token needs to be updated on password change\r\n```\r\nException: {\"Exception\":\"OCP\\\\Files\\\\NotFoundException\",\"Message\":\"\",\"Code\":0,\"Trace\":\"#0 \\/home\\/christoph\\/workspace\\/owncloud\\/apps\\/files\\/controller\\/viewcontroller.php(118): OC_Helper::getStorageInfo('\\/', false)\\n#1 \\/home\\/christoph\\/workspace\\/owncloud\\/apps\\/files\\/controller\\/viewcontroller.php(180): OCA\\\\Files\\\\Controller\\\\ViewController->getStorageInfo()\\n#2 [internal function]: OCA\\\\Files\\\\Controller\\\\ViewController->index('', '')\\n#3 \\/home\\/christoph\\/workspace\\/owncloud\\/lib\\/private\\/AppFramework\\/Http\\/Dispatcher.php(159): call_user_func_array(Array, Array)\\n#4 \\/home\\/christoph\\/workspace\\/owncloud\\/lib\\/private\\/AppFramework\\/Http\\/Dispatcher.php(89): OC\\\\AppFramework\\\\Http\\\\Dispatcher->executeController(Object(OCA\\\\Files\\\\Controller\\\\ViewController), 'index')\\n#5 \\/home\\/christoph\\/workspace\\/owncloud\\/lib\\/private\\/AppFramework\\/App.php(110): OC\\\\AppFramework\\\\Http\\\\Dispatcher->dispatch(Object(OCA\\\\Files\\\\Controller\\\\ViewController), 'index')\\n#6 \\/home\\/christoph\\/workspace\\/owncloud\\/lib\\/private\\/AppFramework\\/Routing\\/RouteActionHandler.php(45): OC\\\\AppFramework\\\\App::main('OCA\\\\\\\\Files\\\\\\\\Contr...', 'index', Object(OC\\\\AppFramework\\\\DependencyInjection\\\\DIContainer), Array)\\n#7 [internal function]: OC\\\\AppFramework\\\\Routing\\\\RouteActionHandler->__invoke(Array)\\n#8 \\/home\\/christoph\\/workspace\\/owncloud\\/lib\\/private\\/route\\/router.php(280): call_user_func(Object(OC\\\\AppFramework\\\\Routing\\\\RouteActionHandler), Array)\\n#9 \\/home\\/christoph\\/workspace\\/owncloud\\/lib\\/base.php(871): OC\\\\Route\\\\Router->match('\\/apps\\/files\\/')\\n#10 \\/home\\/christoph\\/workspace\\/owncloud\\/index.php(39): OC::handleRequest()\\n#11 {main}\",\"File\":\"\\/home\\/christoph\\/workspace\\/owncloud\\/lib\\/private\\/helper.php\",\"Line\":605}\r\n```\r\n- [x] ~~Not possible to add an account to the desktop client – I suspect the login url change to cause that. @LukasReschke what are we gonna do about that?~~ It works, I was testing with wrong credentials :see_no_evil: \r\n- [x] ``\"Unable to generate a URL for the named route \\\\\\\"login#showLoginForm\\\\\\\" as such route does not exist.``\r\n- [x] Adjust column width\r\n  ``ORA-12899: value too large for column \"AUTOTEST\".\"oc_authtoken\".\"token\" (actual: 128, maximum: 100) ``\r\n- [ ] username !== uid, https://github.com/owncloud/core/pull/24189#discussion_r60905030\r\n\r\n--\r\n\r\nNext steps (follow-up PRs):\r\n- GUI\r\n- Clients should switch to token auth if the server supports it\r\n- Bring back remember me, https://github.com/owncloud/core/pull/24189#discussion_r60743623","created_at":"2016-04-22T09:59:47Z","updated_at":"2016-05-06T13:23:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"245c567d37819d2dac01596cb8848948e6f559f7","assignee":{"login":"LukasReschke","id":878997,"avatar_url":"https://avatars.githubusercontent.com/u/878997?v=3","gravatar_id":"","url":"https://api.github.com/users/LukasReschke","html_url":"https://github.com/LukasReschke","followers_url":"https://api.github.com/users/LukasReschke/followers","following_url":"https://api.github.com/users/LukasReschke/following{/other_user}","gists_url":"https://api.github.com/users/LukasReschke/gists{/gist_id}","starred_url":"https://api.github.com/users/LukasReschke/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LukasReschke/subscriptions","organizations_url":"https://api.github.com/users/LukasReschke/orgs","repos_url":"https://api.github.com/users/LukasReschke/repos","events_url":"https://api.github.com/users/LukasReschke/events{/privacy}","received_events_url":"https://api.github.com/users/LukasReschke/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/owncloud/core/milestones/62","html_url":"https://github.com/owncloud/core/milestones/9.1-current","labels_url":"https://api.github.com/repos/owncloud/core/milestones/62/labels","id":1322460,"number":62,"title":"9.1-current","description":"","creator":{"login":"MorrisJobke","id":245432,"avatar_url":"https://avatars.githubusercontent.com/u/245432?v=3","gravatar_id":"","url":"https://api.github.com/users/MorrisJobke","html_url":"https://github.com/MorrisJobke","followers_url":"https://api.github.com/users/MorrisJobke/followers","following_url":"https://api.github.com/users/MorrisJobke/following{/other_user}","gists_url":"https://api.github.com/users/MorrisJobke/gists{/gist_id}","starred_url":"https://api.github.com/users/MorrisJobke/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MorrisJobke/subscriptions","organizations_url":"https://api.github.com/users/MorrisJobke/orgs","repos_url":"https://api.github.com/users/MorrisJobke/repos","events_url":"https://api.github.com/users/MorrisJobke/events{/privacy}","received_events_url":"https://api.github.com/users/MorrisJobke/received_events","type":"User","site_admin":false},"open_issues":733,"closed_issues":673,"state":"open","created_at":"2015-09-24T16:30:14Z","updated_at":"2016-05-06T12:25:31Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/owncloud/core/pulls/24189/commits","review_comments_url":"https://api.github.com/repos/owncloud/core/pulls/24189/comments","review_comment_url":"https://api.github.com/repos/owncloud/core/pulls/comments{/number}","comments_url":"https://api.github.com/repos/owncloud/core/issues/24189/comments","statuses_url":"https://api.github.com/repos/owncloud/core/statuses/0b68d446ef67e7a04e14704c961cf23aea139a6d","head":{"label":"owncloud:pluggable-auth","ref":"pluggable-auth","sha":"0b68d446ef67e7a04e14704c961cf23aea139a6d","user":{"login":"owncloud","id":1645051,"avatar_url":"https://avatars.githubusercontent.com/u/1645051?v=3","gravatar_id":"","url":"https://api.github.com/users/owncloud","html_url":"https://github.com/owncloud","followers_url":"https://api.github.com/users/owncloud/followers","following_url":"https://api.github.com/users/owncloud/following{/other_user}","gists_url":"https://api.github.com/users/owncloud/gists{/gist_id}","starred_url":"https://api.github.com/users/owncloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/owncloud/subscriptions","organizations_url":"https://api.github.com/users/owncloud/orgs","repos_url":"https://api.github.com/users/owncloud/repos","events_url":"https://api.github.com/users/owncloud/events{/privacy}","received_events_url":"https://api.github.com/users/owncloud/received_events","type":"Organization","site_admin":false},"repo":{"id":5550552,"name":"core","full_name":"owncloud/core","owner":{"login":"owncloud","id":1645051,"avatar_url":"https://avatars.githubusercontent.com/u/1645051?v=3","gravatar_id":"","url":"https://api.github.com/users/owncloud","html_url":"https://github.com/owncloud","followers_url":"https://api.github.com/users/owncloud/followers","following_url":"https://api.github.com/users/owncloud/following{/other_user}","gists_url":"https://api.github.com/users/owncloud/gists{/gist_id}","starred_url":"https://api.github.com/users/owncloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/owncloud/subscriptions","organizations_url":"https://api.github.com/users/owncloud/orgs","repos_url":"https://api.github.com/users/owncloud/repos","events_url":"https://api.github.com/users/owncloud/events{/privacy}","received_events_url":"https://api.github.com/users/owncloud/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/owncloud/core","description":":cloud: ownCloud web server core (Files, DAV, etc.)","fork":false,"url":"https://api.github.com/repos/owncloud/core","forks_url":"https://api.github.com/repos/owncloud/core/forks","keys_url":"https://api.github.com/repos/owncloud/core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/owncloud/core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/owncloud/core/teams","hooks_url":"https://api.github.com/repos/owncloud/core/hooks","issue_events_url":"https://api.github.com/repos/owncloud/core/issues/events{/number}","events_url":"https://api.github.com/repos/owncloud/core/events","assignees_url":"https://api.github.com/repos/owncloud/core/assignees{/user}","branches_url":"https://api.github.com/repos/owncloud/core/branches{/branch}","tags_url":"https://api.github.com/repos/owncloud/core/tags","blobs_url":"https://api.github.com/repos/owncloud/core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/owncloud/core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/owncloud/core/git/refs{/sha}","trees_url":"https://api.github.com/repos/owncloud/core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/owncloud/core/statuses/{sha}","languages_url":"https://api.github.com/repos/owncloud/core/languages","stargazers_url":"https://api.github.com/repos/owncloud/core/stargazers","contributors_url":"https://api.github.com/repos/owncloud/core/contributors","subscribers_url":"https://api.github.com/repos/owncloud/core/subscribers","subscription_url":"https://api.github.com/repos/owncloud/core/subscription","commits_url":"https://api.github.com/repos/owncloud/core/commits{/sha}","git_commits_url":"https://api.github.com/repos/owncloud/core/git/commits{/sha}","comments_url":"https://api.github.com/repos/owncloud/core/comments{/number}","issue_comment_url":"https://api.github.com/repos/owncloud/core/issues/comments{/number}","contents_url":"https://api.github.com/repos/owncloud/core/contents/{+path}","compare_url":"https://api.github.com/repos/owncloud/core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/owncloud/core/merges","archive_url":"https://api.github.com/repos/owncloud/core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/owncloud/core/downloads","issues_url":"https://api.github.com/repos/owncloud/core/issues{/number}","pulls_url":"https://api.github.com/repos/owncloud/core/pulls{/number}","milestones_url":"https://api.github.com/repos/owncloud/core/milestones{/number}","notifications_url":"https://api.github.com/repos/owncloud/core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/owncloud/core/labels{/name}","releases_url":"https://api.github.com/repos/owncloud/core/releases{/id}","deployments_url":"https://api.github.com/repos/owncloud/core/deployments","created_at":"2012-08-25T10:32:48Z","updated_at":"2016-05-06T09:13:18Z","pushed_at":"2016-05-06T13:11:01Z","git_url":"git://github.com/owncloud/core.git","ssh_url":"git@github.com:owncloud/core.git","clone_url":"https://github.com/owncloud/core.git","svn_url":"https://github.com/owncloud/core","homepage":"https://owncloud.org/","size":309247,"stargazers_count":4485,"watchers_count":4485,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1470,"mirror_url":null,"open_issues_count":1871,"forks":1470,"open_issues":1871,"watchers":4485,"default_branch":"master"}},"base":{"label":"owncloud:master","ref":"master","sha":"4b2544925f7f51d7e5cb1329166451f4fbd9e6bf","user":{"login":"owncloud","id":1645051,"avatar_url":"https://avatars.githubusercontent.com/u/1645051?v=3","gravatar_id":"","url":"https://api.github.com/users/owncloud","html_url":"https://github.com/owncloud","followers_url":"https://api.github.com/users/owncloud/followers","following_url":"https://api.github.com/users/owncloud/following{/other_user}","gists_url":"https://api.github.com/users/owncloud/gists{/gist_id}","starred_url":"https://api.github.com/users/owncloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/owncloud/subscriptions","organizations_url":"https://api.github.com/users/owncloud/orgs","repos_url":"https://api.github.com/users/owncloud/repos","events_url":"https://api.github.com/users/owncloud/events{/privacy}","received_events_url":"https://api.github.com/users/owncloud/received_events","type":"Organization","site_admin":false},"repo":{"id":5550552,"name":"core","full_name":"owncloud/core","owner":{"login":"owncloud","id":1645051,"avatar_url":"https://avatars.githubusercontent.com/u/1645051?v=3","gravatar_id":"","url":"https://api.github.com/users/owncloud","html_url":"https://github.com/owncloud","followers_url":"https://api.github.com/users/owncloud/followers","following_url":"https://api.github.com/users/owncloud/following{/other_user}","gists_url":"https://api.github.com/users/owncloud/gists{/gist_id}","starred_url":"https://api.github.com/users/owncloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/owncloud/subscriptions","organizations_url":"https://api.github.com/users/owncloud/orgs","repos_url":"https://api.github.com/users/owncloud/repos","events_url":"https://api.github.com/users/owncloud/events{/privacy}","received_events_url":"https://api.github.com/users/owncloud/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/owncloud/core","description":":cloud: ownCloud web server core (Files, DAV, etc.)","fork":false,"url":"https://api.github.com/repos/owncloud/core","forks_url":"https://api.github.com/repos/owncloud/core/forks","keys_url":"https://api.github.com/repos/owncloud/core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/owncloud/core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/owncloud/core/teams","hooks_url":"https://api.github.com/repos/owncloud/core/hooks","issue_events_url":"https://api.github.com/repos/owncloud/core/issues/events{/number}","events_url":"https://api.github.com/repos/owncloud/core/events","assignees_url":"https://api.github.com/repos/owncloud/core/assignees{/user}","branches_url":"https://api.github.com/repos/owncloud/core/branches{/branch}","tags_url":"https://api.github.com/repos/owncloud/core/tags","blobs_url":"https://api.github.com/repos/owncloud/core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/owncloud/core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/owncloud/core/git/refs{/sha}","trees_url":"https://api.github.com/repos/owncloud/core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/owncloud/core/statuses/{sha}","languages_url":"https://api.github.com/repos/owncloud/core/languages","stargazers_url":"https://api.github.com/repos/owncloud/core/stargazers","contributors_url":"https://api.github.com/repos/owncloud/core/contributors","subscribers_url":"https://api.github.com/repos/owncloud/core/subscribers","subscription_url":"https://api.github.com/repos/owncloud/core/subscription","commits_url":"https://api.github.com/repos/owncloud/core/commits{/sha}","git_commits_url":"https://api.github.com/repos/owncloud/core/git/commits{/sha}","comments_url":"https://api.github.com/repos/owncloud/core/comments{/number}","issue_comment_url":"https://api.github.com/repos/owncloud/core/issues/comments{/number}","contents_url":"https://api.github.com/repos/owncloud/core/contents/{+path}","compare_url":"https://api.github.com/repos/owncloud/core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/owncloud/core/merges","archive_url":"https://api.github.com/repos/owncloud/core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/owncloud/core/downloads","issues_url":"https://api.github.com/repos/owncloud/core/issues{/number}","pulls_url":"https://api.github.com/repos/owncloud/core/pulls{/number}","milestones_url":"https://api.github.com/repos/owncloud/core/milestones{/number}","notifications_url":"https://api.github.com/repos/owncloud/core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/owncloud/core/labels{/name}","releases_url":"https://api.github.com/repos/owncloud/core/releases{/id}","deployments_url":"https://api.github.com/repos/owncloud/core/deployments","created_at":"2012-08-25T10:32:48Z","updated_at":"2016-05-06T09:13:18Z","pushed_at":"2016-05-06T13:11:01Z","git_url":"git://github.com/owncloud/core.git","ssh_url":"git@github.com:owncloud/core.git","clone_url":"https://github.com/owncloud/core.git","svn_url":"https://github.com/owncloud/core","homepage":"https://owncloud.org/","size":309247,"stargazers_count":4485,"watchers_count":4485,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1470,"mirror_url":null,"open_issues_count":1871,"forks":1470,"open_issues":1871,"watchers":4485,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/owncloud/core/pulls/24189"},"html":{"href":"https://github.com/owncloud/core/pull/24189"},"issue":{"href":"https://api.github.com/repos/owncloud/core/issues/24189"},"comments":{"href":"https://api.github.com/repos/owncloud/core/issues/24189/comments"},"review_comments":{"href":"https://api.github.com/repos/owncloud/core/pulls/24189/comments"},"review_comment":{"href":"https://api.github.com/repos/owncloud/core/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/owncloud/core/pulls/24189/commits"},"statuses":{"href":"https://api.github.com/repos/owncloud/core/statuses/0b68d446ef67e7a04e14704c961cf23aea139a6d"}}}}