Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-24631

Credentials store API cannot browse into domains

    XMLWordPrintable

Details

    Description

      When using the API for the credentials store it is not possible to directly browse into all domains via the depth request parameter. Accessing https://example.com/credential-store/api/xml results in the follwing useless document:

      <userFacingAction>
      <store/>
      </userFacingAction>
      

      And giving any depth parameter like https://example.com/credential-store/api/xml?depth=1 results in an exception:

      javax.servlet.ServletException: java.lang.IllegalArgumentException: wrong number of arguments
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:778)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
      	at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:210)
      	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
      	at org.kohsuke.stapler.MetaClass$12.dispatch(MetaClass.java:390)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:631)
      	at org.kohsuke.stapler.Stapler.service(Stapler.java:225)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
      	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
      	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96)
      	at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
      	at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
      	at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at jenkins.security.ApiTokenFilter.doFilter(ApiTokenFilter.java:74)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
      	at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
      	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
      	at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
      	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
      	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
      	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
      	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
      	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
      	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
      	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
      	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
      	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
      	at org.eclipse.jetty.server.Server.handle(Server.java:370)
      	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
      	at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
      	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
      	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
      	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
      	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
      	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
      	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
      	at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      	at java.lang.Thread.run(Thread.java:745)
      Caused by: java.lang.IllegalArgumentException: wrong number of arguments
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:606)
      	at org.kohsuke.stapler.export.MethodProperty.getValue(MethodProperty.java:66)
      	at org.kohsuke.stapler.export.Property.writeTo(Property.java:114)
      	at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:187)
      	at org.kohsuke.stapler.export.Property.writeValue(Property.java:232)
      	at org.kohsuke.stapler.export.Property.writeValue(Property.java:137)
      	at org.kohsuke.stapler.export.Property.writeTo(Property.java:114)
      	at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:187)
      	at org.kohsuke.stapler.export.Model.writeTo(Model.java:154)
      	at org.kohsuke.stapler.ResponseImpl.serveExposedBean(ResponseImpl.java:267)
      	at hudson.model.Api.doXml(Api.java:97)
      	at sun.reflect.GeneratedMethodAccessor928.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:606)
      	at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:298)
      	at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161)
      	at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)
      	at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:120)
      	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
      	... 66 more
      

      Attachments

        Issue Links

          Activity

            danielbeck Daniel Beck added a comment -

            Confirmed on Jenkins 1.565.2 with Credentials 1.16.1, SSH Credentials 1.19.

            danielbeck Daniel Beck added a comment - Confirmed on Jenkins 1.565.2 with Credentials 1.16.1, SSH Credentials 1.19.
            jglick Jesse Glick added a comment -

            The IllegalArgumentException is clearly a bug. Nonetheless, you should never use the depth parameter. Use tree to select the fields you are interested in.

            jglick Jesse Glick added a comment - The IllegalArgumentException is clearly a bug. Nonetheless, you should never use the depth parameter. Use tree to select the fields you are interested in.

            What do you mean be tree?

            languitar Johannes Wienke added a comment - What do you mean be tree?
            jglick Jesse Glick added a comment -

            languitar read the documentation provided on the page shown when you click REST API.

            jglick Jesse Glick added a comment - languitar read the documentation provided on the page shown when you click REST API .

            Right, but this wouldn't have helped here to actually find out how the document structure looks like? I mean, I first have to use depth to actually see what is available, or is there anything else that I can do?

            languitar Johannes Wienke added a comment - Right, but this wouldn't have helped here to actually find out how the document structure looks like? I mean, I first have to use depth to actually see what is available, or is there anything else that I can do?
            danielbeck Daniel Beck added a comment -

            Agree with Johannes; use of tree is only reasonably possible once you've learned the structure in depth.

            danielbeck Daniel Beck added a comment - Agree with Johannes; use of tree is only reasonably possible once you've learned the structure in depth .
            jglick Jesse Glick added a comment -

            You can also inspect source code. But yes, fixing the exception would make it easier.

            jglick Jesse Glick added a comment - You can also inspect source code. But yes, fixing the exception would make it easier.

            Any progress on this? We desperately need this. Or is there any way to access the required attributes with the tree parameter?

            languitar Johannes Wienke added a comment - Any progress on this? We desperately need this. Or is there any way to access the required attributes with the tree parameter?

            Code changed in jenkins
            User: Stephen Connolly
            Path:
            src/main/java/com/cloudbees/plugins/credentials/CredentialsStoreAction.java
            src/main/java/com/cloudbees/plugins/credentials/ViewCredentialsAction.java
            http://jenkins-ci.org/commit/credentials-plugin/3d2779ec7e2f84e8aa64546ee8be7065180c7ecb
            Log:
            [FIXED JENKINS-24631] Expose the credentials details by the XML/JSON API

            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/java/com/cloudbees/plugins/credentials/CredentialsStoreAction.java src/main/java/com/cloudbees/plugins/credentials/ViewCredentialsAction.java http://jenkins-ci.org/commit/credentials-plugin/3d2779ec7e2f84e8aa64546ee8be7065180c7ecb Log: [FIXED JENKINS-24631] Expose the credentials details by the XML/JSON API
            jglick Jesse Glick added a comment -

            JIRA link daemon again thinking that filing a PR from origin is the same as merging it…

            jglick Jesse Glick added a comment - JIRA link daemon again thinking that filing a PR from origin is the same as merging it…

            Code changed in jenkins
            User: Stephen Connolly
            Path:
            src/test/java/com/cloudbees/plugins/credentials/CredentialsStoreActionTest.java
            src/test/java/com/cloudbees/plugins/credentials/ViewCredentialsActionTest.java
            http://jenkins-ci.org/commit/credentials-plugin/5ca10d7c5553211976a7aa9358834c4e0908548a
            Log:
            JENKINS-24631 Add some smoke tests

            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/test/java/com/cloudbees/plugins/credentials/CredentialsStoreActionTest.java src/test/java/com/cloudbees/plugins/credentials/ViewCredentialsActionTest.java http://jenkins-ci.org/commit/credentials-plugin/5ca10d7c5553211976a7aa9358834c4e0908548a Log: JENKINS-24631 Add some smoke tests

            Code changed in jenkins
            User: Stephen Connolly
            Path:
            src/main/java/com/cloudbees/plugins/credentials/CredentialsStoreAction.java
            src/main/java/com/cloudbees/plugins/credentials/ViewCredentialsAction.java
            src/test/java/com/cloudbees/plugins/credentials/CredentialsStoreActionTest.java
            src/test/java/com/cloudbees/plugins/credentials/ViewCredentialsActionTest.java
            http://jenkins-ci.org/commit/credentials-plugin/defdd841cd63f621b3ae174269209cb93ec8bea6
            Log:
            Merge pull request #54 from jenkinsci/jenkins-24631

            [FIXED JENKINS-24631] Expose the credentials details by the XML/JSON API

            Compare: https://github.com/jenkinsci/credentials-plugin/compare/56b97517685e...defdd841cd63

            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/java/com/cloudbees/plugins/credentials/CredentialsStoreAction.java src/main/java/com/cloudbees/plugins/credentials/ViewCredentialsAction.java src/test/java/com/cloudbees/plugins/credentials/CredentialsStoreActionTest.java src/test/java/com/cloudbees/plugins/credentials/ViewCredentialsActionTest.java http://jenkins-ci.org/commit/credentials-plugin/defdd841cd63f621b3ae174269209cb93ec8bea6 Log: Merge pull request #54 from jenkinsci/jenkins-24631 [FIXED JENKINS-24631] Expose the credentials details by the XML/JSON API Compare: https://github.com/jenkinsci/credentials-plugin/compare/56b97517685e...defdd841cd63

            People

              stephenconnolly Stephen Connolly
              languitar Johannes Wienke
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: