oauth2: Exchange code for access token

This commit is contained in:
Rob Watson 2022-05-19 22:35:00 +02:00
parent 71117aa70d
commit 1366ff6c27
1 changed files with 15 additions and 4 deletions

View File

@ -1,6 +1,7 @@
package httpserver
import (
"context"
"log"
"net/http"
"path/filepath"
@ -24,7 +25,7 @@ func newHandler(cfg config.Config) *handler {
Scopes: []string{"tweet.read", "tweet.write", "users.read", "offline.access"},
Endpoint: oauth2.Endpoint{
AuthURL: "https://twitter.com/i/oauth2/authorize",
TokenURL: "https://twitter.com/i/oauth2/token",
TokenURL: "https://api.twitter.com/2/oauth2/token",
},
},
}
@ -36,7 +37,7 @@ func (h *handler) getIndex(c echo.Context) error {
func (h *handler) getLogin(c echo.Context) error {
url := h.oauth2Config.AuthCodeURL(
// TODO: implement state token
// TODO: implement state and code_challenge tokens
"state",
oauth2.SetAuthURLParam("code_challenge", "challenge"),
oauth2.SetAuthURLParam("code_challenge_method", "plain"),
@ -45,8 +46,18 @@ func (h *handler) getLogin(c echo.Context) error {
}
func (h *handler) getCallback(c echo.Context) error {
log.Printf("got params = %+v", c.QueryParams())
return c.String(http.StatusOK, "Received response")
code := c.QueryParam("code")
if code == "" {
return echo.NewHTTPError(http.StatusBadRequest, "empty code")
}
_, err := h.oauth2Config.Exchange(context.Background(), code, oauth2.SetAuthURLParam("code_verifier", "challenge"))
if err != nil {
log.Printf("error exchanging code: %v", err)
return echo.NewHTTPError(http.StatusInternalServerError, "error exchanging code")
}
return c.String(http.StatusOK, "ok")
}
func Start(cfg config.Config) error {