{"action":"created","comment":{"url":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/comments/36637711","id":36637711,"diff_hunk":"@@ -0,0 +1,155 @@\n+package org.jenkinsci.plugins.envinject;\n+\n+import hudson.model.FreeStyleBuild;\n+import hudson.model.FreeStyleProject;\n+import hudson.model.Item;\n+import hudson.model.Run;\n+import hudson.model.TaskListener;\n+import hudson.model.User;\n+import hudson.security.ACL;\n+import hudson.security.AccessControlled;\n+import hudson.security.GlobalMatrixAuthorizationStrategy;\n+import hudson.security.Permission;\n+import javax.annotation.Nonnull;\n+import jenkins.model.Jenkins;\n+import org.acegisecurity.Authentication;\n+import org.acegisecurity.context.SecurityContext;\n+import org.acegisecurity.context.SecurityContextHolder;\n+import org.acegisecurity.userdetails.UsernameNotFoundException;\n+import static org.junit.Assert.*;\n+import org.junit.Rule;\n+import org.junit.Test;\n+import org.junit.Before;\n+import org.jvnet.hudson.test.CaptureEnvironmentBuilder;\n+import org.jvnet.hudson.test.JenkinsRule;\n+import org.jvnet.hudson.test.SingleFileSCM;\n+\n+/**\n+ * Tests for {@link EnvInjectPluginAction}.\n+ * @author Oleg Nenashev\n+ */\n+public class EnvInjectPluginActionTest {\n+        \n+    @Rule\n+    public JenkinsRule j = new JenkinsRule();\n+    \n+    private FreeStyleProject p;\n+    private CaptureEnvironmentBuilder capture;\n+    \n+    @Before\n+    public void prepareProject() throws Exception {\n+        p = j.createFreeStyleProject();\n+\n+        EnvInjectBuildWrapper wrapper = new EnvInjectBuildWrapper();\n+        p.getBuildWrappersList().add(wrapper);\n+        wrapper.setInfo(new EnvInjectJobPropertyInfo(null, \"FOO=BAR\", null, null, null, false));\n+        \n+        capture = new CaptureEnvironmentBuilder();\n+        p.getBuildersList().add(capture);\n+    }\n+    \n+    @Test\n+    public void actionSanityTest() throws Exception {\n+        // Run build and retrieve results\n+        FreeStyleBuild build = j.buildAndAssertSuccess(p);\n+        assertEquals(\"BAR\", capture.getEnvVars().get(\"FOO\"));\n+        assertEquals(\"BAR\", build.getEnvironment(TaskListener.NULL).get(\"FOO\"));\n+        \n+        // Check action\n+        EnvInjectPluginAction action = build.getAction(EnvInjectPluginAction.class);\n+        assertNotNull(\"EnvInjectPluginAction has not been injected\", action);\n+        Object target = action.getTarget();\n+        assertTrue(target instanceof EnvInjectVarList);\n+        EnvInjectVarList vars = (EnvInjectVarList)target;\n+        assertEquals(\"BAR\", vars.getEnvMap().get(\"FOO\"));\n+        \n+        // Check that action is visible\n+        assertNotNull(action.getIconFileName());\n+        assertNotNull(action.getUrlName());\n+    }\n+    \n+    @Test\n+    public void hideActionGlobally() throws Exception {\n+        final EnvInjectPlugin plugin = EnvInjectPlugin.getInstance();\n+        plugin.configure(new EnvInjectPluginConfiguration(true, false));\n+        \n+        // Run build and retrieve results\n+        FreeStyleBuild build = j.buildAndAssertSuccess(p);\n+        assertEquals(\"BAR\", capture.getEnvVars().get(\"FOO\"));\n+        assertEquals(\"BAR\", build.getEnvironment(TaskListener.NULL).get(\"FOO\"));\n+        \n+        // Check action\n+        EnvInjectPluginAction action = build.getAction(EnvInjectPluginAction.class);\n+        assertNotNull(\"EnvInjectPluginAction has not been injected\", action);\n+        Object target = action.getTarget();\n+        assertNull(action.getIconFileName());\n+        assertNull(action.getUrlName());\n+        \n+        assertEquals(\"Injected variables should be hidden\", EnvInjectVarList.HIDDEN, target);\n+        assertFalse(\"Users should have no permission to see injected vars\", \n+                canViewInjectedVars(User.getUnknown(), build));\n+    }\n+    \n+    @Test\n+    public void hideActionViaPermissions() throws Exception {\n+        // Enable permissions\n+        final EnvInjectPlugin plugin = EnvInjectPlugin.getInstance();\n+        plugin.configure(new EnvInjectPluginConfiguration(false, true));\n+        \n+        // Create a test user\n+        User user = User.get(\"testUser\", true, null);\n+             \n+        final GlobalMatrixAuthorizationStrategy strategy = new GlobalMatrixAuthorizationStrategy();\n+        strategy.add(Jenkins.READ, user.getId());\n+        strategy.add(Item.READ, user.getId());\n+        strategy.add(Item.DISCOVER, user.getId());\n+        j.jenkins.setAuthorizationStrategy(strategy);\n+        \n+        // Run build and retrieve results\n+        FreeStyleBuild build = j.buildAndAssertSuccess(p);\n+        assertFalse(\"User should have no View Injected Vars permission\", \n+                hasPermission(user, build, EnvInjectPlugin.VIEW_INJECTED_VARS));\n+        assertFalse(\"User should have no permission to see injected vars\", \n+                canViewInjectedVars(user, build));\n+            \n+        // Grant permissions and check the results \n+        strategy.add(EnvInjectPlugin.VIEW_INJECTED_VARS, user.getId());\n+        assertTrue(\"User should have the View Injected Vars permission\", \n+                hasPermission(user, build, EnvInjectPlugin.VIEW_INJECTED_VARS));\n+        assertTrue(\"User should have a permission to see injected vars\", \n+                canViewInjectedVars(user, build));\n+    }\n+    \n+    \n+    private boolean hasPermission(User user, AccessControlled item, Permission permission ) \n+            throws AssertionError {\n+        SecurityContext initialContext = null;\n+        try {\n+            Authentication auth = user.impersonate();\n+            initialContext = hudson.security.ACL.impersonate(auth);\n+            return item.hasPermission(permission);\n+        } catch (UsernameNotFoundException ex) {\n+            throw new AssertionError(\"The specified user is not found\", ex);","path":"src/test/java/org/jenkinsci/plugins/envinject/EnvInjectPluginActionTest.java","position":132,"original_position":132,"commit_id":"6eccc48d05fe0d4561352b939577bfa2712b5c7c","original_commit_id":"8cd0fe3cffa3b44d687be9595b836a82146e658c","user":{"login":"oleg-nenashev","id":3000480,"avatar_url":"https://avatars.githubusercontent.com/u/3000480?v=3","gravatar_id":"","url":"https://api.github.com/users/oleg-nenashev","html_url":"https://github.com/oleg-nenashev","followers_url":"https://api.github.com/users/oleg-nenashev/followers","following_url":"https://api.github.com/users/oleg-nenashev/following{/other_user}","gists_url":"https://api.github.com/users/oleg-nenashev/gists{/gist_id}","starred_url":"https://api.github.com/users/oleg-nenashev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oleg-nenashev/subscriptions","organizations_url":"https://api.github.com/users/oleg-nenashev/orgs","repos_url":"https://api.github.com/users/oleg-nenashev/repos","events_url":"https://api.github.com/users/oleg-nenashev/events{/privacy}","received_events_url":"https://api.github.com/users/oleg-nenashev/received_events","type":"User","site_admin":false},"body":"OK","created_at":"2015-08-10T14:36:43Z","updated_at":"2015-08-10T14:36:43Z","html_url":"https://github.com/jenkinsci/envinject-plugin/pull/57#discussion_r36637711","pull_request_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/57","_links":{"self":{"href":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/comments/36637711"},"html":{"href":"https://github.com/jenkinsci/envinject-plugin/pull/57#discussion_r36637711"},"pull_request":{"href":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/57"}}},"pull_request":{"url":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/57","id":41968032,"html_url":"https://github.com/jenkinsci/envinject-plugin/pull/57","diff_url":"https://github.com/jenkinsci/envinject-plugin/pull/57.diff","patch_url":"https://github.com/jenkinsci/envinject-plugin/pull/57.patch","issue_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/issues/57","number":57,"state":"open","locked":false,"title":"[JENKINS-29867] - Permissions engine + global option for disabling te Injected vars","user":{"login":"oleg-nenashev","id":3000480,"avatar_url":"https://avatars.githubusercontent.com/u/3000480?v=3","gravatar_id":"","url":"https://api.github.com/users/oleg-nenashev","html_url":"https://github.com/oleg-nenashev","followers_url":"https://api.github.com/users/oleg-nenashev/followers","following_url":"https://api.github.com/users/oleg-nenashev/following{/other_user}","gists_url":"https://api.github.com/users/oleg-nenashev/gists{/gist_id}","starred_url":"https://api.github.com/users/oleg-nenashev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oleg-nenashev/subscriptions","organizations_url":"https://api.github.com/users/oleg-nenashev/orgs","repos_url":"https://api.github.com/users/oleg-nenashev/repos","events_url":"https://api.github.com/users/oleg-nenashev/events{/privacy}","received_events_url":"https://api.github.com/users/oleg-nenashev/received_events","type":"User","site_admin":false},"body":"https://issues.jenkins-ci.org/browse/JENKINS-29867\r\n\r\nIn several cases Jenkins users may expose passwords as a plain text in \"Injected variables\" action (e.g. password reassigning for a non-sensitive variable). It may make sense to add an option, which completely prohibits the exposure of environment variables.\r\n\r\n- [x] - ViewVars permissions\r\n- [x] - Global option, which allows to hide envinject actions\r\n- [x] - Unit tests\r\n- [ ] - Bump the dependency on https://github.com/jenkinsci/envinject-lib after the release of https://github.com/jenkinsci/envinject-lib/pull/6\r\n\r\nDepends on https://github.com/jenkinsci/envinject-lib/pull/6\r\n\r\n@reviewbybees","created_at":"2015-08-09T09:50:22Z","updated_at":"2015-08-10T14:36:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e5fb80584f44fe4625cf052657fc9309a15105ac","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/57/commits","review_comments_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/57/comments","review_comment_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/issues/57/comments","statuses_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/statuses/6eccc48d05fe0d4561352b939577bfa2712b5c7c","head":{"label":"oleg-nenashev:JENKINS-29867-hide-envvars","ref":"JENKINS-29867-hide-envvars","sha":"6eccc48d05fe0d4561352b939577bfa2712b5c7c","user":{"login":"oleg-nenashev","id":3000480,"avatar_url":"https://avatars.githubusercontent.com/u/3000480?v=3","gravatar_id":"","url":"https://api.github.com/users/oleg-nenashev","html_url":"https://github.com/oleg-nenashev","followers_url":"https://api.github.com/users/oleg-nenashev/followers","following_url":"https://api.github.com/users/oleg-nenashev/following{/other_user}","gists_url":"https://api.github.com/users/oleg-nenashev/gists{/gist_id}","starred_url":"https://api.github.com/users/oleg-nenashev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oleg-nenashev/subscriptions","organizations_url":"https://api.github.com/users/oleg-nenashev/orgs","repos_url":"https://api.github.com/users/oleg-nenashev/repos","events_url":"https://api.github.com/users/oleg-nenashev/events{/privacy}","received_events_url":"https://api.github.com/users/oleg-nenashev/received_events","type":"User","site_admin":false},"repo":{"id":32486099,"name":"envinject-plugin","full_name":"oleg-nenashev/envinject-plugin","owner":{"login":"oleg-nenashev","id":3000480,"avatar_url":"https://avatars.githubusercontent.com/u/3000480?v=3","gravatar_id":"","url":"https://api.github.com/users/oleg-nenashev","html_url":"https://github.com/oleg-nenashev","followers_url":"https://api.github.com/users/oleg-nenashev/followers","following_url":"https://api.github.com/users/oleg-nenashev/following{/other_user}","gists_url":"https://api.github.com/users/oleg-nenashev/gists{/gist_id}","starred_url":"https://api.github.com/users/oleg-nenashev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oleg-nenashev/subscriptions","organizations_url":"https://api.github.com/users/oleg-nenashev/orgs","repos_url":"https://api.github.com/users/oleg-nenashev/repos","events_url":"https://api.github.com/users/oleg-nenashev/events{/privacy}","received_events_url":"https://api.github.com/users/oleg-nenashev/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/oleg-nenashev/envinject-plugin","description":"","fork":true,"url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin","forks_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/forks","keys_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/teams","hooks_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/hooks","issue_events_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/issues/events{/number}","events_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/events","assignees_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/assignees{/user}","branches_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/branches{/branch}","tags_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/tags","blobs_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/git/refs{/sha}","trees_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/statuses/{sha}","languages_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/languages","stargazers_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/stargazers","contributors_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/contributors","subscribers_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/subscribers","subscription_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/subscription","commits_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/commits{/sha}","git_commits_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/git/commits{/sha}","comments_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/comments{/number}","issue_comment_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/issues/comments{/number}","contents_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/contents/{+path}","compare_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/merges","archive_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/downloads","issues_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/issues{/number}","pulls_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/pulls{/number}","milestones_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/milestones{/number}","notifications_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/labels{/name}","releases_url":"https://api.github.com/repos/oleg-nenashev/envinject-plugin/releases{/id}","created_at":"2015-03-18T21:46:06Z","updated_at":"2015-03-18T21:46:07Z","pushed_at":"2015-08-10T11:22:51Z","git_url":"git://github.com/oleg-nenashev/envinject-plugin.git","ssh_url":"git@github.com:oleg-nenashev/envinject-plugin.git","clone_url":"https://github.com/oleg-nenashev/envinject-plugin.git","svn_url":"https://github.com/oleg-nenashev/envinject-plugin","homepage":"","size":748,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"jenkinsci:master","ref":"master","sha":"abca0ed5091ed50d2f2fe5395607f72df86949ff","user":{"login":"jenkinsci","id":107424,"avatar_url":"https://avatars.githubusercontent.com/u/107424?v=3","gravatar_id":"","url":"https://api.github.com/users/jenkinsci","html_url":"https://github.com/jenkinsci","followers_url":"https://api.github.com/users/jenkinsci/followers","following_url":"https://api.github.com/users/jenkinsci/following{/other_user}","gists_url":"https://api.github.com/users/jenkinsci/gists{/gist_id}","starred_url":"https://api.github.com/users/jenkinsci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jenkinsci/subscriptions","organizations_url":"https://api.github.com/users/jenkinsci/orgs","repos_url":"https://api.github.com/users/jenkinsci/repos","events_url":"https://api.github.com/users/jenkinsci/events{/privacy}","received_events_url":"https://api.github.com/users/jenkinsci/received_events","type":"Organization","site_admin":false},"repo":{"id":2059304,"name":"envinject-plugin","full_name":"jenkinsci/envinject-plugin","owner":{"login":"jenkinsci","id":107424,"avatar_url":"https://avatars.githubusercontent.com/u/107424?v=3","gravatar_id":"","url":"https://api.github.com/users/jenkinsci","html_url":"https://github.com/jenkinsci","followers_url":"https://api.github.com/users/jenkinsci/followers","following_url":"https://api.github.com/users/jenkinsci/following{/other_user}","gists_url":"https://api.github.com/users/jenkinsci/gists{/gist_id}","starred_url":"https://api.github.com/users/jenkinsci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jenkinsci/subscriptions","organizations_url":"https://api.github.com/users/jenkinsci/orgs","repos_url":"https://api.github.com/users/jenkinsci/repos","events_url":"https://api.github.com/users/jenkinsci/events{/privacy}","received_events_url":"https://api.github.com/users/jenkinsci/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/jenkinsci/envinject-plugin","description":"","fork":false,"url":"https://api.github.com/repos/jenkinsci/envinject-plugin","forks_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/forks","keys_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/teams","hooks_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/hooks","issue_events_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/issues/events{/number}","events_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/events","assignees_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/assignees{/user}","branches_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/branches{/branch}","tags_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/tags","blobs_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/git/refs{/sha}","trees_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/statuses/{sha}","languages_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/languages","stargazers_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/stargazers","contributors_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/contributors","subscribers_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/subscribers","subscription_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/subscription","commits_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/commits{/sha}","git_commits_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/git/commits{/sha}","comments_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/comments{/number}","issue_comment_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/issues/comments{/number}","contents_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/contents/{+path}","compare_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/merges","archive_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/downloads","issues_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/issues{/number}","pulls_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls{/number}","milestones_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/milestones{/number}","notifications_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/labels{/name}","releases_url":"https://api.github.com/repos/jenkinsci/envinject-plugin/releases{/id}","created_at":"2011-07-16T20:09:41Z","updated_at":"2015-06-03T13:30:19Z","pushed_at":"2015-08-10T11:22:51Z","git_url":"git://github.com/jenkinsci/envinject-plugin.git","ssh_url":"git@github.com:jenkinsci/envinject-plugin.git","clone_url":"https://github.com/jenkinsci/envinject-plugin.git","svn_url":"https://github.com/jenkinsci/envinject-plugin","homepage":"","size":1432,"stargazers_count":23,"watchers_count":23,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":61,"mirror_url":null,"open_issues_count":11,"forks":61,"open_issues":11,"watchers":23,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/57"},"html":{"href":"https://github.com/jenkinsci/envinject-plugin/pull/57"},"issue":{"href":"https://api.github.com/repos/jenkinsci/envinject-plugin/issues/57"},"comments":{"href":"https://api.github.com/repos/jenkinsci/envinject-plugin/issues/57/comments"},"review_comments":{"href":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/57/comments"},"review_comment":{"href":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jenkinsci/envinject-plugin/pulls/57/commits"},"statuses":{"href":"https://api.github.com/repos/jenkinsci/envinject-plugin/statuses/6eccc48d05fe0d4561352b939577bfa2712b5c7c"}}}}