Skip to content

Commit

Permalink
Added support for decode and text on operator jwt
Browse files Browse the repository at this point in the history
  • Loading branch information
Stephen Asbury committed Jul 23, 2019
1 parent 5c20ecf commit 8ef6ff6
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 3 deletions.
15 changes: 14 additions & 1 deletion server/core/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,20 @@ func (server *AccountServer) GetOperatorJWT(w http.ResponseWriter, r *http.Reque
return
}

w.Header().Add(ContentType, TextPlain)
decode := strings.ToLower(r.URL.Query().Get("decode")) == "true"
text := strings.ToLower(r.URL.Query().Get("text")) == "true"

if text {
server.writeJWTAsText(w, "", server.operatorJWT)
return
}

if decode {
server.writeDecodedJWT(w, "", server.operatorJWT)
return
}

w.Header().Add(ContentType, ApplicationJWT)
w.WriteHeader(http.StatusOK)
w.Write([]byte(server.operatorJWT))
}
Expand Down
25 changes: 23 additions & 2 deletions server/core/handlers_help_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"fmt"
"io/ioutil"
"net/http"
"strings"
"testing"

"github.com/nats-io/nats-account-server/server/conf"
Expand Down Expand Up @@ -62,7 +63,7 @@ func TestJWTHelpTLS(t *testing.T) {
require.Equal(t, jwtAPIHelp, help)
}

func TestOperatorHelp(t *testing.T) {
func TestOperatorJWT(t *testing.T) {
testEnv, err := SetupTestServer(conf.DefaultServerConfig(), false, true)
defer testEnv.Cleanup()
require.NoError(t, err)
Expand All @@ -78,9 +79,29 @@ func TestOperatorHelp(t *testing.T) {

operator := string(body)
require.Equal(t, testEnv.Server.operatorJWT, operator)

path = fmt.Sprintf("/jwt/v1/operator?text=true")
url = testEnv.URLForPath(path)
resp, err = testEnv.HTTP.Get(url)
require.NoError(t, err)
require.True(t, resp.StatusCode == http.StatusOK)
body, err = ioutil.ReadAll(resp.Body)
require.NoError(t, err)
operator = string(body)
require.Equal(t, testEnv.Server.operatorJWT, operator)

path = fmt.Sprintf("/jwt/v1/operator?decode=true")
url = testEnv.URLForPath(path)
resp, err = testEnv.HTTP.Get(url)
require.NoError(t, err)
require.True(t, resp.StatusCode == http.StatusOK)
body, err = ioutil.ReadAll(resp.Body)
require.NoError(t, err)
operator = string(body)
require.True(t, strings.Contains(operator, `"alg": "ed25519"`)) // header prefix doesn't change
}

func TestOperatorHelpTLS(t *testing.T) {
func TestOperatorJWTTLS(t *testing.T) {
testEnv, err := SetupTestServer(conf.DefaultServerConfig(), true, false)
defer testEnv.Cleanup()
require.NoError(t, err)
Expand Down

0 comments on commit 8ef6ff6

Please sign in to comment.