@@ -20,6 +20,8 @@ import (
2020 "context"
2121 "encoding/base64"
2222 "encoding/json"
23+ "fmt"
24+ "github.com/go-openapi/errors"
2325 "net/http"
2426 "net/url"
2527 "time"
@@ -37,10 +39,13 @@ func registerLogoutHandlers(api *operations.ConsoleAPI) {
3739 api .AuthLogoutHandler = authApi .LogoutHandlerFunc (func (params authApi.LogoutParams , session * models.Principal ) middleware.Responder {
3840 err := getLogoutResponse (session , params )
3941 if err != nil {
40- api .Logger ("IDP logout failed: %v" , err .APIError )
42+ api .Logger ("IDP logout failed: %v" , err .APIError . DetailedMessage )
4143 }
4244 // Custom response writer to expire the session cookies
4345 return middleware .ResponderFunc (func (w http.ResponseWriter , p runtime.Producer ) {
46+ if err != nil {
47+ w .Header ().Set ("IDP-Logout" , fmt .Sprintf ("%v" , err .APIError .DetailedMessage ))
48+ }
4449 expiredCookie := ExpireSessionCookie ()
4550 // this will tell the browser to clear the cookie and invalidate user session
4651 // additionally we are deleting the cookie from the client side
@@ -104,10 +109,14 @@ func logoutFromIDPProvider(r *http.Request, state string) error {
104109 client := & http.Client {
105110 Transport : GlobalTransport ,
106111 }
107- _ , err := client .PostForm (providerCfg .EndSessionEndpoint , params )
112+ result , err := client .PostForm (providerCfg .EndSessionEndpoint , params )
108113 if err != nil {
109- return err
114+ return errors .New (500 , "failed to logout: %v" , err .Error ())
115+ }
116+ if result .StatusCode != 204 {
117+ return errors .New (int32 (result .StatusCode ), "failed to logout" )
110118 }
111119 }
120+
112121 return nil
113122}
0 commit comments