Hrm, sadly there doesn't seem to be a nice client library for this API like there are for a lot of the cloud APIs...
Regardless, the various Credential <http://javadoc.google-oauth-java-client.googlecode.com/hg/1.8.0-beta/com/google/api/client/auth/oauth2/Credential.html?is-external=true> objects implement HttpRequestInitializer <http://javadoc.google-http-java-client.googlecode.com/hg/1.8.3-beta/com/google/api/client/http/HttpRequestInitializer.html?is-external=true>. Translation: they understand how to annotate HttpRequests <http://javadoc.google-http-java-client.googlecode.com/hg/1.8.3-beta/com/google/api/client/http/HttpRequest.html> with: -H "Authorization: Bearer $TOKEN" \ Here is some sample code <https://github.com/jenkinsci/google-oauth-plugin/blob/master/src/main/java/com/google/jenkins/plugins/util/MetadataReader.java> that deals with raw HttpRequests in the oauth2 plugin as a start, although it doesn't use credentials or POST. I *think* the code you are going to want in a plugin is going to look something like (beware, I have not tested this code in any way): HttpRequestFactory requestFactory = new NetHttpTransport().createRequestFactory(*{insert Credential}*); // Handles loading the file properly with remoting, but proxies thru the master. // By comparison, Storage uploads directly from the slave, to decrease load on // the master, but the code for that is a bit trickier to get right, and this is // a fine starting point. InputStreamContent content = new InputStreamContent(); content.inputStream = filePath.read(); content.type = "*{fill in mime type}*"; HttpRequest request = requestFactory.buildPostRequest( new GenericUrl(" https://www.googleapis.com/upload/chromewebstore/v1.1/items"), content); request.getHeaders().set("x-goog-api-version", 2); // Where the magic happens request.execute(); There are also pretty good facilities in place for mocking out HttpRequest, just factor the above code in your plugin such that HttpRequestFactory can be passed in, and you should be able to write decent tests. For factoring, see how the aforementioned sample code <https://github.com/jenkinsci/google-oauth-plugin/blob/master/src/main/java/com/google/jenkins/plugins/util/MetadataReader.java#L77> structures things, and how its tests look <https://github.com/jenkinsci/google-oauth-plugin/blob/master/src/test/java/com/google/jenkins/plugins/util/MetadataReaderTest.java>. Also, there is a fair amount of overlap with the storage plugin, if you ignore the fact that it has a nice client library. If you do head down the path of writing the plugin, please let me know and I'd be happy to give you pointers and help review the code (or loop in a suitable surrogate). thanks, and hopefully this is helpful. -M On Sat, Sep 27, 2014 at 11:27 PM, Calvin <[email protected]> wrote: > Ok sorry, I'm fairly new to using Google's API and Jenkins and I think I > see where my confusion lies, I was thinking that the Google OAuth Plugin > automatically provides the scopes, however after relooking at > https://wiki.jenkins-ci.org/display/JENKINS/Google+OAuth+Plugin, I > realize that this plugin just provides the Google service account options > that I can associate to Jenkins and then I would need to probably implement > another plugin like the GoogleCloudStorage that exposes the scopes needed > to access the Chrome Web Store APIs. I want to be able to do something > like the following within Jenkins as a post process to automatically > publish/update a Chrome extension we've developed directly to the Chrome > Store, > > > curl \-H "Authorization: Bearer $TOKEN" \-H "x-goog-api-version: 2" \-X > > POST \-T $FILE_NAME \-v \ > https://www.googleapis.com/upload/chromewebstore/v1.1/items > > > On Saturday, September 27, 2014 9:58:57 PM UTC-7, Matthew Moore wrote: >> >> I assume you are building a plugin to access this API, using an OAuth2 >> credential? Otherwise, I'll probably need some more context on how you >> plan to wire things up... >> >> >> If you are building such a plugin you should look at how the Google Cloud >> Storage plugin specifies its OAuth2 scope requirement: https://github. >> com/jenkinsci/google-storage-plugin/blob/master/src/main/ >> java/com/google/jenkins/plugins/storage/GoogleCloudStorageUploader. >> java#L51 >> >> Putting an appropriately constructed @RequiresDomain on any describable >> (e.g. Publishers) will make the error you are seeing go away. As I said >> (more tersely) before, we scan for these annotations to dynamically >> populate the pertinent set of scopes for installed plugins. >> >> >> >> >> Specifically, you are going to want to define: >> public class ChromeWebStoreScopeRequirement extends >> GoogleOAuth2ScopeRequirement { >> >> which returns the scope you list, similar to StorageScopeRequirement >> <https://github.com/jenkinsci/google-storage-plugin/blob/master/src/main/java/com/google/jenkins/plugins/storage/StorageScopeRequirement.java>, >> then annotate something like this: >> @RequiresDomain(value = ChromeWebStoreScopeRequirement.class) >> public class ChromeWebStorePublisher extends Recorder { >> >> >> or maybe I am completely misunderstanding your intent... Hope that helps. >> -M >> >> >> >> On Fri, Sep 26, 2014 at 9:51 AM, Calvin <[email protected]> wrote: >> >>> Hi Matt, >>> >>> I have both the Google OAuth Plugin as well as the OAuth Credential >>> Plugin installed and enabled. The scope I'm needing specifically from the >>> Google OAuth Plugin is, scope=https://www.googleapis.com/auth/ >>> chromewebstore to use this API, https://developer.chrome. >>> com/webstore/using_webstore_api >>> >>> >>> <https://lh4.googleusercontent.com/-JiykxSQwKIg/VCWZhx-P5UI/AAAAAAAAAeA/tq0xSrvd-mQ/s1600/Screen%2BShot%2B2014-09-26%2Bat%2B9.48.06%2BAM.png> >>> >>> On Friday, September 26, 2014 9:35:35 AM UTC-7, Matthew Moore wrote: >>>> >>>> What plugins do you have installed that require OAuth? This plugin >>>> dynamically determines the set of OAuth scopes that might be required by >>>> installed plugins, to allow you to pick and choose which should be allowed >>>> for a given credential. >>>> >>>> Try installing google-storage-plugin, for example, and the storage >>>> scope should show up where you currently have that error message. >>>> >>>> >>>> LMK if you are expecting something to show up, which isn't. >>>> -M >>>> >>>> On Thu, Sep 25, 2014 at 11:04 PM, Calvin <[email protected]> >>>> wrote: >>>> >>>>> Just installed the Google OAuth Plugin into Jenkins in addition to >>>>> having the OAuth Credential Plugin, and upon configuring a new credential >>>>> domain neither plugins load the Google OAuth scopes. Anybody experience >>>>> this before? >>>>> >>>>> >>>>> <https://lh5.googleusercontent.com/-h5XOtXgqPrM/VCUB1xLwcdI/AAAAAAAAAdw/VgS-687r3c4/s1600/Screen%2BShot%2B2014-09-25%2Bat%2B5.33.34%2BPM.png> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Jenkins Developers" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> >>>> >>>> -- >>>> Matthew Moore >>>> DI/Docker (aka Convoy) >>>> Developer Infrastructure @ Google >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Jenkins Developers" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> >> -- >> Matthew Moore >> DI/Docker (aka Convoy) >> Developer Infrastructure @ Google >> > -- > You received this message because you are subscribed to the Google Groups > "Jenkins Developers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- Matthew Moore DI/Docker (aka Convoy) Developer Infrastructure @ Google -- You received this message because you are subscribed to the Google Groups "Jenkins Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
