1 // Copyright 2012 Google LLC. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4 5 // Package transport contains HTTP transports used to make
6 // authenticated API requests.
7 //
8 // This package is DEPRECATED. Users should instead use,
9 //
10 // service, err := NewService(..., option.WithAPIKey(...))
11 package transport
12 13 import (
14 "errors"
15 "net/http"
16 )
17 18 // APIKey is an HTTP Transport which wraps an underlying transport and
19 // appends an API Key "key" parameter to the URL of outgoing requests.
20 //
21 // Deprecated: please use NewService(..., option.WithAPIKey(...)) instead.
22 type APIKey struct {
23 // Key is the API Key to set on requests.
24 Key string
25 26 // Transport is the underlying HTTP transport.
27 // If nil, http.DefaultTransport is used.
28 Transport http.RoundTripper
29 }
30 31 func (t *APIKey) RoundTrip(req *http.Request) (*http.Response, error) {
32 rt := t.Transport
33 if rt == nil {
34 rt = http.DefaultTransport
35 if rt == nil {
36 return nil, errors.New("googleapi/transport: no Transport specified or available")
37 }
38 }
39 newReq := *req
40 args := newReq.URL.Query()
41 args.Set("key", t.Key)
42 newReq.URL.RawQuery = args.Encode()
43 return rt.RoundTrip(&newReq)
44 }
45