this repo has no description

refactor: add some logging

Changed files
+26 -15
cmd
web_server_demo
+21 -10
cmd/web_server_demo/handle_auth.go
···
import (
"encoding/json"
"fmt"
+
"log/slog"
"net/url"
"strings"
"time"
···
return err
}
+
params := url.Values{
+
"client_id": {s.args.UrlRoot + serverMetadataPath},
+
"request_uri": {parResp.RequestUri},
+
"ext-one": {"hello"},
+
"ext-two": {"world"},
+
}
+
u, _ := url.Parse(meta.AuthorizationEndpoint)
-
u.RawQuery = fmt.Sprintf("client_id=%s&request_uri=%s", url.QueryEscape(s.args.UrlRoot+serverMetadataPath), parResp.RequestUri)
+
u.RawQuery = params.Encode()
sess, err := session.Get("session", e)
if err != nil {
···
}
// make sure the session is empty
-
sess.Values = map[interface{}]interface{}{}
+
sess.Values = map[any]any{}
sess.Values["oauth_state"] = parResp.State
sess.Values["oauth_did"] = did
···
}
func (s *TestServer) handleCallback(e echo.Context) error {
-
resState := e.QueryParam("state")
-
resIss := e.QueryParam("iss")
-
resCode := e.QueryParam("code")
+
params := e.QueryParams()
+
state := params.Get("state")
+
iss := params.Get("iss")
+
code := params.Get("code")
sess, err := session.Get("session", e)
if err != nil {
···
sessState := sess.Values["oauth_state"]
-
if resState == "" || resIss == "" || resCode == "" {
+
if state == "" || iss == "" || code == "" {
return fmt.Errorf("request missing needed parameters")
}
-
if resState != sessState {
+
if state != sessState {
return fmt.Errorf("session state does not match response state")
}
···
return err
}
-
if resIss != oauthRequest.AuthserverIss {
+
if iss != oauthRequest.AuthserverIss {
return fmt.Errorf("incoming iss did not match authserver iss")
}
···
return err
}
-
initialTokenResp, err := s.oauthClient.InitialTokenRequest(e.Request().Context(), resCode, resIss, oauthRequest.PkceVerifier, oauthRequest.DpopAuthserverNonce, jwk)
+
initialTokenResp, err := s.oauthClient.InitialTokenRequest(e.Request().Context(), code, iss, oauthRequest.PkceVerifier, oauthRequest.DpopAuthserverNonce, jwk)
if err != nil {
return err
}
···
}
// make sure the session is empty
-
sess.Values = map[interface{}]interface{}{}
+
sess.Values = map[any]any{}
sess.Values["did"] = oauthRequest.Did
if err := sess.Save(e.Request(), e.Response()); err != nil {
return err
}
+
+
slog.Default().Info("handled callback", "params", params)
return e.Redirect(302, "/")
}
+5 -5
oauth.go
···
"client_assertion": {clientAssertion},
}
+
if loginHint != "" {
+
params.Set("login_hint", loginHint)
+
}
+
for _, e := range extras {
if !strings.HasPrefix(e.Name, "ext-") {
e.Name = "ext-" + e.Name
}
e.Value = url.QueryEscape(e.Value)
-
params[e.Name] = []string{e.Value}
-
}
-
-
if loginHint != "" {
-
params.Set("login_hint", loginHint)
+
params.Set(e.Name, e.Value)
}
_, err = helpers.IsUrlSafeAndParsed(parUrl)