From a79b1de2d0247a424f49cecaa267d30e8fa70a83 Mon Sep 17 00:00:00 2001 From: viehlieb Date: Sun, 18 Dec 2022 18:26:28 +0000 Subject: [PATCH] feat: provide logout url for openid providers (#1340) Co-authored-by: kolaente Reviewed-on: https://kolaente.dev/vikunja/api/pulls/1340 Co-authored-by: viehlieb Co-committed-by: viehlieb --- config.yml.sample | 3 +++ pkg/modules/auth/openid/openid.go | 1 + pkg/modules/auth/openid/providers.go | 8 +++++++- pkg/swagger/docs.go | 3 +++ pkg/swagger/swagger.json | 3 +++ pkg/swagger/swagger.yaml | 2 ++ 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/config.yml.sample b/config.yml.sample index 8399423919c..6c9031b14f7 100644 --- a/config.yml.sample +++ b/config.yml.sample @@ -311,6 +311,9 @@ auth: - name: # The auth url to send users to if they want to authenticate using OpenID Connect. authurl: + # The oidc logouturl that users will be redirected to on logout. + # Leave empty or delete key, if you do not want to be redirected. + logouturl: # The client ID used to authenticate Vikunja at the OpenID Connect provider. clientid: # The client secret used to authenticate Vikunja at the OpenID Connect provider. diff --git a/pkg/modules/auth/openid/openid.go b/pkg/modules/auth/openid/openid.go index c282bea8f6d..e8202195e28 100644 --- a/pkg/modules/auth/openid/openid.go +++ b/pkg/modules/auth/openid/openid.go @@ -51,6 +51,7 @@ type Provider struct { Key string `json:"key"` OriginalAuthURL string `json:"-"` AuthURL string `json:"auth_url"` + LogoutURL string `json:"logout_url"` ClientID string `json:"client_id"` ClientSecret string `json:"-"` openIDProvider *oidc.Provider diff --git a/pkg/modules/auth/openid/providers.go b/pkg/modules/auth/openid/providers.go index 149f8b8f771..e260e9b3ccc 100644 --- a/pkg/modules/auth/openid/providers.go +++ b/pkg/modules/auth/openid/providers.go @@ -60,6 +60,7 @@ func GetAllProviders() (providers []*Provider, err error) { } provider, err := getProviderFromMap(pi) + if err != nil { if provider != nil { log.Errorf("Error while getting openid provider %s: %s", provider.Name, err) @@ -119,12 +120,18 @@ func getProviderFromMap(pi map[string]interface{}) (provider *Provider, err erro k := getKeyFromName(name) + logoutURL, ok := pi["logouturl"].(string) + if !ok { + logoutURL = "" + } + provider = &Provider{ Name: pi["name"].(string), Key: k, AuthURL: pi["authurl"].(string), OriginalAuthURL: pi["authurl"].(string), ClientSecret: pi["clientsecret"].(string), + LogoutURL: logoutURL, } cl, is := pi["clientid"].(int) @@ -143,7 +150,6 @@ func getProviderFromMap(pi map[string]interface{}) (provider *Provider, err erro ClientID: provider.ClientID, ClientSecret: provider.ClientSecret, RedirectURL: config.AuthOpenIDRedirectURL.GetString() + k, - // Discovery returns the OAuth2 endpoints. Endpoint: provider.openIDProvider.Endpoint(), diff --git a/pkg/swagger/docs.go b/pkg/swagger/docs.go index 1f416c79844..55a06400670 100644 --- a/pkg/swagger/docs.go +++ b/pkg/swagger/docs.go @@ -9099,6 +9099,9 @@ const docTemplate = `{ "key": { "type": "string" }, + "logout_url": { + "type": "string" + }, "name": { "type": "string" } diff --git a/pkg/swagger/swagger.json b/pkg/swagger/swagger.json index b25bd7a5d06..f27a45af3c2 100644 --- a/pkg/swagger/swagger.json +++ b/pkg/swagger/swagger.json @@ -9090,6 +9090,9 @@ "key": { "type": "string" }, + "logout_url": { + "type": "string" + }, "name": { "type": "string" } diff --git a/pkg/swagger/swagger.yaml b/pkg/swagger/swagger.yaml index 1f62d9f031a..692a9f3c7a6 100644 --- a/pkg/swagger/swagger.yaml +++ b/pkg/swagger/swagger.yaml @@ -1120,6 +1120,8 @@ definitions: type: string key: type: string + logout_url: + type: string name: type: string type: object