From d6dbf86b2dfc0eeb3e187ba1cb55141023738cab Mon Sep 17 00:00:00 2001 From: Caleb Doxsey Date: Thu, 10 Nov 2022 12:35:13 -0700 Subject: [PATCH] config: generate cookie secret if not set in all-in-one mode --- config/options.go | 10 +++++++++- config/options_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/config/options.go b/config/options.go index 1f708e1fb..6a7840329 100644 --- a/config/options.go +++ b/config/options.go @@ -985,7 +985,7 @@ func (o *Options) GetSharedKey() ([]byte, error) { sharedKey = string(bs) } // mutual auth between services on the same host can be generated at runtime - if IsAll(o.Services) && o.SharedKey == "" && o.DataBrokerStorageType == StorageInMemoryName { + if IsAll(o.Services) && sharedKey == "" { sharedKey = randomSharedKey } if sharedKey == "" { @@ -1188,6 +1188,14 @@ func (o *Options) GetCookieSecret() ([]byte, error) { } cookieSecret = string(bs) } + + if IsAll(o.Services) && cookieSecret == "" { + cookieSecret = randomSharedKey + } + if cookieSecret == "" { + return nil, errors.New("empty cookie secret") + } + return base64.StdEncoding.DecodeString(cookieSecret) } diff --git a/config/options_test.go b/config/options_test.go index 1dc20bd3a..413c29536 100644 --- a/config/options_test.go +++ b/config/options_test.go @@ -776,6 +776,36 @@ func TestOptions_GetSetResponseHeaders(t *testing.T) { }) } +func TestOptions_GetSharedKey(t *testing.T) { + t.Run("default", func(t *testing.T) { + o := NewDefaultOptions() + bs, err := o.GetSharedKey() + assert.NoError(t, err) + assert.Equal(t, randomSharedKey, base64.StdEncoding.EncodeToString(bs)) + }) + t.Run("missing", func(t *testing.T) { + o := NewDefaultOptions() + o.Services = ServiceProxy + _, err := o.GetSharedKey() + assert.Error(t, err) + }) +} + +func TestOptions_GetCookieSecret(t *testing.T) { + t.Run("default", func(t *testing.T) { + o := NewDefaultOptions() + bs, err := o.GetCookieSecret() + assert.NoError(t, err) + assert.Equal(t, randomSharedKey, base64.StdEncoding.EncodeToString(bs)) + }) + t.Run("missing", func(t *testing.T) { + o := NewDefaultOptions() + o.Services = ServiceProxy + _, err := o.GetCookieSecret() + assert.Error(t, err) + }) +} + func encodeCert(cert *tls.Certificate) []byte { return pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: cert.Certificate[0]}) }