Skip to content

Commit f94bd54

Browse files
authored
feat: update end session request to pass all params according to specification (#754)
* feat: update end session request to pass all params according to specification * register encoder
1 parent 7d57aaa commit f94bd54

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

pkg/oidc/session.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package oidc
22

33
// EndSessionRequest for the RP-Initiated Logout according to:
4-
//https://openid.net/specs/openid-connect-rpinitiated-1_0.html#RPLogout
4+
// https://openid.net/specs/openid-connect-rpinitiated-1_0.html#RPLogout
55
type EndSessionRequest struct {
6-
IdTokenHint string `schema:"id_token_hint"`
7-
ClientID string `schema:"client_id"`
8-
PostLogoutRedirectURI string `schema:"post_logout_redirect_uri"`
9-
State string `schema:"state"`
6+
IdTokenHint string `schema:"id_token_hint"`
7+
LogoutHint string `schema:"logout_hint"`
8+
ClientID string `schema:"client_id"`
9+
PostLogoutRedirectURI string `schema:"post_logout_redirect_uri"`
10+
State string `schema:"state"`
11+
UILocales Locales `schema:"ui_locales"`
1012
}

pkg/oidc/types.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@ func ParseLocales(locales []string) Locales {
115115
return out
116116
}
117117

118+
func (l Locales) String() string {
119+
tags := make([]string, len(l))
120+
for i, tag := range l {
121+
tags[i] = tag.String()
122+
}
123+
return strings.Join(tags, " ")
124+
}
125+
118126
// UnmarshalText implements the [encoding.TextUnmarshaler] interface.
119127
// It decodes an unquoted space seperated string into Locales.
120128
// Undefined language tags in the input are ignored and ommited from
@@ -231,6 +239,9 @@ func NewEncoder() *schema.Encoder {
231239
e.RegisterEncoder(SpaceDelimitedArray{}, func(value reflect.Value) string {
232240
return value.Interface().(SpaceDelimitedArray).String()
233241
})
242+
e.RegisterEncoder(Locales{}, func(value reflect.Value) string {
243+
return value.Interface().(Locales).String()
244+
})
234245
return e
235246
}
236247

pkg/op/session.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ func ValidateEndSessionRequest(ctx context.Context, req *oidc.EndSessionRequest,
7373

7474
session := &EndSessionRequest{
7575
RedirectURI: ender.DefaultLogoutRedirectURI(),
76+
LogoutHint: req.LogoutHint,
77+
UILocales: req.UILocales,
7678
}
7779
if req.IdTokenHint != "" {
7880
claims, err := VerifyIDTokenHint[*oidc.IDTokenClaims](ctx, req.IdTokenHint, ender.IDTokenHintVerifier(ctx))

pkg/op/storage.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"time"
77

88
jose "github.com/go-jose/go-jose/v4"
9+
"golang.org/x/text/language"
910

1011
"github.com/zitadel/oidc/v3/pkg/oidc"
1112
)
@@ -170,6 +171,8 @@ type EndSessionRequest struct {
170171
ClientID string
171172
IDTokenHintClaims *oidc.IDTokenClaims
172173
RedirectURI string
174+
LogoutHint string
175+
UILocales []language.Tag
173176
}
174177

175178
var ErrDuplicateUserCode = errors.New("user code already exists")

0 commit comments

Comments
 (0)