@@ -20,10 +20,13 @@ import (
20
20
"context"
21
21
"encoding/base64"
22
22
"encoding/json"
23
+ "fmt"
23
24
"net/http"
24
25
"net/url"
25
26
"time"
26
27
28
+ "github.com/go-openapi/errors"
29
+
27
30
"github.com/go-openapi/runtime"
28
31
"github.com/go-openapi/runtime/middleware"
29
32
"github.com/minio/console/api/operations"
@@ -37,10 +40,13 @@ func registerLogoutHandlers(api *operations.ConsoleAPI) {
37
40
api .AuthLogoutHandler = authApi .LogoutHandlerFunc (func (params authApi.LogoutParams , session * models.Principal ) middleware.Responder {
38
41
err := getLogoutResponse (session , params )
39
42
if err != nil {
40
- api .Logger ("IDP logout failed: %v" , err .APIError )
43
+ api .Logger ("IDP logout failed: %v" , err .APIError . DetailedMessage )
41
44
}
42
45
// Custom response writer to expire the session cookies
43
46
return middleware .ResponderFunc (func (w http.ResponseWriter , p runtime.Producer ) {
47
+ if err != nil {
48
+ w .Header ().Set ("IDP-Logout" , fmt .Sprintf ("%v" , err .APIError .DetailedMessage ))
49
+ }
44
50
expiredCookie := ExpireSessionCookie ()
45
51
// this will tell the browser to clear the cookie and invalidate user session
46
52
// additionally we are deleting the cookie from the client side
@@ -104,10 +110,14 @@ func logoutFromIDPProvider(r *http.Request, state string) error {
104
110
client := & http.Client {
105
111
Transport : GlobalTransport ,
106
112
}
107
- _ , err := client .PostForm (providerCfg .EndSessionEndpoint , params )
113
+ result , err := client .PostForm (providerCfg .EndSessionEndpoint , params )
108
114
if err != nil {
109
- return err
115
+ return errors .New (500 , "failed to logout: %v" , err .Error ())
116
+ }
117
+ if result .StatusCode != 204 {
118
+ return errors .New (int32 (result .StatusCode ), "failed to logout" )
110
119
}
111
120
}
121
+
112
122
return nil
113
123
}
0 commit comments