Druxtan
Druxtan

Reputation: 1329

Service account, App engine, Go, Google APIs

I try to connect to drive with a service account.

Actually I have

        c := appengine.NewContext(r)
        key, err := ioutil.ReadFile("key/key.pem")
        if err != nil {
            w.WriteHeader(http.StatusInternalServerError)
            c.Errorf("Pem file not found")
            return
        }
        config := &jwt.Config{
            Email: "[email protected]",
            PrivateKey: key,
            Scopes: []string{
                "https://www.googleapis.com/auth/drive",
            },
            TokenURL: google.JWTTokenURL,
        }

        client := config.Client(oauth2.NoContext)
        service, err := drive.New(client)
        if (err != nil) {
            w.WriteHeader(http.StatusInternalServerError)
            c.Errorf("Service connection not works")
            return
        }
        about, err := service.About.Get().Do()
        if (err != nil) {
            w.WriteHeader(http.StatusInternalServerError)
            c.Errorf(err.Error())
            return
        }
        c.Infof(about.Name)

That I found here : https://github.com/golang/oauth2/blob/master/google/example_test.go

Of course it doesn't work, I have to use urlfetch, but I don't know how... The error I get is "ERROR: Get https://www.googleapis.com/drive/v2/about?alt=json: oauth2: cannot fetch token: Post https://accounts.google.com/o/oauth2/token: not an App Engine context"

How I can do?

Thank you.

Upvotes: 1

Views: 898

Answers (1)

lgr
lgr

Reputation: 21

There are two Go packages for Google App Engine: appengine and google.golang.org/appengine.

The first one uses appengine.Context that is not compatible with the context.Context used by the oauth2 packages. You need to import the second one to google.golang.org/appengine.

Also, change client := config.Client(oauth2.NoContext) to client := config.Client(c).

Upvotes: 1

Related Questions