From ec6ca20279d839dc10e7e3bc80e0442a630e586b Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 12 Aug 2020 13:20:23 +0200 Subject: [PATCH] feat: add bearer helper --- session/helper.go | 16 +++++++++++++ session/helper_test.go | 52 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 session/helper.go create mode 100644 session/helper_test.go diff --git a/session/helper.go b/session/helper.go new file mode 100644 index 00000000000..5a4bfe6cef3 --- /dev/null +++ b/session/helper.go @@ -0,0 +1,16 @@ +package session + +import ( + "net/http" + "strings" +) + +func bearerTokenFromRequest(r *http.Request) (string, bool) { + parts := strings.Split(r.Header.Get("Authorization"), " ") + + if len(parts) == 2 && strings.ToLower(parts[0]) == "bearer" { + return parts[1], true + } + + return "", false +} diff --git a/session/helper_test.go b/session/helper_test.go new file mode 100644 index 00000000000..3ec2932926c --- /dev/null +++ b/session/helper_test.go @@ -0,0 +1,52 @@ +package session + +import ( + "fmt" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestBearerTokenFromRequest(t *testing.T) { + for k, tc := range []struct { + h http.Header + t string + f bool + }{ + { + h: http.Header{"Authorization": {"Bearer token"}}, + t: "token", f : true, + }, + { + h: http.Header{"Authorization": {"bearer token"}}, + t: "token", f : true, + }, + { + h: http.Header{"Authorization": {"beaRer token"}}, + t: "token", f : true, + }, + { + h: http.Header{"Authorization": {"BEARER token"}}, + t: "token", f : true, + }, + { + h: http.Header{"Authorization": {"notbearer token"}}, + }, + { + h: http.Header{"Authorization": {"token"}}, + }, + { + h: http.Header{"Authorization": {}}, + }, + { + h: http.Header{}, + }, + } { + t.Run(fmt.Sprintf("case=%d", k), func(t *testing.T) { + token, found := bearerTokenFromRequest(&http.Request{Header: tc.h}) + assert.Equal(t, tc.f, found) + assert.Equal(t, tc.t, token) + }) + } +}