Fix to render the template in a buffer

This commit is contained in:
Ayato 2024-02-27 22:01:29 +09:00
parent a49642c898
commit 9a288fa017
No known key found for this signature in database
GPG key ID: 56E05AE09DBA012D

View file

@ -1,6 +1,7 @@
package op package op
import ( import (
"bytes"
"context" "context"
_ "embed" _ "embed"
"errors" "errors"
@ -468,12 +469,13 @@ func AuthResponseCode(w http.ResponseWriter, r *http.Request, authReq AuthReques
} }
if authReq.GetResponseMode() == oidc.ResponseModeFormPost { if authReq.GetResponseMode() == oidc.ResponseModeFormPost {
err = AuthResponseFormPost(w, authReq.GetRedirectURI(), &codeResponse, authorizer.Encoder()) res, err := AuthResponseFormPost(authReq.GetRedirectURI(), &codeResponse, authorizer.Encoder())
if err != nil { if err != nil {
AuthRequestError(w, r, authReq, err, authorizer) AuthRequestError(w, r, authReq, err, authorizer)
return return
} }
res.WriteTo(w)
return return
} }
@ -499,12 +501,13 @@ func AuthResponseToken(w http.ResponseWriter, r *http.Request, authReq AuthReque
} }
if authReq.GetResponseMode() == oidc.ResponseModeFormPost { if authReq.GetResponseMode() == oidc.ResponseModeFormPost {
err = AuthResponseFormPost(w, authReq.GetRedirectURI(), resp, authorizer.Encoder()) res, err := AuthResponseFormPost(authReq.GetRedirectURI(), resp, authorizer.Encoder())
if err != nil { if err != nil {
AuthRequestError(w, r, authReq, err, authorizer) AuthRequestError(w, r, authReq, err, authorizer)
return return
} }
res.WriteTo(w)
return return
} }
@ -565,11 +568,11 @@ var formPostHtmlTemplate string
var formPostTmpl = template.Must(template.New("form_post").Parse(formPostHtmlTemplate)) var formPostTmpl = template.Must(template.New("form_post").Parse(formPostHtmlTemplate))
// AuthResponseFormPost responds a html page that automatically submits the form which contains the auth response parameters // AuthResponseFormPost responds a html page that automatically submits the form which contains the auth response parameters
func AuthResponseFormPost(w http.ResponseWriter, redirectURI string, response any, encoder httphelper.Encoder) error { func AuthResponseFormPost(redirectURI string, response any, encoder httphelper.Encoder) (*bytes.Buffer, error) {
values := make(map[string][]string) values := make(map[string][]string)
err := encoder.Encode(response, values) err := encoder.Encode(response, values)
if err != nil { if err != nil {
return oidc.ErrServerError().WithParent(err) return nil, oidc.ErrServerError().WithParent(err)
} }
params := &struct { params := &struct {
@ -580,12 +583,13 @@ func AuthResponseFormPost(w http.ResponseWriter, redirectURI string, response an
Params: values, Params: values,
} }
err = formPostTmpl.Execute(w, params) var buf bytes.Buffer
err = formPostTmpl.Execute(&buf, params)
if err != nil { if err != nil {
return oidc.ErrServerError().WithParent(err) return nil, oidc.ErrServerError().WithParent(err)
} }
return nil return &buf, nil
} }
func setFragment(uri *url.URL, params url.Values) string { func setFragment(uri *url.URL, params url.Values) string {