From 4e1779cc906b59cddec44be7ee66042ff75974f1 Mon Sep 17 00:00:00 2001 From: Aleksandr Barsukov Date: Sat, 1 Feb 2020 00:49:55 +0300 Subject: [PATCH 1/3] fix: bug in HasOnlyDefaultScopes --- go.mod | 2 ++ go.sum | 11 ++++------- pkg/manager/oauth2.go | 15 +++++++++++++++ pkg/manager/oauth2_test.go | 16 +++++++++++++++- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index fed82b9..44c564a 100644 --- a/go.mod +++ b/go.mod @@ -50,4 +50,6 @@ require ( replace github.com/hashicorp/consul => github.com/hashicorp/consul v1.5.1 +replace github.com/gogo/protobuf => github.com/gogo/protobuf v1.3.0 + go 1.13 diff --git a/go.sum b/go.sum index ee537d9..9e9ce58 100644 --- a/go.sum +++ b/go.sum @@ -138,6 +138,7 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff h1:RmdPFa+slIr4SCBg4st/l/vZWVe9QJKMXGO60Bxbe04= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= @@ -496,10 +497,7 @@ github.com/gocql/gocql v0.0.0-20180617115710-e06f8c1bcd78/go.mod h1:4Fw1eo5iaEhD github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v0.0.0-20190410021324-65acae22fc9/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/gddo v0.0.0-20180828051604-96d2a289f41e/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4= github.com/golang/gddo v0.0.0-20181116215533-9bd4a3295021/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4= github.com/golang/gddo v0.0.0-20190312205958-5a2505f3dbf0/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4= @@ -672,7 +670,6 @@ github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd/go.mod h1:3LVOLeyx9XVvwP github.com/imdario/mergo v0.0.0-20171009183408-7fe0c75c13ab/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= @@ -725,17 +722,18 @@ github.com/kevinburke/ssh_config v0.0.0-20190630040420-2e50c441276c/go.mod h1:CT github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/keybase/go-crypto v0.0.0-20180614160407-5114a9a81e1b/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b/go.mod h1:g2nVr8KZVXJSS97Jo8pJ0jgq29P6H7dG0oplUA86MQw= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/labstack/echo-contrib v0.0.0-20190220224852-7fa08ffe9442 h1:/vPhum06NeXJqxT468ZqJhy0xPhV1969gVmN+OBL8W8= github.com/labstack/echo-contrib v0.0.0-20190220224852-7fa08ffe9442/go.mod h1:ELz8yG650dzTZBn+wLNi0ETVGWuxTdlpos8CV9EEJFY= @@ -1313,7 +1311,6 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181003024731-2f84ea8ef872/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/manager/oauth2.go b/pkg/manager/oauth2.go index 9b60ca5..bf5d320 100644 --- a/pkg/manager/oauth2.go +++ b/pkg/manager/oauth2.go @@ -311,6 +311,10 @@ func (m *OauthManager) GetScopes(requestedScopes []string) []string { } func (m *OauthManager) HasOnlyDefaultScopes(scopes []string) bool { + return hasOnlyDefaultScopes(scopes) +} + +func oldHasOnlyDefaultScopes(scopes []string) bool { s := 0 defaultScopes := []string{scopeOffline, scopeOpenId} @@ -325,6 +329,17 @@ func (m *OauthManager) HasOnlyDefaultScopes(scopes []string) bool { return s == len(scopes) } +func hasOnlyDefaultScopes(scopes []string) bool { + for _, s := range scopes { + switch s { + case scopeOffline, scopeOpenId: + default: + return false + } + } + return true +} + func (m *OauthManager) Introspect(ctx echo.Context, form *models.Oauth2IntrospectForm) (*models.Oauth2TokenIntrospection, *models.GeneralError) { app, err := m.r.ApplicationService().Get(bson.ObjectIdHex(form.ClientID)) if err != nil { diff --git a/pkg/manager/oauth2_test.go b/pkg/manager/oauth2_test.go index 5caedf4..978fc89 100644 --- a/pkg/manager/oauth2_test.go +++ b/pkg/manager/oauth2_test.go @@ -1,6 +1,8 @@ package manager import ( + "testing" + "github.com/ProtocolONE/auth1.protocol.one/pkg/config" "github.com/ProtocolONE/auth1.protocol.one/pkg/mocks" "github.com/ProtocolONE/auth1.protocol.one/pkg/models" @@ -11,7 +13,6 @@ import ( "github.com/pkg/errors" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" - "testing" ) func TestOauthManager(t *testing.T) { @@ -1306,3 +1307,16 @@ func TestLoadRemoteScopesReturnNil(t *testing.T) { err := m.loadRemoteScopes([]string{"scope1"}) assert.Nil(t, err) } + +func TestHasOnlyDefaultScopes(t *testing.T) { + assert.True(t, oldHasOnlyDefaultScopes([]string{})) + assert.True(t, oldHasOnlyDefaultScopes([]string{scopeOpenId})) // fail + assert.True(t, oldHasOnlyDefaultScopes([]string{scopeOffline})) + assert.True(t, oldHasOnlyDefaultScopes([]string{scopeOpenId, scopeOffline})) + assert.True(t, oldHasOnlyDefaultScopes([]string{scopeOffline, scopeOpenId})) + assert.False(t, oldHasOnlyDefaultScopes([]string{"other"})) + assert.False(t, oldHasOnlyDefaultScopes([]string{scopeOpenId, "other"})) // fail + assert.False(t, oldHasOnlyDefaultScopes([]string{"other", scopeOffline})) // fail + assert.False(t, oldHasOnlyDefaultScopes([]string{scopeOpenId, scopeOffline, "other"})) + assert.False(t, oldHasOnlyDefaultScopes([]string{scopeOffline, "other", scopeOpenId})) +} From 3c68a70057d7285737942a1035a7bf88af84d161 Mon Sep 17 00:00:00 2001 From: Aleksandr Barsukov Date: Sat, 1 Feb 2020 00:52:26 +0300 Subject: [PATCH 2/3] fix: remove old impl HasOnlyDefaultScopes --- pkg/manager/oauth2.go | 16 ---------------- pkg/manager/oauth2_test.go | 20 ++++++++++---------- 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/pkg/manager/oauth2.go b/pkg/manager/oauth2.go index bf5d320..e31cc29 100644 --- a/pkg/manager/oauth2.go +++ b/pkg/manager/oauth2.go @@ -15,7 +15,6 @@ import ( models2 "github.com/ory/hydra/sdk/go/hydra/models" "github.com/pkg/errors" "gopkg.in/tomb.v2" - "sort" "time" ) @@ -314,21 +313,6 @@ func (m *OauthManager) HasOnlyDefaultScopes(scopes []string) bool { return hasOnlyDefaultScopes(scopes) } -func oldHasOnlyDefaultScopes(scopes []string) bool { - s := 0 - defaultScopes := []string{scopeOffline, scopeOpenId} - - sort.Strings(scopes) - - for _, scope := range defaultScopes { - if sort.SearchStrings(scopes, scope) < len(scopes) { - s++ - } - } - - return s == len(scopes) -} - func hasOnlyDefaultScopes(scopes []string) bool { for _, s := range scopes { switch s { diff --git a/pkg/manager/oauth2_test.go b/pkg/manager/oauth2_test.go index 978fc89..ea7f248 100644 --- a/pkg/manager/oauth2_test.go +++ b/pkg/manager/oauth2_test.go @@ -1309,14 +1309,14 @@ func TestLoadRemoteScopesReturnNil(t *testing.T) { } func TestHasOnlyDefaultScopes(t *testing.T) { - assert.True(t, oldHasOnlyDefaultScopes([]string{})) - assert.True(t, oldHasOnlyDefaultScopes([]string{scopeOpenId})) // fail - assert.True(t, oldHasOnlyDefaultScopes([]string{scopeOffline})) - assert.True(t, oldHasOnlyDefaultScopes([]string{scopeOpenId, scopeOffline})) - assert.True(t, oldHasOnlyDefaultScopes([]string{scopeOffline, scopeOpenId})) - assert.False(t, oldHasOnlyDefaultScopes([]string{"other"})) - assert.False(t, oldHasOnlyDefaultScopes([]string{scopeOpenId, "other"})) // fail - assert.False(t, oldHasOnlyDefaultScopes([]string{"other", scopeOffline})) // fail - assert.False(t, oldHasOnlyDefaultScopes([]string{scopeOpenId, scopeOffline, "other"})) - assert.False(t, oldHasOnlyDefaultScopes([]string{scopeOffline, "other", scopeOpenId})) + assert.True(t, hasOnlyDefaultScopes([]string{})) + assert.True(t, hasOnlyDefaultScopes([]string{scopeOpenId})) // fail + assert.True(t, hasOnlyDefaultScopes([]string{scopeOffline})) + assert.True(t, hasOnlyDefaultScopes([]string{scopeOpenId, scopeOffline})) + assert.True(t, hasOnlyDefaultScopes([]string{scopeOffline, scopeOpenId})) + assert.False(t, hasOnlyDefaultScopes([]string{"other"})) + assert.False(t, hasOnlyDefaultScopes([]string{scopeOpenId, "other"})) // fail + assert.False(t, hasOnlyDefaultScopes([]string{"other", scopeOffline})) // fail + assert.False(t, hasOnlyDefaultScopes([]string{scopeOpenId, scopeOffline, "other"})) + assert.False(t, hasOnlyDefaultScopes([]string{scopeOffline, "other", scopeOpenId})) } From b3c47579d9057361c92398623ea1692501febe15 Mon Sep 17 00:00:00 2001 From: Aleksandr Barsukov Date: Wed, 12 Feb 2020 08:08:39 +0300 Subject: [PATCH 3/3] remove comments --- pkg/manager/oauth2_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/manager/oauth2_test.go b/pkg/manager/oauth2_test.go index ea7f248..8b63f55 100644 --- a/pkg/manager/oauth2_test.go +++ b/pkg/manager/oauth2_test.go @@ -1310,13 +1310,13 @@ func TestLoadRemoteScopesReturnNil(t *testing.T) { func TestHasOnlyDefaultScopes(t *testing.T) { assert.True(t, hasOnlyDefaultScopes([]string{})) - assert.True(t, hasOnlyDefaultScopes([]string{scopeOpenId})) // fail + assert.True(t, hasOnlyDefaultScopes([]string{scopeOpenId})) assert.True(t, hasOnlyDefaultScopes([]string{scopeOffline})) assert.True(t, hasOnlyDefaultScopes([]string{scopeOpenId, scopeOffline})) assert.True(t, hasOnlyDefaultScopes([]string{scopeOffline, scopeOpenId})) assert.False(t, hasOnlyDefaultScopes([]string{"other"})) - assert.False(t, hasOnlyDefaultScopes([]string{scopeOpenId, "other"})) // fail - assert.False(t, hasOnlyDefaultScopes([]string{"other", scopeOffline})) // fail + assert.False(t, hasOnlyDefaultScopes([]string{scopeOpenId, "other"})) + assert.False(t, hasOnlyDefaultScopes([]string{"other", scopeOffline})) assert.False(t, hasOnlyDefaultScopes([]string{scopeOpenId, scopeOffline, "other"})) assert.False(t, hasOnlyDefaultScopes([]string{scopeOffline, "other", scopeOpenId})) }