mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-06-16 03:49:08 -04:00
This works the previous commits so that clients can add an addtional 'platform' query parameter to the webfinger request that can be used to query the oidc client id and list of scopes that the clients need to use when connecting to the IDP. This also removes the non-standard issuer relatation introduced in a previous commit as we can just introduce new relations in the http://openid.net name space. For IDP like Authentik that create a separate issuer url per Client (Application in Authentik's terms) it is suggested to just configure as single Client and use that id for all platforms (i.e. setting 'WEBFINGER_ANDROID_OIDC_CLIENT_ID', 'WEBFINGER_DESKTOP_OIDC_CLIENT_ID', 'WEBFINGER_IOS_OIDC_CLIENT_ID' and 'WEBFINGER_WEB_OIDC_CLIENT_ID' to same value. Related: #2088 Related: https://github.com/opencloud-eu/desktop/issues/246
114 lines
2.8 KiB
Go
114 lines
2.8 KiB
Go
package defaults
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/opencloud-eu/opencloud/services/webfinger/pkg/config"
|
|
"github.com/opencloud-eu/opencloud/services/webfinger/pkg/relations"
|
|
)
|
|
|
|
var (
|
|
nativeAppScopes = []string{"openid", "profile", "email", "offline_access"}
|
|
webAppScopes = []string{"openid", "profile", "email"}
|
|
)
|
|
|
|
// FullDefaultConfig returns a fully initialized default configuration
|
|
func FullDefaultConfig() *config.Config {
|
|
cfg := DefaultConfig()
|
|
EnsureDefaults(cfg)
|
|
Sanitize(cfg)
|
|
return cfg
|
|
}
|
|
|
|
// DefaultConfig returns a basic default configuration
|
|
func DefaultConfig() *config.Config {
|
|
return &config.Config{
|
|
Debug: config.Debug{
|
|
Addr: "127.0.0.1:9279",
|
|
Token: "",
|
|
Pprof: false,
|
|
Zpages: false,
|
|
},
|
|
HTTP: config.HTTP{
|
|
Addr: "127.0.0.1:9275",
|
|
Root: "/",
|
|
Namespace: "eu.opencloud.web",
|
|
CORS: config.CORS{
|
|
AllowedOrigins: []string{"https://localhost:9200"},
|
|
AllowCredentials: false,
|
|
},
|
|
},
|
|
Service: config.Service{
|
|
Name: "webfinger",
|
|
},
|
|
|
|
OpenCloudURL: "https://localhost:9200",
|
|
Relations: []string{relations.OpenIDConnectRel, relations.OpenCloudInstanceRel},
|
|
Instances: []config.Instance{
|
|
{
|
|
Claim: "sub",
|
|
Regex: ".+",
|
|
Href: "{{.OC_URL}}",
|
|
Titles: map[string]string{
|
|
"en": "OpenCloud Instance",
|
|
},
|
|
},
|
|
},
|
|
IDP: "https://localhost:9200",
|
|
Insecure: false,
|
|
AndroidClientID: "OpenCloudAndroid",
|
|
AndroidClientScopes: nativeAppScopes,
|
|
DesktopClientID: "OpenCloudDesktop",
|
|
DesktopClientScopes: nativeAppScopes,
|
|
IOSClientID: "OpenCloudIOS",
|
|
IOSClientScopes: nativeAppScopes,
|
|
WebClientID: "web",
|
|
WebClientScopes: webAppScopes,
|
|
}
|
|
}
|
|
|
|
// EnsureDefaults adds default values to the configuration if they are not set yet
|
|
func EnsureDefaults(cfg *config.Config) {
|
|
if cfg.LogLevel == "" {
|
|
cfg.LogLevel = "error"
|
|
}
|
|
|
|
if cfg.Commons != nil {
|
|
cfg.HTTP.TLS = cfg.Commons.HTTPServiceTLS
|
|
}
|
|
|
|
if (cfg.Commons != nil && cfg.Commons.OpenCloudURL != "") &&
|
|
(cfg.HTTP.CORS.AllowedOrigins == nil ||
|
|
len(cfg.HTTP.CORS.AllowedOrigins) == 1 &&
|
|
cfg.HTTP.CORS.AllowedOrigins[0] == "https://localhost:9200") {
|
|
cfg.HTTP.CORS.AllowedOrigins = []string{cfg.Commons.OpenCloudURL}
|
|
}
|
|
}
|
|
|
|
// Sanitize sanitized the configuration
|
|
func Sanitize(cfg *config.Config) {
|
|
// sanitize config
|
|
if cfg.HTTP.Root != "/" {
|
|
cfg.HTTP.Root = strings.TrimSuffix(cfg.HTTP.Root, "/")
|
|
}
|
|
|
|
cfg.OIDCClientConfigs = map[string]config.OIDCClientConfig{
|
|
"android": {
|
|
ClientID: cfg.AndroidClientID,
|
|
Scopes: cfg.AndroidClientScopes,
|
|
},
|
|
"desktop": {
|
|
ClientID: cfg.DesktopClientID,
|
|
Scopes: cfg.DesktopClientScopes,
|
|
},
|
|
"ios": {
|
|
ClientID: cfg.IOSClientID,
|
|
Scopes: cfg.IOSClientScopes,
|
|
},
|
|
"web": {
|
|
ClientID: cfg.WebClientID,
|
|
Scopes: cfg.WebClientScopes,
|
|
},
|
|
}
|
|
}
|