Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
| 2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
| 3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
| 4 | 4 |
| 5 package info | 5 package info |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "strings" | |
| 8 "time" | 9 "time" |
| 9 | 10 |
| 10 "golang.org/x/net/context" | 11 "golang.org/x/net/context" |
| 11 ) | 12 ) |
| 12 | 13 |
| 13 // RawInterface is the interface for all of the package methods which normally | 14 // RawInterface is the interface for all of the package methods which normally |
| 14 // would be in the 'appengine' package. | 15 // would be in the 'appengine' package. |
| 15 type RawInterface interface { | 16 type RawInterface interface { |
| 16 AppID() string | 17 AppID() string |
| 17 FullyQualifiedAppID() string | 18 FullyQualifiedAppID() string |
| 18 » GetNamespace() (string, bool) | 19 » GetNamespace() string |
| 19 | 20 |
| 20 Datacenter() string | 21 Datacenter() string |
| 21 DefaultVersionHostname() string | 22 DefaultVersionHostname() string |
| 22 InstanceID() string | 23 InstanceID() string |
| 23 IsDevAppServer() bool | 24 IsDevAppServer() bool |
| 24 IsOverQuota(err error) bool | 25 IsOverQuota(err error) bool |
| 25 IsTimeoutError(err error) bool | 26 IsTimeoutError(err error) bool |
| 26 ModuleHostname(module, version, instance string) (string, error) | 27 ModuleHostname(module, version, instance string) (string, error) |
| 27 ModuleName() string | 28 ModuleName() string |
| 28 RequestID() string | 29 RequestID() string |
| 29 ServerSoftware() string | 30 ServerSoftware() string |
| 30 ServiceAccount() (string, error) | 31 ServiceAccount() (string, error) |
| 31 VersionID() string | 32 VersionID() string |
| 32 | 33 |
| 33 Namespace(namespace string) (context.Context, error) | 34 Namespace(namespace string) (context.Context, error) |
| 34 | 35 |
| 35 AccessToken(scopes ...string) (token string, expiry time.Time, err error ) | 36 AccessToken(scopes ...string) (token string, expiry time.Time, err error ) |
| 36 PublicCertificates() ([]Certificate, error) | 37 PublicCertificates() ([]Certificate, error) |
| 37 SignBytes(bytes []byte) (keyName string, signature []byte, err error) | 38 SignBytes(bytes []byte) (keyName string, signature []byte, err error) |
| 38 | 39 |
| 39 » // Testable returns this Interface's Testable interface. Testing will re turn | 40 » // Testable returns this RawInterface's Testing interface. Testing will |
| 40 » // nil if testing is not supported in this implementation. | 41 » // return nil if testing is not supported in this implementation. |
| 41 » Testable() Testable | 42 » GetTestable() Testable |
| 42 } | |
| 43 | |
| 44 // Interface is the interface for all of the package methods which normally | |
| 45 // would be in the 'appengine' package. This version adds a couple helper | |
| 46 // functions on top of the RawInterface. | |
| 47 type Interface interface { | |
|
dnj
2016/09/01 15:25:40
Gone.
| |
| 48 » RawInterface | |
| 49 | |
| 50 » // TrimmedAppID gets the 'appid' portion of "foo.com:appid". This form c an | |
| 51 » // occur if you use | |
| 52 » TrimmedAppID() string | |
| 53 | |
| 54 » // MustNamespace is the same as Namespace, but will panic if there's an error. | |
| 55 » // Since an error can only occur if namespace doesn't match the a regex this | |
| 56 » // is valid to use if the namespace you're using is statically known, or known | |
| 57 » // to conform to the regex. The regex in question is: | |
| 58 » // | |
| 59 » // ^[0-9A-Za-z._-]{0,100}$ | |
| 60 » MustNamespace(namespace string) context.Context | |
| 61 } | 43 } |
| 62 | 44 |
| 63 // Testable is an additional set of functions for testing instrumentation. | 45 // Testable is an additional set of functions for testing instrumentation. |
| 64 type Testable interface { | 46 type Testable interface { |
| 65 SetVersionID(string) context.Context | 47 SetVersionID(string) context.Context |
| 66 SetRequestID(string) context.Context | 48 SetRequestID(string) context.Context |
| 67 } | 49 } |
| 50 | |
|
dnj
2016/09/01 15:25:40
Top-level, transplant from wrapper.go.
| |
| 51 // AppID returns the current App ID. | |
| 52 func AppID(c context.Context) string { | |
| 53 return Raw(c).AppID() | |
| 54 } | |
| 55 | |
| 56 // TrimmedAppID gets the 'appid' portion of "foo.com:appid". This form can | |
| 57 // occur if you use | |
| 58 func TrimmedAppID(c context.Context) string { | |
| 59 toks := strings.Split(AppID(c), ":") | |
| 60 return toks[len(toks)-1] | |
| 61 } | |
| 62 | |
| 63 // FullyQualifiedAppID returns the fully-qualified App ID. | |
| 64 func FullyQualifiedAppID(c context.Context) string { | |
| 65 return Raw(c).FullyQualifiedAppID() | |
| 66 } | |
| 67 | |
| 68 // GetNamespace returns the current namespace. If the current namespace is the | |
| 69 // default namespace, GetNamespace will return an empty string. | |
| 70 func GetNamespace(c context.Context) string { | |
| 71 return Raw(c).GetNamespace() | |
| 72 } | |
| 73 | |
| 74 // Datacenter returns the current datacenter. | |
| 75 func Datacenter(c context.Context) string { | |
| 76 return Raw(c).Datacenter() | |
| 77 } | |
| 78 | |
| 79 // DefaultVersionHostname returns the default version hostname. | |
| 80 func DefaultVersionHostname(c context.Context) string { | |
| 81 return Raw(c).DefaultVersionHostname() | |
| 82 } | |
| 83 | |
| 84 // InstanceID returns the current instance ID. | |
| 85 func InstanceID(c context.Context) string { | |
| 86 return Raw(c).InstanceID() | |
| 87 } | |
| 88 | |
| 89 // IsDevAppServer returns true if running on a development server. | |
| 90 func IsDevAppServer(c context.Context) bool { | |
| 91 return Raw(c).IsDevAppServer() | |
| 92 } | |
| 93 | |
| 94 // IsOverQuota returns true if the supplied error is an over quota error. | |
| 95 func IsOverQuota(c context.Context, err error) bool { | |
| 96 return Raw(c).IsOverQuota(err) | |
| 97 } | |
| 98 | |
| 99 // IsTimeoutError returns true if the supplied error indicates a timeout. | |
| 100 func IsTimeoutError(c context.Context, err error) bool { | |
| 101 return Raw(c).IsTimeoutError(err) | |
| 102 } | |
| 103 | |
| 104 // ModuleHostname returns the hostname of a module instance. | |
| 105 func ModuleHostname(c context.Context, module, version, instance string) (string , error) { | |
| 106 return Raw(c).ModuleHostname(module, version, instance) | |
| 107 } | |
| 108 | |
| 109 // ModuleName returns the current module name. | |
| 110 func ModuleName(c context.Context) string { | |
| 111 return Raw(c).ModuleName() | |
| 112 } | |
| 113 | |
| 114 // RequestID returns the current request ID. | |
| 115 func RequestID(c context.Context) string { | |
| 116 return Raw(c).RequestID() | |
| 117 } | |
| 118 | |
| 119 // ServerSoftware returns the AppEngine release version. | |
| 120 func ServerSoftware(c context.Context) string { | |
| 121 return Raw(c).ServerSoftware() | |
| 122 } | |
| 123 | |
| 124 // ServiceAccount returns the current service account name, in the form of an | |
| 125 // e-mail address. | |
| 126 func ServiceAccount(c context.Context) (string, error) { | |
| 127 return Raw(c).ServiceAccount() | |
| 128 } | |
| 129 | |
| 130 // VersionID returns the version ID for the current application, in the form | |
| 131 // "X.Y". | |
| 132 func VersionID(c context.Context) string { | |
| 133 return Raw(c).VersionID() | |
| 134 } | |
| 135 | |
| 136 // Namespace sets the current namespace. If the namespace is invalid or could | |
| 137 // not be set, an error will be returned. | |
| 138 func Namespace(c context.Context, namespace string) (context.Context, error) { | |
| 139 return Raw(c).Namespace(namespace) | |
| 140 } | |
| 141 | |
| 142 // MustNamespace is the same as Namespace, but will panic if there's an error. | |
| 143 // Since an error can only occur if namespace doesn't match the a regex this | |
| 144 // is valid to use if the namespace you're using is statically known, or known | |
| 145 // to conform to the regex. The regex in question is: | |
| 146 // | |
| 147 // ^[0-9A-Za-z._-]{0,100}$ | |
| 148 func MustNamespace(c context.Context, namespace string) context.Context { | |
| 149 ret, err := Namespace(c, namespace) | |
| 150 if err != nil { | |
| 151 panic(err) | |
| 152 } | |
| 153 return ret | |
| 154 } | |
| 155 | |
| 156 // AccessToken generates an OAuth2 access token for the specified scopes | |
| 157 // on behalf of the current ServiceAccount. | |
| 158 func AccessToken(c context.Context, scopes ...string) (token string, expiry time .Time, err error) { | |
| 159 return Raw(c).AccessToken(scopes...) | |
| 160 } | |
| 161 | |
| 162 // PublicCertificates retrieves the public certificates of the app. | |
| 163 func PublicCertificates(c context.Context) ([]Certificate, error) { | |
| 164 return Raw(c).PublicCertificates() | |
| 165 } | |
| 166 | |
| 167 // SignBytes signs bytes using the application's unique private key. | |
| 168 func SignBytes(c context.Context, bytes []byte) (keyName string, signature []byt e, err error) { | |
| 169 return Raw(c).SignBytes(bytes) | |
| 170 } | |
| 171 | |
| 172 // GetTestable returns this Interface's Testing interface. Testing will return | |
| 173 // nil if testing is not supported in this implementation. | |
| 174 func GetTestable(c context.Context) Testable { | |
| 175 return Raw(c).GetTestable() | |
| 176 } | |
| OLD | NEW |