func TestImplicit(t *testing.T) { tsrv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { testServer(t, w, r) })) defer tsrv.Close() e := httpexpect.New(t, tsrv.URL) csrv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})) defer csrv.Close() manager.MapClientStorage(clientStore(csrv.URL)) srv = server.NewServer(server.NewConfig(), manager) srv.SetUserAuthorizationHandler(func(w http.ResponseWriter, r *http.Request) (userID string, err error) { userID = "000000" return }) e.GET("/authorize"). WithQuery("response_type", "token"). WithQuery("client_id", clientID). WithQuery("scope", "all"). WithQuery("state", "123"). WithQuery("redirect_uri", url.QueryEscape(csrv.URL+"/oauth2")). Expect().Status(http.StatusOK) }
func TestPasswordCredentials(t *testing.T) { tsrv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { testServer(t, w, r) })) defer tsrv.Close() e := httpexpect.New(t, tsrv.URL) manager.MapClientStorage(clientStore("")) srv = server.NewServer(server.NewConfig(), manager) srv.SetPasswordAuthorizationHandler(func(username, password string) (userID string, err error) { if username == "admin" && password == "123456" { userID = "000000" return } err = errors.New("user not found") return }) val := e.POST("/token"). WithFormField("grant_type", "password"). WithFormField("client_id", clientID). WithFormField("client_secret", clientSecret). WithFormField("username", "admin"). WithFormField("password", "123456"). WithFormField("scope", "all"). Expect(). Status(http.StatusOK). JSON().Raw() t.Log(val) }
func TestRefreshing(t *testing.T) { tsrv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { testServer(t, w, r) })) defer tsrv.Close() e := httpexpect.New(t, tsrv.URL) csrv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/oauth2": r.ParseForm() code, state := r.Form.Get("code"), r.Form.Get("state") if state != "123" { t.Error("unrecognized state:", state) return } jval := e.POST("/token"). WithFormField("redirect_uri", csrv.URL+"/oauth2"). WithFormField("code", code). WithFormField("grant_type", "authorization_code"). WithFormField("client_id", clientID). WithFormField("client_secret", clientSecret). Expect(). Status(http.StatusOK). JSON() refresh := jval.Object().Value("refresh_token").String().Raw() rval := e.POST("/token"). WithFormField("grant_type", "refreshtoken"). WithFormField("client_id", clientID). WithFormField("client_secret", clientSecret). WithFormField("scope", "one"). WithFormField("refresh_token", refresh). Expect(). Status(http.StatusOK). JSON().Raw() t.Log(rval) } })) defer csrv.Close() manager.MapClientStorage(clientStore(csrv.URL)) srv = server.NewServer(server.NewConfig(), manager) srv.SetUserAuthorizationHandler(func(w http.ResponseWriter, r *http.Request) (userID string, err error) { userID = "000000" return }) e.GET("/authorize"). WithQuery("response_type", "code"). WithQuery("client_id", clientID). WithQuery("scope", "all"). WithQuery("state", "123"). WithQuery("redirect_uri", url.QueryEscape(csrv.URL+"/oauth2")). Expect().Status(http.StatusOK) }
func TestClientCredentials(t *testing.T) { tsrv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { testServer(t, w, r) })) defer tsrv.Close() e := httpexpect.New(t, tsrv.URL) manager.MapClientStorage(clientStore("")) srv = server.NewServer(server.NewConfig(), manager) val := e.POST("/token"). WithFormField("grant_type", "clientcredentials"). WithFormField("client_id", clientID). WithFormField("client_secret", clientSecret). WithFormField("scope", "all"). Expect(). Status(http.StatusOK). JSON().Raw() t.Log(val) }
func main() { manager := manage.NewDefaultManager() // token store manager.MapTokenStorage(store.NewMemoryTokenStore(0)) // client store manager.MapClientStorage(store.NewTestClientStore(&models.Client{ ID: "222222", Secret: "22222222", Domain: "http://localhost:9094", })) srv := server.NewServer(server.NewConfig(), manager) srv.SetUserAuthorizationHandler(userAuthorizeHandler) srv.SetInternalErrorHandler(func(r *http.Request, err error) { fmt.Println("OAuth2 Error:", r.RequestURI, err.Error()) }) http.HandleFunc("/login", loginHandler) http.HandleFunc("/auth", authHandler) http.HandleFunc("/authorize", func(w http.ResponseWriter, r *http.Request) { err := srv.HandleAuthorizeRequest(w, r) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) } }) http.HandleFunc("/token", func(w http.ResponseWriter, r *http.Request) { err := srv.HandleTokenRequest(w, r) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) } }) log.Println("Server is running at 9096 port.") log.Fatal(http.ListenAndServe(":9096", nil)) }