{"action":"created","comment":{"url":"https://api.github.com/repos/eclipse/che/pulls/comments/214030631","pull_request_review_id":150994312,"id":214030631,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNDAzMDYzMQ==","diff_hunk":"@@ -0,0 +1,110 @@\n+/*\n+ * Copyright (c) 2012-2018 Red Hat, Inc.\n+ * This program and the accompanying materials are made\n+ * available under the terms of the Eclipse Public License 2.0\n+ * which is available at https://www.eclipse.org/legal/epl-2.0/\n+ *\n+ * SPDX-License-Identifier: EPL-2.0\n+ *\n+ * Contributors:\n+ *   Red Hat, Inc. - initial API and implementation\n+ */\n+package org.eclipse.che.multiuser.organization.api.permissions;\n+\n+import static org.eclipse.che.multiuser.organization.api.listener.OrganizationEventsWebsocketBroadcaster.ORGANIZATION_CHANGED_METHOD_NAME;\n+import static org.eclipse.che.multiuser.organization.api.listener.OrganizationEventsWebsocketBroadcaster.ORGANIZATION_MEMBERSHIP_METHOD_NAME;\n+\n+import com.google.common.annotations.VisibleForTesting;\n+import java.util.Map;\n+import javax.inject.Inject;\n+import javax.inject.Singleton;\n+import org.eclipse.che.api.core.ConflictException;\n+import org.eclipse.che.api.core.ForbiddenException;\n+import org.eclipse.che.api.core.NotFoundException;\n+import org.eclipse.che.api.core.ServerException;\n+import org.eclipse.che.commons.env.EnvironmentContext;\n+import org.eclipse.che.multiuser.api.permission.server.PermissionsManager;\n+import org.eclipse.che.multiuser.api.permission.server.jsonrpc.RemoteSubscriptionPermissionCheck;\n+import org.eclipse.che.multiuser.api.permission.server.jsonrpc.RemoteSubscriptionPermissionManager;\n+import org.eclipse.che.multiuser.api.permission.server.model.impl.AbstractPermissions;\n+import org.eclipse.che.multiuser.organization.api.listener.OrganizationEventsWebsocketBroadcaster;\n+\n+/**\n+ * Holds and registers permissions checks for organization related events.\n+ *\n+ * <p>Covers events published via {@link OrganizationEventsWebsocketBroadcaster}.\n+ *\n+ * @author Sergii Leshchenko\n+ */\n+@Singleton\n+public class OrganizationRemoteSubscriptionPermissionsChecks {\n+\n+  private final PermissionsManager permissionsManager;\n+\n+  @Inject\n+  public OrganizationRemoteSubscriptionPermissionsChecks(PermissionsManager permissionsManager) {\n+    this.permissionsManager = permissionsManager;\n+  }\n+\n+  @Inject\n+  public void register(RemoteSubscriptionPermissionManager permissionFilter) {\n+    OrganizationMembershipsChangedSubscriptionPermissionsCheck membershipsEventsCheck =\n+        new OrganizationMembershipsChangedSubscriptionPermissionsCheck();\n+\n+    permissionFilter.registerCheck(membershipsEventsCheck, ORGANIZATION_MEMBERSHIP_METHOD_NAME);\n+\n+    OrganizationChangedSubscriptionPermissionsCheck organizationChangedCheck =\n+        new OrganizationChangedSubscriptionPermissionsCheck(permissionsManager);\n+    permissionFilter.registerCheck(organizationChangedCheck, ORGANIZATION_CHANGED_METHOD_NAME);\n+  }\n+\n+  @VisibleForTesting\n+  static class OrganizationMembershipsChangedSubscriptionPermissionsCheck\n+      implements RemoteSubscriptionPermissionCheck {\n+\n+    @Override\n+    public void check(String methodName, Map<String, String> scope) throws ForbiddenException {\n+      String userId = scope.get(\"userId\");\n+      if (userId == null) {\n+        throw new ForbiddenException(\"User id must be specified in scope\");\n+      }\n+\n+      String currentUserId = EnvironmentContext.getCurrent().getSubject().getUserId();\n+\n+      if (!currentUserId.equals(userId)) {\n+        throw new ForbiddenException(\"It is only allowed to listen to own memberships changes\");\n+      }\n+    }\n+  }\n+\n+  @VisibleForTesting\n+  static class OrganizationChangedSubscriptionPermissionsCheck\n+      implements RemoteSubscriptionPermissionCheck {\n+\n+    private final PermissionsManager permissionsManager;\n+\n+    public OrganizationChangedSubscriptionPermissionsCheck(PermissionsManager permissionsManager) {\n+      this.permissionsManager = permissionsManager;\n+    }\n+\n+    @Override\n+    public void check(String methodName, Map<String, String> scope) throws ForbiddenException {\n+      String organizationId = scope.get(\"organizationId\");\n+      if (organizationId == null) {\n+        throw new ForbiddenException(\"Organization id must be specified in scope\");\n+      }\n+\n+      String currentUserId = EnvironmentContext.getCurrent().getSubject().getUserId();\n+\n+      try {\n+        AbstractPermissions permissions =","path":"multiuser/api/che-multiuser-api-organization/src/main/java/org/eclipse/che/multiuser/organization/api/permissions/OrganizationRemoteSubscriptionPermissionsChecks.java","position":100,"original_position":100,"commit_id":"2e27a470b5921ca7d427ac5718394300b37e3b3c","original_commit_id":"30d1735cfc182b0e274be751ee41bf6f9bc4feb9","user":{"login":"garagatyi","id":1851863,"node_id":"MDQ6VXNlcjE4NTE4NjM=","avatar_url":"https://avatars0.githubusercontent.com/u/1851863?v=4","gravatar_id":"","url":"https://api.github.com/users/garagatyi","html_url":"https://github.com/garagatyi","followers_url":"https://api.github.com/users/garagatyi/followers","following_url":"https://api.github.com/users/garagatyi/following{/other_user}","gists_url":"https://api.github.com/users/garagatyi/gists{/gist_id}","starred_url":"https://api.github.com/users/garagatyi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/garagatyi/subscriptions","organizations_url":"https://api.github.com/users/garagatyi/orgs","repos_url":"https://api.github.com/users/garagatyi/repos","events_url":"https://api.github.com/users/garagatyi/events{/privacy}","received_events_url":"https://api.github.com/users/garagatyi/received_events","type":"User","site_admin":false},"body":"Can you add a comment to the code with the explanation of why this part is implemented in this way?","created_at":"2018-08-30T13:30:42Z","updated_at":"2018-08-30T13:31:18Z","html_url":"https://github.com/eclipse/che/pull/10934#discussion_r214030631","pull_request_url":"https://api.github.com/repos/eclipse/che/pulls/10934","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/eclipse/che/pulls/comments/214030631"},"html":{"href":"https://github.com/eclipse/che/pull/10934#discussion_r214030631"},"pull_request":{"href":"https://api.github.com/repos/eclipse/che/pulls/10934"}}},"pull_request":{"url":"https://api.github.com/repos/eclipse/che/pulls/10934","id":211126925,"node_id":"MDExOlB1bGxSZXF1ZXN0MjExMTI2OTI1","html_url":"https://github.com/eclipse/che/pull/10934","diff_url":"https://github.com/eclipse/che/pull/10934.diff","patch_url":"https://github.com/eclipse/che/pull/10934.patch","issue_url":"https://api.github.com/repos/eclipse/che/issues/10934","number":10934,"state":"open","locked":false,"title":"Added authorization for JsonRpc methods","user":{"login":"sleshchenko","id":5887312,"node_id":"MDQ6VXNlcjU4ODczMTI=","avatar_url":"https://avatars0.githubusercontent.com/u/5887312?v=4","gravatar_id":"","url":"https://api.github.com/users/sleshchenko","html_url":"https://github.com/sleshchenko","followers_url":"https://api.github.com/users/sleshchenko/followers","following_url":"https://api.github.com/users/sleshchenko/following{/other_user}","gists_url":"https://api.github.com/users/sleshchenko/gists{/gist_id}","starred_url":"https://api.github.com/users/sleshchenko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sleshchenko/subscriptions","organizations_url":"https://api.github.com/users/sleshchenko/orgs","repos_url":"https://api.github.com/users/sleshchenko/repos","events_url":"https://api.github.com/users/sleshchenko/events{/privacy}","received_events_url":"https://api.github.com/users/sleshchenko/received_events","type":"User","site_admin":false},"body":"### What does this PR do?\r\n1. Introduces new JsonRpcMethodInvokerFilter component which allows to bind filter before JsonRpc method invocation.\r\n2. Add permissions filter for JsonRpcInstallerService. All json rpc methods are reviewed and filters are added where it is needed.\r\n3. Add component which allows to bind permissions check by remote subscription method. All json rpc remote subscriptions methods are reviewed and checks are added where it is needed.\r\n\r\nHere is an example of an invocating JsonRpc method and remote subscribing without required permissions:\r\n![screenshot_20180829_142910](https://user-images.githubusercontent.com/5887312/44784977-0ad65f00-ab98-11e8-8e7e-b076f0a37323.png)\r\n\r\n\r\n### What issues does this PR fix or reference?\r\nhttps://github.com/eclipse/che/issues/10861\r\n\r\n<!-- #### Changelog -->\r\n<!-- The changelog will be pulled from the PR's title. \r\n     Please provide a clear and meaningful title to the PR and don't include issue number -->\r\n\r\n\r\n#### Release Notes\r\nTODO\r\n\r\n\r\n#### Docs PR\r\nTODO","created_at":"2018-08-27T14:27:00Z","updated_at":"2018-08-30T13:31:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e519d77013d7cab857966383cca13a80b8bef4a4","assignee":{"login":"sleshchenko","id":5887312,"node_id":"MDQ6VXNlcjU4ODczMTI=","avatar_url":"https://avatars0.githubusercontent.com/u/5887312?v=4","gravatar_id":"","url":"https://api.github.com/users/sleshchenko","html_url":"https://github.com/sleshchenko","followers_url":"https://api.github.com/users/sleshchenko/followers","following_url":"https://api.github.com/users/sleshchenko/following{/other_user}","gists_url":"https://api.github.com/users/sleshchenko/gists{/gist_id}","starred_url":"https://api.github.com/users/sleshchenko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sleshchenko/subscriptions","organizations_url":"https://api.github.com/users/sleshchenko/orgs","repos_url":"https://api.github.com/users/sleshchenko/repos","events_url":"https://api.github.com/users/sleshchenko/events{/privacy}","received_events_url":"https://api.github.com/users/sleshchenko/received_events","type":"User","site_admin":false},"assignees":[{"login":"sleshchenko","id":5887312,"node_id":"MDQ6VXNlcjU4ODczMTI=","avatar_url":"https://avatars0.githubusercontent.com/u/5887312?v=4","gravatar_id":"","url":"https://api.github.com/users/sleshchenko","html_url":"https://github.com/sleshchenko","followers_url":"https://api.github.com/users/sleshchenko/followers","following_url":"https://api.github.com/users/sleshchenko/following{/other_user}","gists_url":"https://api.github.com/users/sleshchenko/gists{/gist_id}","starred_url":"https://api.github.com/users/sleshchenko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sleshchenko/subscriptions","organizations_url":"https://api.github.com/users/sleshchenko/orgs","repos_url":"https://api.github.com/users/sleshchenko/repos","events_url":"https://api.github.com/users/sleshchenko/events{/privacy}","received_events_url":"https://api.github.com/users/sleshchenko/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"riuvshin","id":1636732,"node_id":"MDQ6VXNlcjE2MzY3MzI=","avatar_url":"https://avatars2.githubusercontent.com/u/1636732?v=4","gravatar_id":"","url":"https://api.github.com/users/riuvshin","html_url":"https://github.com/riuvshin","followers_url":"https://api.github.com/users/riuvshin/followers","following_url":"https://api.github.com/users/riuvshin/following{/other_user}","gists_url":"https://api.github.com/users/riuvshin/gists{/gist_id}","starred_url":"https://api.github.com/users/riuvshin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/riuvshin/subscriptions","organizations_url":"https://api.github.com/users/riuvshin/orgs","repos_url":"https://api.github.com/users/riuvshin/repos","events_url":"https://api.github.com/users/riuvshin/events{/privacy}","received_events_url":"https://api.github.com/users/riuvshin/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":345100759,"node_id":"MDU6TGFiZWwzNDUxMDA3NTk=","url":"https://api.github.com/repos/eclipse/che/labels/kind/task","name":"kind/task","color":"f7c6c7","default":false},{"id":345100523,"node_id":"MDU6TGFiZWwzNDUxMDA1MjM=","url":"https://api.github.com/repos/eclipse/che/labels/status/code-review","name":"status/code-review","color":"0052cc","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/eclipse/che/pulls/10934/commits","review_comments_url":"https://api.github.com/repos/eclipse/che/pulls/10934/comments","review_comment_url":"https://api.github.com/repos/eclipse/che/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eclipse/che/issues/10934/comments","statuses_url":"https://api.github.com/repos/eclipse/che/statuses/2e27a470b5921ca7d427ac5718394300b37e3b3c","head":{"label":"sleshchenko:jsonRpcAuthorization","ref":"jsonRpcAuthorization","sha":"2e27a470b5921ca7d427ac5718394300b37e3b3c","user":{"login":"sleshchenko","id":5887312,"node_id":"MDQ6VXNlcjU4ODczMTI=","avatar_url":"https://avatars0.githubusercontent.com/u/5887312?v=4","gravatar_id":"","url":"https://api.github.com/users/sleshchenko","html_url":"https://github.com/sleshchenko","followers_url":"https://api.github.com/users/sleshchenko/followers","following_url":"https://api.github.com/users/sleshchenko/following{/other_user}","gists_url":"https://api.github.com/users/sleshchenko/gists{/gist_id}","starred_url":"https://api.github.com/users/sleshchenko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sleshchenko/subscriptions","organizations_url":"https://api.github.com/users/sleshchenko/orgs","repos_url":"https://api.github.com/users/sleshchenko/repos","events_url":"https://api.github.com/users/sleshchenko/events{/privacy}","received_events_url":"https://api.github.com/users/sleshchenko/received_events","type":"User","site_admin":false},"repo":{"id":51596526,"node_id":"MDEwOlJlcG9zaXRvcnk1MTU5NjUyNg==","name":"che","full_name":"sleshchenko/che","owner":{"login":"sleshchenko","id":5887312,"node_id":"MDQ6VXNlcjU4ODczMTI=","avatar_url":"https://avatars0.githubusercontent.com/u/5887312?v=4","gravatar_id":"","url":"https://api.github.com/users/sleshchenko","html_url":"https://github.com/sleshchenko","followers_url":"https://api.github.com/users/sleshchenko/followers","following_url":"https://api.github.com/users/sleshchenko/following{/other_user}","gists_url":"https://api.github.com/users/sleshchenko/gists{/gist_id}","starred_url":"https://api.github.com/users/sleshchenko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sleshchenko/subscriptions","organizations_url":"https://api.github.com/users/sleshchenko/orgs","repos_url":"https://api.github.com/users/sleshchenko/repos","events_url":"https://api.github.com/users/sleshchenko/events{/privacy}","received_events_url":"https://api.github.com/users/sleshchenko/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sleshchenko/che","description":"Eclipse Che: Next-generation Eclipse IDE.  Open source workspace server and cloud IDE.","fork":true,"url":"https://api.github.com/repos/sleshchenko/che","forks_url":"https://api.github.com/repos/sleshchenko/che/forks","keys_url":"https://api.github.com/repos/sleshchenko/che/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sleshchenko/che/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sleshchenko/che/teams","hooks_url":"https://api.github.com/repos/sleshchenko/che/hooks","issue_events_url":"https://api.github.com/repos/sleshchenko/che/issues/events{/number}","events_url":"https://api.github.com/repos/sleshchenko/che/events","assignees_url":"https://api.github.com/repos/sleshchenko/che/assignees{/user}","branches_url":"https://api.github.com/repos/sleshchenko/che/branches{/branch}","tags_url":"https://api.github.com/repos/sleshchenko/che/tags","blobs_url":"https://api.github.com/repos/sleshchenko/che/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sleshchenko/che/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sleshchenko/che/git/refs{/sha}","trees_url":"https://api.github.com/repos/sleshchenko/che/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sleshchenko/che/statuses/{sha}","languages_url":"https://api.github.com/repos/sleshchenko/che/languages","stargazers_url":"https://api.github.com/repos/sleshchenko/che/stargazers","contributors_url":"https://api.github.com/repos/sleshchenko/che/contributors","subscribers_url":"https://api.github.com/repos/sleshchenko/che/subscribers","subscription_url":"https://api.github.com/repos/sleshchenko/che/subscription","commits_url":"https://api.github.com/repos/sleshchenko/che/commits{/sha}","git_commits_url":"https://api.github.com/repos/sleshchenko/che/git/commits{/sha}","comments_url":"https://api.github.com/repos/sleshchenko/che/comments{/number}","issue_comment_url":"https://api.github.com/repos/sleshchenko/che/issues/comments{/number}","contents_url":"https://api.github.com/repos/sleshchenko/che/contents/{+path}","compare_url":"https://api.github.com/repos/sleshchenko/che/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sleshchenko/che/merges","archive_url":"https://api.github.com/repos/sleshchenko/che/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sleshchenko/che/downloads","issues_url":"https://api.github.com/repos/sleshchenko/che/issues{/number}","pulls_url":"https://api.github.com/repos/sleshchenko/che/pulls{/number}","milestones_url":"https://api.github.com/repos/sleshchenko/che/milestones{/number}","notifications_url":"https://api.github.com/repos/sleshchenko/che/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sleshchenko/che/labels{/name}","releases_url":"https://api.github.com/repos/sleshchenko/che/releases{/id}","deployments_url":"https://api.github.com/repos/sleshchenko/che/deployments","created_at":"2016-02-12T15:20:29Z","updated_at":"2018-02-04T09:35:32Z","pushed_at":"2018-08-30T13:26:26Z","git_url":"git://github.com/sleshchenko/che.git","ssh_url":"git@github.com:sleshchenko/che.git","clone_url":"https://github.com/sleshchenko/che.git","svn_url":"https://github.com/sleshchenko/che","homepage":"http://eclipse.org/che","size":84704,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"epl-1.0","name":"Eclipse Public License 1.0","spdx_id":"EPL-1.0","url":"https://api.github.com/licenses/epl-1.0","node_id":"MDc6TGljZW5zZTc="},"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"eclipse:master","ref":"master","sha":"2b7ebd8f852c154f8ab5d423130ea8cbb64ce223","user":{"login":"eclipse","id":56974,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2OTc0","avatar_url":"https://avatars1.githubusercontent.com/u/56974?v=4","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"repo":{"id":32935745,"node_id":"MDEwOlJlcG9zaXRvcnkzMjkzNTc0NQ==","name":"che","full_name":"eclipse/che","owner":{"login":"eclipse","id":56974,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2OTc0","avatar_url":"https://avatars1.githubusercontent.com/u/56974?v=4","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/eclipse/che","description":"Eclipse Che: Next-generation Eclipse IDE.  Open source workspace server and cloud IDE.","fork":false,"url":"https://api.github.com/repos/eclipse/che","forks_url":"https://api.github.com/repos/eclipse/che/forks","keys_url":"https://api.github.com/repos/eclipse/che/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eclipse/che/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eclipse/che/teams","hooks_url":"https://api.github.com/repos/eclipse/che/hooks","issue_events_url":"https://api.github.com/repos/eclipse/che/issues/events{/number}","events_url":"https://api.github.com/repos/eclipse/che/events","assignees_url":"https://api.github.com/repos/eclipse/che/assignees{/user}","branches_url":"https://api.github.com/repos/eclipse/che/branches{/branch}","tags_url":"https://api.github.com/repos/eclipse/che/tags","blobs_url":"https://api.github.com/repos/eclipse/che/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eclipse/che/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eclipse/che/git/refs{/sha}","trees_url":"https://api.github.com/repos/eclipse/che/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eclipse/che/statuses/{sha}","languages_url":"https://api.github.com/repos/eclipse/che/languages","stargazers_url":"https://api.github.com/repos/eclipse/che/stargazers","contributors_url":"https://api.github.com/repos/eclipse/che/contributors","subscribers_url":"https://api.github.com/repos/eclipse/che/subscribers","subscription_url":"https://api.github.com/repos/eclipse/che/subscription","commits_url":"https://api.github.com/repos/eclipse/che/commits{/sha}","git_commits_url":"https://api.github.com/repos/eclipse/che/git/commits{/sha}","comments_url":"https://api.github.com/repos/eclipse/che/comments{/number}","issue_comment_url":"https://api.github.com/repos/eclipse/che/issues/comments{/number}","contents_url":"https://api.github.com/repos/eclipse/che/contents/{+path}","compare_url":"https://api.github.com/repos/eclipse/che/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eclipse/che/merges","archive_url":"https://api.github.com/repos/eclipse/che/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eclipse/che/downloads","issues_url":"https://api.github.com/repos/eclipse/che/issues{/number}","pulls_url":"https://api.github.com/repos/eclipse/che/pulls{/number}","milestones_url":"https://api.github.com/repos/eclipse/che/milestones{/number}","notifications_url":"https://api.github.com/repos/eclipse/che/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eclipse/che/labels{/name}","releases_url":"https://api.github.com/repos/eclipse/che/releases{/id}","deployments_url":"https://api.github.com/repos/eclipse/che/deployments","created_at":"2015-03-26T15:31:01Z","updated_at":"2018-08-30T12:37:18Z","pushed_at":"2018-08-30T13:26:30Z","git_url":"git://github.com/eclipse/che.git","ssh_url":"git@github.com:eclipse/che.git","clone_url":"https://github.com/eclipse/che.git","svn_url":"https://github.com/eclipse/che","homepage":"http://eclipse.org/che","size":97664,"stargazers_count":4993,"watchers_count":4993,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":902,"mirror_url":null,"archived":false,"open_issues_count":937,"license":{"key":"epl-2.0","name":"Eclipse Public License 2.0","spdx_id":"EPL-2.0","url":"https://api.github.com/licenses/epl-2.0","node_id":"MDc6TGljZW5zZTMy"},"forks":902,"open_issues":937,"watchers":4993,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/eclipse/che/pulls/10934"},"html":{"href":"https://github.com/eclipse/che/pull/10934"},"issue":{"href":"https://api.github.com/repos/eclipse/che/issues/10934"},"comments":{"href":"https://api.github.com/repos/eclipse/che/issues/10934/comments"},"review_comments":{"href":"https://api.github.com/repos/eclipse/che/pulls/10934/comments"},"review_comment":{"href":"https://api.github.com/repos/eclipse/che/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eclipse/che/pulls/10934/commits"},"statuses":{"href":"https://api.github.com/repos/eclipse/che/statuses/2e27a470b5921ca7d427ac5718394300b37e3b3c"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"garagatyi"}}