Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions example/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ var (
Scopes: []string{"all"},
RedirectURL: "http://localhost:9094/oauth2",
Endpoint: oauth2.Endpoint{
AuthURL: authServerURL + "/authorize",
TokenURL: authServerURL + "/token",
AuthURL: authServerURL + "/oauth/authorize",
TokenURL: authServerURL + "/oauth/token",
},
}
globalToken *oauth2.Token // Non-concurrent security
Expand Down
78 changes: 67 additions & 11 deletions example/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,61 @@ package main

import (
"encoding/json"
"flag"
"fmt"
"github.com/go-oauth2/oauth2/v4/generates"
"io"
"log"
"net/http"
"net/http/httputil"
"net/url"
"os"
"time"

"github.com/dgrijalva/jwt-go"
"github.com/go-oauth2/oauth2/v4/errors"
"github.com/go-oauth2/oauth2/v4/generates"
"github.com/go-oauth2/oauth2/v4/manage"
"github.com/go-oauth2/oauth2/v4/models"
"github.com/go-oauth2/oauth2/v4/server"
"github.com/go-oauth2/oauth2/v4/store"
"github.com/go-session/session"
)

var (
dumpvar bool
idvar string
secretvar string
domainvar string
portvar int
)

func init() {
flag.BoolVar(&dumpvar, "d", true, "Dump requests and responses")
flag.StringVar(&idvar, "i", "222222", "The client id being passed in")
flag.StringVar(&secretvar, "s", "22222222", "The client secret being passed in")
flag.StringVar(&domainvar, "r", "http://localhost:9094", "The domain of the redirect url")
flag.IntVar(&portvar, "p", 9096, "the base port for the server")
}

func main() {
flag.Parse()
if dumpvar {
log.Println("Dumping requests")
}
manager := manage.NewDefaultManager()
manager.SetAuthorizeCodeTokenCfg(manage.DefaultAuthorizeCodeTokenCfg)

// token store
manager.MustTokenStorage(store.NewMemoryTokenStore())

// generate jwt access token
manager.MapAccessGenerate(generates.NewJWTAccessGenerate("", []byte("00000000"), jwt.SigningMethodHS512))
// manager.MapAccessGenerate(generates.NewJWTAccessGenerate("", []byte("00000000"), jwt.SigningMethodHS512))
manager.MapAccessGenerate(generates.NewAccessGenerate())

clientStore := store.NewClientStore()
clientStore.Set("222222", &models.Client{
ID: "222222",
Secret: "22222222",
Domain: "http://localhost:9094",
clientStore.Set(idvar, &models.Client{
ID: idvar,
Secret: secretvar,
Domain: domainvar,
})
manager.MapClientStorage(clientStore)

Expand All @@ -59,7 +83,11 @@ func main() {
http.HandleFunc("/login", loginHandler)
http.HandleFunc("/auth", authHandler)

http.HandleFunc("/authorize", func(w http.ResponseWriter, r *http.Request) {
http.HandleFunc("/oauth/authorize", func(w http.ResponseWriter, r *http.Request) {
if dumpvar {
dumpRequest(os.Stdout, "authorize", r)
}

store, err := session.Start(r.Context(), w, r)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
Expand All @@ -81,14 +109,21 @@ func main() {
}
})

http.HandleFunc("/token", func(w http.ResponseWriter, r *http.Request) {
http.HandleFunc("/oauth/token", func(w http.ResponseWriter, r *http.Request) {
if dumpvar {
_ = dumpRequest(os.Stdout, "token", r) // Ignore the error
}

err := srv.HandleTokenRequest(w, r)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
})

http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
if dumpvar {
_ = dumpRequest(os.Stdout, "test", r) // Ignore the error
}
token, err := srv.ValidationBearerToken(r)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
Expand All @@ -105,11 +140,26 @@ func main() {
e.Encode(data)
})

log.Println("Server is running at 9096 port.")
log.Fatal(http.ListenAndServe(":9096", nil))
log.Printf("Server is running at %d port.\n", portvar)
log.Printf("Point your OAuth client Auth endpoint to %s:%d%s", "http://localhost", portvar, "/oauth/authorize")
log.Printf("Point your OAuth client Token endpoint to %s:%d%s", "http://localhost", portvar, "/oauth/token")
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d",portvar), nil))
}

func dumpRequest(writer io.Writer, header string, r *http.Request) error {
data, err := httputil.DumpRequest(r, true)
if err != nil {
return err
}
writer.Write([]byte("\n" + header + ": \n"))
writer.Write(data)
return nil
}

func userAuthorizeHandler(w http.ResponseWriter, r *http.Request) (userID string, err error) {
if dumpvar {
_ = dumpRequest(os.Stdout, "userAuthorizeHandler", r) // Ignore the error
}
store, err := session.Start(r.Context(), w, r)
if err != nil {
return
Expand All @@ -136,6 +186,9 @@ func userAuthorizeHandler(w http.ResponseWriter, r *http.Request) (userID string
}

func loginHandler(w http.ResponseWriter, r *http.Request) {
if dumpvar {
_ = dumpRequest(os.Stdout, "login", r) // Ignore the error
}
store, err := session.Start(r.Context(), w, r)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
Expand All @@ -160,6 +213,9 @@ func loginHandler(w http.ResponseWriter, r *http.Request) {
}

func authHandler(w http.ResponseWriter, r *http.Request) {
if dumpvar {
_ = dumpRequest(os.Stdout, "auth", r) // Ignore the error
}
store, err := session.Start(nil, w, r)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
Expand Down
2 changes: 1 addition & 1 deletion example/server/static/auth.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<body>
<div class="container">
<div class="jumbotron">
<form action="/authorize" method="POST">
<form action="/oauth/authorize" method="POST">
<h1>Authorize</h1>
<p>The client would like to perform actions on your behalf.</p>
<p>
Expand Down