From 3cde98a4803456a5e8b9a89090f937e2cb15fdbd Mon Sep 17 00:00:00 2001 From: Umputun Date: Thu, 28 Jun 2018 01:58:53 -0500 Subject: [PATCH] add abilty to enter custom dev user #106 --- backend/app/rest/auth/dev_provider.go | 51 +++++++++++++++++++--- backend/app/rest/auth/dev_provider_test.go | 4 +- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/backend/app/rest/auth/dev_provider.go b/backend/app/rest/auth/dev_provider.go index 3dd4fea5..65a08071 100644 --- a/backend/app/rest/auth/dev_provider.go +++ b/backend/app/rest/auth/dev_provider.go @@ -20,6 +20,9 @@ const devAuthPort = 8084 type DevAuthServer struct { Provider Provider + username string // unsafe, but fine for dev + nonInteractive bool + httpServer *http.Server lock sync.Mutex } @@ -34,7 +37,20 @@ func (d *DevAuthServer) Run() { log.Printf("[DEBUG] dev oauth request %s %s %+v", r.Method, r.URL, r.Header) switch { + case strings.HasPrefix(r.URL.Path, "/login/user"): + w.Write([]byte(devUserForm)) + case strings.HasPrefix(r.URL.Path, "/login/oauth/authorize"): + + if !d.nonInteractive && (r.ParseForm() != nil || r.Form.Get("username") == "") { + w.Write([]byte(fmt.Sprintf(devUserForm, r.URL.RawQuery))) + return + } + + if !d.nonInteractive { + d.username = r.Form.Get("username") + } + state := r.URL.Query().Get("state") callbackURL := fmt.Sprintf("%s?code=g0ZGZmNjVmOWI&state=%s", d.Provider.RedirectURL, state) log.Printf("[DEBUG] callback url=%s", callbackURL) @@ -57,10 +73,11 @@ func (d *DevAuthServer) Run() { } case strings.HasPrefix(r.URL.Path, "/user"): - res := `{ - "id": "ignored", - "name":"ignored" - }` + res := fmt.Sprintf(`{ + "id": "%s", + "name":"%s" + }`, d.username, d.username) + w.Header().Set("Content-Type", "application/json; charset=utf-8") if _, err := w.Write([]byte(res)); err != nil { w.WriteHeader(http.StatusInternalServerError) @@ -106,11 +123,33 @@ func NewDev(p Params) Provider { InfoURL: fmt.Sprintf("http://127.0.0.1:%d/user", devAuthPort), MapUser: func(data userData, _ []byte) store.User { userInfo := store.User{ - ID: "dev_user", - Name: "developer", + ID: data.value("id"), + Name: data.value("name"), Picture: "", } return userInfo }, }) } + +var devUserForm = ` + + + Remark42 Dev User + + + +
+ username: + +
+ + +` diff --git a/backend/app/rest/auth/dev_provider_test.go b/backend/app/rest/auth/dev_provider_test.go index 39bc36ad..831ff3c1 100644 --- a/backend/app/rest/auth/dev_provider_test.go +++ b/backend/app/rest/auth/dev_provider_test.go @@ -20,7 +20,7 @@ func TestDevProvider(t *testing.T) { JwtService: NewJWT("12345", false, time.Hour, time.Hour*24*31), PermissionChecker: &mockUserPermissions{admin: "dev_user"}, } - srv := DevAuthServer{Provider: NewDev(params)} + srv := DevAuthServer{Provider: NewDev(params), nonInteractive: true, username: "dev_user"} // auth routes for all providers router := chi.NewRouter() @@ -62,7 +62,7 @@ func TestDevProvider(t *testing.T) { assert.Nil(t, err) u := *claims.User - assert.Equal(t, store.User{Name: "developer", ID: "dev_user", Picture: "", IP: "", + assert.Equal(t, store.User{Name: "dev_user", ID: "dev_user", Picture: "", IP: "", Admin: true, Blocked: false, Verified: false}, u) }