diff --git a/storage/kubernetes/client.go b/storage/kubernetes/client.go index dc238a9c3f7a63d71da2be8216e859bf218d758b..9f5d0d3f7843e5045214c051fd0d9d130ea92e89 100644 --- a/storage/kubernetes/client.go +++ b/storage/kubernetes/client.go @@ -135,6 +135,9 @@ func checkHTTPErr(r *http.Response, validStatusCodes ...int) error { if r.StatusCode == http.StatusNotFound { return storage.ErrNotFound } + if r.Request.Method == "POST" && r.StatusCode == http.StatusConflict { + return storage.ErrAlreadyExists + } var url, method string if r.Request != nil { diff --git a/storage/kubernetes/storage.go b/storage/kubernetes/storage.go index 421b74c90b7e67ee46d61aa6638f413af598104c..fd7f04ad4559b283c6a1bd3fd9dfc95293f11fcb 100644 --- a/storage/kubernetes/storage.go +++ b/storage/kubernetes/storage.go @@ -31,7 +31,7 @@ const ( resourceRefreshToken = "refreshtokens" resourceKeys = "signingkeies" // Kubernetes attempts to pluralize. resourcePassword = "passwords" - resourceOfflineSessions = "offlinesessions" + resourceOfflineSessions = "offlinesessionses" // Again attempts to pluralize. ) // Config values for the Kubernetes storage type. diff --git a/storage/kubernetes/types.go b/storage/kubernetes/types.go index 81dc01c32a34d94857b6b9dc86e9669a7fb75589..c362452fca26a45eefbff3aeb82a9c1e1db710ee 100644 --- a/storage/kubernetes/types.go +++ b/storage/kubernetes/types.go @@ -502,9 +502,14 @@ func (cli *client) fromStorageOfflineSessions(o storage.OfflineSessions) Offline } func toStorageOfflineSessions(o OfflineSessions) storage.OfflineSessions { - return storage.OfflineSessions{ + s := storage.OfflineSessions{ UserID: o.UserID, ConnID: o.ConnID, Refresh: o.Refresh, } + if s.Refresh == nil { + // Server code assumes this will be non-nil. + s.Refresh = make(map[string]*storage.RefreshTokenRef) + } + return s }