fixed oauth2SubscriptionRedirect test
This commit is contained in:
parent
151dbafc86
commit
3e5b021dd8
|
@ -1,5 +1,7 @@
|
||||||
## (WIP)
|
## (WIP)
|
||||||
|
|
||||||
|
- (@todo docs) Simplified OAuth2 authentication flow ([#55](https://github.com/pocketbase/pocketbase/issues/55)).
|
||||||
|
|
||||||
- Fixed typo in `Record.WithUnkownData()` -> `Record.WithUnknownData()`.
|
- Fixed typo in `Record.WithUnkownData()` -> `Record.WithUnknownData()`.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -636,14 +636,14 @@ func (api *recordAuthApi) unlinkExternalAuth(c echo.Context) error {
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
|
||||||
const oauth2SubscribeTopic = "@oauth2"
|
const oauth2SubscriptionTopic = "@oauth2"
|
||||||
|
|
||||||
func (api *recordAuthApi) oauth2SubscriptionRedirect(c echo.Context) error {
|
func (api *recordAuthApi) oauth2SubscriptionRedirect(c echo.Context) error {
|
||||||
state := c.QueryParam("state")
|
state := c.QueryParam("state")
|
||||||
code := c.QueryParam("code")
|
code := c.QueryParam("code")
|
||||||
|
|
||||||
client, err := api.app.SubscriptionsBroker().ClientById(state)
|
client, err := api.app.SubscriptionsBroker().ClientById(state)
|
||||||
if err != nil || client.IsDiscarded() || !client.HasSubscription(oauth2SubscribeTopic) {
|
if err != nil || client.IsDiscarded() || !client.HasSubscription(oauth2SubscriptionTopic) {
|
||||||
return NewNotFoundError("Missing or invalid oauth2 subscription client", err)
|
return NewNotFoundError("Missing or invalid oauth2 subscription client", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -658,7 +658,7 @@ func (api *recordAuthApi) oauth2SubscriptionRedirect(c echo.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := subscriptions.Message{
|
msg := subscriptions.Message{
|
||||||
Name: oauth2SubscribeTopic,
|
Name: oauth2SubscriptionTopic,
|
||||||
Data: string(encodedData),
|
Data: string(encodedData),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1163,7 +1163,7 @@ func TestRecordAuthOAuth2Redirect(t *testing.T) {
|
||||||
c5.Subscribe("@oauth2")
|
c5.Subscribe("@oauth2")
|
||||||
c5.Discard()
|
c5.Discard()
|
||||||
|
|
||||||
baseBeforeTestFunc := func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
|
beforeTestFunc := func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
|
||||||
app.SubscriptionsBroker().Register(c1)
|
app.SubscriptionsBroker().Register(c1)
|
||||||
app.SubscriptionsBroker().Register(c2)
|
app.SubscriptionsBroker().Register(c2)
|
||||||
app.SubscriptionsBroker().Register(c3)
|
app.SubscriptionsBroker().Register(c3)
|
||||||
|
@ -1171,52 +1171,26 @@ func TestRecordAuthOAuth2Redirect(t *testing.T) {
|
||||||
app.SubscriptionsBroker().Register(c5)
|
app.SubscriptionsBroker().Register(c5)
|
||||||
}
|
}
|
||||||
|
|
||||||
noMessagesBeforeTestFunc := func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
|
|
||||||
baseBeforeTestFunc(t, app, e)
|
|
||||||
|
|
||||||
ctx, cancelFunc := context.WithTimeout(context.Background(), 1*time.Second)
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
defer cancelFunc()
|
|
||||||
L:
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-c1.Channel():
|
|
||||||
t.Error("Unexpected c1 message")
|
|
||||||
break L
|
|
||||||
case <-c2.Channel():
|
|
||||||
t.Error("Unexpected c2 message")
|
|
||||||
break L
|
|
||||||
case <-c3.Channel():
|
|
||||||
t.Error("Unexpected c3 message")
|
|
||||||
break L
|
|
||||||
case <-c4.Channel():
|
|
||||||
t.Error("Unexpected c4 message")
|
|
||||||
break L
|
|
||||||
case <-c5.Channel():
|
|
||||||
t.Error("Unexpected c5 message")
|
|
||||||
break L
|
|
||||||
case <-ctx.Done():
|
|
||||||
t.Error("Context timeout reached")
|
|
||||||
break L
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
scenarios := []tests.ApiScenario{
|
scenarios := []tests.ApiScenario{
|
||||||
{
|
{
|
||||||
Name: "no clients",
|
Name: "no state query param",
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Url: "/api/oauth2-redirect",
|
Url: "/api/oauth2-redirect",
|
||||||
ExpectedStatus: 404,
|
ExpectedStatus: 404,
|
||||||
ExpectedContent: []string{`"data":{}`},
|
ExpectedContent: []string{`"data":{}`},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "missing client",
|
||||||
|
Method: http.MethodGet,
|
||||||
|
Url: "/api/oauth2-redirect?state=missing",
|
||||||
|
ExpectedStatus: 404,
|
||||||
|
ExpectedContent: []string{`"data":{}`},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Name: "discarded client with @oauth2 subscription",
|
Name: "discarded client with @oauth2 subscription",
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Url: "/api/oauth2-redirect?state=" + c5.Id(),
|
Url: "/api/oauth2-redirect?state=" + c5.Id(),
|
||||||
BeforeTestFunc: noMessagesBeforeTestFunc,
|
BeforeTestFunc: beforeTestFunc,
|
||||||
ExpectedStatus: 404,
|
ExpectedStatus: 404,
|
||||||
ExpectedContent: []string{`"data":{}`},
|
ExpectedContent: []string{`"data":{}`},
|
||||||
},
|
},
|
||||||
|
@ -1224,7 +1198,7 @@ func TestRecordAuthOAuth2Redirect(t *testing.T) {
|
||||||
Name: "client without @oauth2 subscription",
|
Name: "client without @oauth2 subscription",
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Url: "/api/oauth2-redirect?state=" + c4.Id(),
|
Url: "/api/oauth2-redirect?state=" + c4.Id(),
|
||||||
BeforeTestFunc: noMessagesBeforeTestFunc,
|
BeforeTestFunc: beforeTestFunc,
|
||||||
ExpectedStatus: 404,
|
ExpectedStatus: 404,
|
||||||
ExpectedContent: []string{`"data":{}`},
|
ExpectedContent: []string{`"data":{}`},
|
||||||
},
|
},
|
||||||
|
@ -1233,7 +1207,7 @@ func TestRecordAuthOAuth2Redirect(t *testing.T) {
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Url: "/api/oauth2-redirect?state=" + c3.Id(),
|
Url: "/api/oauth2-redirect?state=" + c3.Id(),
|
||||||
BeforeTestFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
|
BeforeTestFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
|
||||||
baseBeforeTestFunc(t, app, e)
|
beforeTestFunc(t, app, e)
|
||||||
|
|
||||||
ctx, cancelFunc := context.WithTimeout(context.Background(), 1*time.Second)
|
ctx, cancelFunc := context.WithTimeout(context.Background(), 1*time.Second)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue