Skip to content

Commit 11fefee

Browse files
committed
Set tutorial cookie by reading x_tutorial query in middleware
1 parent 6e6e7a9 commit 11fefee

File tree

8 files changed

+149
-0
lines changed

8 files changed

+149
-0
lines changed

pkg/auth/deps.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ var DependencySet = wire.NewSet(
5555

5656
wire.Bind(new(webapp.GraphService), new(*interaction.Service)),
5757
wire.Bind(new(webapp.CookieManager), new(*httputil.CookieManager)),
58+
wire.Bind(new(webapp.TutorialMiddlewareTutorialCookie), new(*httputil.TutorialCookie)),
5859
wire.Bind(new(handlerwebapp.CookieManager), new(*httputil.CookieManager)),
5960
wire.Bind(new(oauthhandler.CookieManager), new(*httputil.CookieManager)),
6061
wire.Bind(new(handlerwebapp.TutorialCookie), new(*httputil.TutorialCookie)),

pkg/auth/routes.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ func NewRouter(p *deps.RootProvider, configSource *configsource.ConfigSource) *h
8383
p.Middleware(newWebAppUILocalesMiddleware),
8484
p.Middleware(newWebAppWeChatRedirectURIMiddleware),
8585
p.Middleware(newWebAppClientIDMiddleware),
86+
p.Middleware(newTutorialMiddleware),
8687
)
8788
webappSSOCallbackChain := httproute.Chain(
8889
webappChain,

pkg/auth/webapp/deps.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ var DependencySet = wire.NewSet(
2626
wire.Struct(new(VisitorIDMiddleware), "*"),
2727
wire.Struct(new(SettingsSubRoutesMiddleware), "*"),
2828
wire.Struct(new(SuccessPageMiddleware), "*"),
29+
wire.Struct(new(TutorialMiddleware), "*"),
2930

3031
NewPublicOriginMiddlewareLogger,
3132
wire.Struct(new(PublicOriginMiddleware), "*"),
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package webapp
2+
3+
import (
4+
"net/http"
5+
)
6+
7+
//go:generate mockgen -source=tutorial_middleware.go -destination=tutorial_middleware_mock_test.go -package webapp
8+
9+
type TutorialMiddlewareTutorialCookie interface {
10+
SetAll(rw http.ResponseWriter)
11+
}
12+
13+
type TutorialMiddleware struct {
14+
TutorialCookie TutorialMiddlewareTutorialCookie
15+
}
16+
17+
func (m *TutorialMiddleware) Handle(next http.Handler) http.Handler {
18+
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
19+
q := r.URL.Query()
20+
if q.Get("x_tutorial") == "true" {
21+
q.Del("x_tutorial")
22+
r.URL.RawQuery = q.Encode()
23+
m.TutorialCookie.SetAll(w)
24+
}
25+
26+
next.ServeHTTP(w, r)
27+
})
28+
}

pkg/auth/webapp/tutorial_middleware_mock_test.go

Lines changed: 47 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package webapp
2+
3+
import (
4+
"net/http"
5+
"net/http/httptest"
6+
"testing"
7+
8+
"github.com/golang/mock/gomock"
9+
. "github.com/smartystreets/goconvey/convey"
10+
)
11+
12+
func TestTutorialMiddleware(t *testing.T) {
13+
Convey("TutorialMiddleware", t, func() {
14+
ctrl := gomock.NewController(t)
15+
defer ctrl.Finish()
16+
17+
tutorialCookie := NewMockTutorialMiddlewareTutorialCookie(ctrl)
18+
middleware := TutorialMiddleware{
19+
TutorialCookie: tutorialCookie,
20+
}
21+
22+
makeHandler := func() http.Handler {
23+
dummy := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})
24+
h := middleware.Handle(dummy)
25+
return h
26+
}
27+
28+
Convey("x_tutorial", func() {
29+
test := func(requestQuery string, resultQuery string, setCookie bool) {
30+
w := httptest.NewRecorder()
31+
r, _ := http.NewRequest("GET", requestQuery, nil)
32+
if setCookie {
33+
tutorialCookie.EXPECT().SetAll(w)
34+
}
35+
makeHandler().ServeHTTP(w, r)
36+
So(r.URL.RawQuery, ShouldEqual, resultQuery)
37+
}
38+
39+
test("/", "", false)
40+
test("/?abc=test", "abc=test", false)
41+
test("/?x_tutorial=true&abc=test", "abc=test", true)
42+
test("/?abc=test&x_tutorial=true&state=test", "abc=test&state=test", true)
43+
})
44+
})
45+
}

pkg/auth/wire_gen.go

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/auth/wire_middleware.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,10 @@ func newAPIRRequireAuthenticatedMiddlewareMiddleware(p *deps.RequestProvider) ht
143143
wire.Bind(new(httproute.Middleware), new(*api.RequireAuthenticatedMiddleware)),
144144
))
145145
}
146+
147+
func newTutorialMiddleware(p *deps.RequestProvider) httproute.Middleware {
148+
panic(wire.Build(
149+
DependencySet,
150+
wire.Bind(new(httproute.Middleware), new(*webapp.TutorialMiddleware)),
151+
))
152+
}

0 commit comments

Comments
 (0)