As we reevaluate how to best support and maintain Staging Ref in the future, we encourage development teams using this environment to highlight their use cases in the following issue: https://gitlab.com/gitlab-com/gl-infra/software-delivery/framework/software-delivery-framework-issue-tracker/-/issues/36.

Skip to content
Snippets Groups Projects
Commit 558e0277 authored by Ash McKenzie's avatar Ash McKenzie
Browse files

Merge branch 'id-fix-jwt-tokens' into 'main'

parents adde391b 6efd7694
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -20,7 +20,7 @@ import (
)
var (
secret = []byte("sssh, it's a secret")
secret = "sssh, it's a secret"
)
func TestClients(t *testing.T) {
Loading
Loading
@@ -31,24 +31,29 @@ func TestClients(t *testing.T) {
relativeURLRoot string
caFile string
server func(*testing.T, []testserver.TestRequestHandler) string
secret string
}{
{
desc: "Socket client",
server: testserver.StartSocketHttpServer,
secret: secret,
},
{
desc: "Socket client with a relative URL at /",
relativeURLRoot: "/",
server: testserver.StartSocketHttpServer,
secret: secret,
},
{
desc: "Socket client with relative URL at /gitlab",
relativeURLRoot: "/gitlab",
server: testserver.StartSocketHttpServer,
secret: secret,
},
{
desc: "Http client",
server: testserver.StartHttpServer,
secret: secret,
},
{
desc: "Https client",
Loading
Loading
@@ -56,6 +61,15 @@ func TestClients(t *testing.T) {
server: func(t *testing.T, handlers []testserver.TestRequestHandler) string {
return testserver.StartHttpsServer(t, handlers, "")
},
secret: secret,
},
{
desc: "Secret with newlines",
caFile: path.Join(testhelper.TestRoot, "certs/valid/server.crt"),
server: func(t *testing.T, handlers []testserver.TestRequestHandler) string {
return testserver.StartHttpsServer(t, handlers, "")
},
secret: "\n" + secret + "\n",
},
}
Loading
Loading
@@ -66,7 +80,7 @@ func TestClients(t *testing.T) {
httpClient, err := NewHTTPClientWithOpts(url, tc.relativeURLRoot, tc.caFile, "", 1, nil)
require.NoError(t, err)
client, err := NewGitlabNetClient("", "", string(secret), httpClient)
client, err := NewGitlabNetClient("", "", tc.secret, httpClient)
require.NoError(t, err)
testBrokenRequest(t, client)
Loading
Loading
@@ -74,7 +88,7 @@ func TestClients(t *testing.T) {
testSuccessfulPost(t, client)
testMissing(t, client)
testErrorMessage(t, client)
testAuthenticationHeader(t, client)
testAuthenticationHeader(t, tc.secret, client)
testJWTAuthenticationHeader(t, client)
testXForwardedForHeader(t, client)
testHostWithTrailingSlash(t, client)
Loading
Loading
@@ -154,7 +168,7 @@ func testBrokenRequest(t *testing.T, client *GitlabNetClient) {
})
}
func testAuthenticationHeader(t *testing.T, client *GitlabNetClient) {
func testAuthenticationHeader(t *testing.T, secret string, client *GitlabNetClient) {
t.Run("Authentication headers for GET", func(t *testing.T) {
response, err := client.Get(context.Background(), "/auth")
require.NoError(t, err)
Loading
Loading
@@ -167,7 +181,7 @@ func testAuthenticationHeader(t *testing.T, client *GitlabNetClient) {
header, err := base64.StdEncoding.DecodeString(string(responseBody))
require.NoError(t, err)
require.Equal(t, secret, header)
require.Equal(t, secret, string(header))
})
t.Run("Authentication headers for POST", func(t *testing.T) {
Loading
Loading
@@ -182,7 +196,7 @@ func testAuthenticationHeader(t *testing.T, client *GitlabNetClient) {
header, err := base64.StdEncoding.DecodeString(string(responseBody))
require.NoError(t, err)
require.Equal(t, secret, header)
require.Equal(t, secret, string(header))
})
}
Loading
Loading
@@ -193,7 +207,7 @@ func testJWTAuthenticationHeader(t *testing.T, client *GitlabNetClient) {
claims := &jwt.RegisteredClaims{}
token, err := jwt.ParseWithClaims(string(responseBody), claims, func(token *jwt.Token) (interface{}, error) {
return secret, nil
return []byte(secret), nil
})
require.NoError(t, err)
require.True(t, token.Valid)
Loading
Loading
Loading
Loading
@@ -141,9 +141,7 @@ func (c *GitlabNetClient) DoRequest(ctx context.Context, method, path string, da
if user != "" && password != "" {
request.SetBasicAuth(user, password)
}
secretBytes := []byte(c.secret)
encodedSecret := base64.StdEncoding.EncodeToString(secretBytes)
encodedSecret := base64.StdEncoding.EncodeToString([]byte(c.secret))
request.Header.Set(secretHeaderName, encodedSecret)
claims := jwt.RegisteredClaims{
Loading
Loading
@@ -151,6 +149,7 @@ func (c *GitlabNetClient) DoRequest(ctx context.Context, method, path string, da
IssuedAt: jwt.NewNumericDate(time.Now()),
ExpiresAt: jwt.NewNumericDate(time.Now().Add(jwtTTL)),
}
secretBytes := []byte(strings.TrimSpace(c.secret))
tokenString, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(secretBytes)
if err != nil {
return nil, err
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment