mirror of
https://github.com/nais/wonderwall.git
synced 2026-05-17 05:47:00 +00:00
42 lines
917 B
Go
42 lines
917 B
Go
package client
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
urlpkg "github.com/nais/wonderwall/pkg/handler/url"
|
|
"github.com/nais/wonderwall/pkg/openid"
|
|
)
|
|
|
|
type Logout struct {
|
|
*Client
|
|
request *http.Request
|
|
logoutCallbackURL string
|
|
}
|
|
|
|
func NewLogout(c *Client, r *http.Request) (*Logout, error) {
|
|
logoutCallbackURL, err := urlpkg.LogoutCallbackURL(r)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("generating logout callback url: %w", err)
|
|
}
|
|
|
|
return &Logout{
|
|
Client: c,
|
|
logoutCallbackURL: logoutCallbackURL,
|
|
request: r,
|
|
}, nil
|
|
}
|
|
|
|
func (in *Logout) SingleLogoutURL(idToken string) string {
|
|
endSessionEndpoint := in.cfg.Provider().EndSessionEndpointURL()
|
|
v := endSessionEndpoint.Query()
|
|
v.Add(openid.PostLogoutRedirectURI, in.logoutCallbackURL)
|
|
|
|
if len(idToken) > 0 {
|
|
v.Add(openid.IDTokenHint, idToken)
|
|
}
|
|
|
|
endSessionEndpoint.RawQuery = v.Encode()
|
|
return endSessionEndpoint.String()
|
|
}
|