From 39508bd7b64e20f09a068097e091e9359244b090 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Fri, 19 Jun 2020 14:48:36 +0200 Subject: [PATCH] go where no man has gone before ... MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörn Friedrich Dreyer --- pkg/middleware/openidconnect.go | 8 ++--- pkg/middleware/openidconnect_test.go | 50 +++++++--------------------- 2 files changed, 14 insertions(+), 44 deletions(-) diff --git a/pkg/middleware/openidconnect.go b/pkg/middleware/openidconnect.go index 102f2d3f5c..be0ccacac8 100644 --- a/pkg/middleware/openidconnect.go +++ b/pkg/middleware/openidconnect.go @@ -6,6 +6,7 @@ import ( "net/http" "strings" + "github.com/coreos/go-oidc" ocisoidc "github.com/owncloud/ocis-pkg/v2/oidc" "github.com/owncloud/ocis-proxy/pkg/cache" "golang.org/x/oauth2" @@ -23,12 +24,7 @@ var ( // OIDCProvider used to mock the oidc provider during tests type OIDCProvider interface { - UserInfo(ctx context.Context, ts oauth2.TokenSource) (OIDCUserInfo, error) -} - -// OIDCUserInfo used to mock the oidc user info during tests -type OIDCUserInfo interface { - Claims(v interface{}) error + UserInfo(ctx context.Context, ts oauth2.TokenSource) (*oidc.UserInfo, error) } // OpenIDConnect provides a middleware to check access secured by a static token. diff --git a/pkg/middleware/openidconnect_test.go b/pkg/middleware/openidconnect_test.go index 2d805ab5fc..ce38cefc0f 100644 --- a/pkg/middleware/openidconnect_test.go +++ b/pkg/middleware/openidconnect_test.go @@ -7,6 +7,7 @@ import ( "net/http/httptest" "testing" + "github.com/coreos/go-oidc" "github.com/micro/go-micro/v2/client" "github.com/owncloud/ocis-accounts/pkg/proto/v0" "github.com/owncloud/ocis-pkg/v2/log" @@ -20,7 +21,7 @@ func TestOpenIDConnectMiddleware(t *testing.T) { m := OpenIDConnect( Logger(log.NewLogger()), OIDCProviderFunc(func() (OIDCProvider, error) { - return mockOP(false, mockUI(false)), nil + return mockOP(false), nil }), )(next) @@ -29,17 +30,17 @@ func TestOpenIDConnectMiddleware(t *testing.T) { w := httptest.NewRecorder() m.ServeHTTP(w, r) - if r.Header.Get("x-access-token") == "" { - t.Errorf("expected a token") + if w.Code != http.StatusInternalServerError { + t.Errorf("expected an internal server error") } } type mockOIDCProvider struct { - UserInfoFunc func(ctx context.Context, ts oauth2.TokenSource) (OIDCUserInfo, error) + UserInfoFunc func(ctx context.Context, ts oauth2.TokenSource) (*oidc.UserInfo, error) } // UserInfo will panic if the function has been called, but not mocked -func (m mockOIDCProvider) UserInfo(ctx context.Context, ts oauth2.TokenSource) (OIDCUserInfo, error) { +func (m mockOIDCProvider) UserInfo(ctx context.Context, ts oauth2.TokenSource) (*oidc.UserInfo, error) { if m.UserInfoFunc != nil { return m.UserInfoFunc(ctx, ts) } @@ -47,53 +48,26 @@ func (m mockOIDCProvider) UserInfo(ctx context.Context, ts oauth2.TokenSource) ( panic("UserInfo was called in test but not mocked") } -func mockOP(retErr bool, ui OIDCUserInfo) OIDCProvider { +func mockOP(retErr bool) OIDCProvider { if retErr { return &mockOIDCProvider{ - UserInfoFunc: func(ctx context.Context, ts oauth2.TokenSource) (OIDCUserInfo, error) { + UserInfoFunc: func(ctx context.Context, ts oauth2.TokenSource) (*oidc.UserInfo, error) { return nil, fmt.Errorf("error returned by mockOIDCProvider UserInfo") }, } } return &mockOIDCProvider{ - UserInfoFunc: func(ctx context.Context, ts oauth2.TokenSource) (OIDCUserInfo, error) { + UserInfoFunc: func(ctx context.Context, ts oauth2.TokenSource) (*oidc.UserInfo, error) { + ui := &oidc.UserInfo{ + // claims: private ... + } return ui, nil }, } } -type mockOIDCUserInfo struct { - ClaimsFunc func(v interface{}) error -} - -// UserInfo will panic if the function has been called, but not mocked -func (m mockOIDCUserInfo) Claims(v interface{}) error { - if m.ClaimsFunc != nil { - return m.ClaimsFunc(v) - } - - panic("ClaimsFunc was called in test but not mocked") -} -func mockUI(retErr bool) OIDCUserInfo { - if retErr { - return &mockOIDCUserInfo{ - ClaimsFunc: func(v interface{}) error { - return fmt.Errorf("error returned by mockOIDCProvider UserInfo") - }, - } - - } - return &mockOIDCUserInfo{ - ClaimsFunc: func(v interface{}) error { - // TODO fill in claims - return nil - }, - } - -} - func mockOpenidConnectMiddlewareAccSvc(retErr bool) proto.AccountsService { if retErr { return &proto.MockAccountsService{