Kubernetes secrets, base64, and newline
When creating a k8s secret manually, using command like this you need to provide base64
encoded secret. Never forget to use -w 0
when encoding the string.
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: github
type: Opaque
data:
access_token: ACCESS_TOKEN
EOF
Recently I forgot the -w 0
in base64
command and spent too much time troubleshooting it. It seems to be a common issue:
https://superuser.com/questions/1225134/why-does-the-base64-of-a-string-contain-n
Yes, I logged the access token from the app to validate it. I used %v
qualifier to do it and access token was the last argument. Looking back I should have used %q
instead or have it in the middle of the log string. But I didn’t. So I resolved it a hard way.
I ended up logging the headers of http requests. Here is how I did it.
First, implement the logging round tripper:
// This type implements the http.RoundTripper interface
type LoggingRoundTripper struct {
Proxy http.RoundTripper
}
func (lrt LoggingRoundTripper) RoundTrip(req *http.Request) (res *http.Response, e error) {
fmt.Printf("Sending request to: %v\n", req.URL)
fmt.Printf("With headers: %+v\n", req.Header)
return lrt.Proxy.RoundTrip(req)
}
Then use the http client configured with the above round tripper with oauth2
client:
// Use the custom HTTP client when requesting a token.
httpClient := &http.Client{
Transport: LoggingRoundTripper{http.DefaultTransport},
}
ctx := context.Background()
ctx = context.WithValue(ctx, oauth2.HTTPClient, httpClient)
ts := oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: access_token},
)
tc := oauth2.NewClient(ctx, ts)
client := github.NewClient(tc)
Interestingly, the fact that this is working may not be aligned with the documentation: https://pkg.go.dev/golang.org/x/oauth2#NewClient. Docs says:
Note that if a custom *http.Client is provided via the Context it is used only for token acquisition and is not used to configure the *http.Client returned from NewClient.
Apparently it is already reported: https://github.com/golang/oauth2/issues/324. Maybe this post will be irrelevant soon. But it is working now.
Comments
comments powered by Disqus