mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-16 07:16:38 +00:00
[self-hosted] support embedded IDP postgres db (#5443)
* Add postgres config for embedded idp Entire-Checkpoint: 9ace190c1067 * Rename idpStore to authStore Entire-Checkpoint: 73a896c79614 * Fix review notes Entire-Checkpoint: 6556783c0df3 * Don't accept pq port = 0 Entire-Checkpoint: 80d45e37782f * Optimize configs Entire-Checkpoint: 80d45e37782f * Fix lint issues Entire-Checkpoint: 3eec968003d1 * Fail fast on combined postgres config Entire-Checkpoint: b17839d3d8c6 * Simplify management config method Entire-Checkpoint: 0f083effa20e
This commit is contained in:
@@ -52,7 +52,7 @@ type EmbeddedIdPConfig struct {
|
||||
|
||||
// EmbeddedStorageConfig holds storage configuration for the embedded IdP.
|
||||
type EmbeddedStorageConfig struct {
|
||||
// Type is the storage type (currently only "sqlite3" is supported)
|
||||
// Type is the storage type: "sqlite3" (default) or "postgres"
|
||||
Type string
|
||||
// Config contains type-specific configuration
|
||||
Config EmbeddedStorageTypeConfig
|
||||
@@ -62,6 +62,8 @@ type EmbeddedStorageConfig struct {
|
||||
type EmbeddedStorageTypeConfig struct {
|
||||
// File is the path to the SQLite database file (for sqlite3 type)
|
||||
File string
|
||||
// DSN is the connection string for postgres
|
||||
DSN string
|
||||
}
|
||||
|
||||
// OwnerConfig represents the initial owner/admin user for the embedded IdP.
|
||||
@@ -74,6 +76,22 @@ type OwnerConfig struct {
|
||||
Username string
|
||||
}
|
||||
|
||||
// buildIdpStorageConfig builds the Dex storage config map based on the storage type.
|
||||
func buildIdpStorageConfig(storageType string, cfg EmbeddedStorageTypeConfig) (map[string]interface{}, error) {
|
||||
switch storageType {
|
||||
case "sqlite3":
|
||||
return map[string]interface{}{
|
||||
"file": cfg.File,
|
||||
}, nil
|
||||
case "postgres":
|
||||
return map[string]interface{}{
|
||||
"dsn": cfg.DSN,
|
||||
}, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported IdP storage type: %s", storageType)
|
||||
}
|
||||
}
|
||||
|
||||
// ToYAMLConfig converts EmbeddedIdPConfig to dex.YAMLConfig.
|
||||
func (c *EmbeddedIdPConfig) ToYAMLConfig() (*dex.YAMLConfig, error) {
|
||||
if c.Issuer == "" {
|
||||
@@ -85,6 +103,14 @@ func (c *EmbeddedIdPConfig) ToYAMLConfig() (*dex.YAMLConfig, error) {
|
||||
if c.Storage.Type == "sqlite3" && c.Storage.Config.File == "" {
|
||||
return nil, fmt.Errorf("storage file is required for sqlite3")
|
||||
}
|
||||
if c.Storage.Type == "postgres" && c.Storage.Config.DSN == "" {
|
||||
return nil, fmt.Errorf("storage DSN is required for postgres")
|
||||
}
|
||||
|
||||
storageConfig, err := buildIdpStorageConfig(c.Storage.Type, c.Storage.Config)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid IdP storage config: %w", err)
|
||||
}
|
||||
|
||||
// Build CLI redirect URIs including the device callback (both relative and absolute)
|
||||
cliRedirectURIs := c.CLIRedirectURIs
|
||||
@@ -100,10 +126,8 @@ func (c *EmbeddedIdPConfig) ToYAMLConfig() (*dex.YAMLConfig, error) {
|
||||
cfg := &dex.YAMLConfig{
|
||||
Issuer: c.Issuer,
|
||||
Storage: dex.Storage{
|
||||
Type: c.Storage.Type,
|
||||
Config: map[string]interface{}{
|
||||
"file": c.Storage.Config.File,
|
||||
},
|
||||
Type: c.Storage.Type,
|
||||
Config: storageConfig,
|
||||
},
|
||||
Web: dex.Web{
|
||||
AllowedOrigins: []string{"*"},
|
||||
|
||||
Reference in New Issue
Block a user