Compare commits

...
3 Commits
3 changed files with 48 additions and 38 deletions

No files matched your search

+1 -10
View File
@@ -83,16 +83,7 @@ func RunServer() {
go DoScheduledWork()
go messageSender.Initialize()
// oidcInit
oidcProvider, err := database.GetOidcConfigByName(conf.OAuthProvider)
if err != nil {
log.Printf("Failed to get OIDC provider config: %v", err)
}
err = oauth.LoadProvider(oidcProvider.Name, oidcProvider.Addition)
if err != nil {
log.Printf("Failed to load OIDC provider: %v", err)
} else {
log.Printf("Using %s as OIDC provider", oidcProvider.Name)
}
go oauth.Initialize()
config.Subscribe(func(event config.ConfigEvent) {
if event.New.OAuthProvider != event.Old.OAuthProvider {
oidcProvider, err := database.GetOidcConfigByName(event.New.OAuthProvider)
+4 -4
View File
@@ -22,10 +22,10 @@ func TestRegisterAndGetProviderConfigs(t *testing.T) {
t.Error("Expected non-empty OIDC provider names, got empty")
}
err := LoadProvider("github", `{"client_id":"test_id","client_secret":"test_secret"}`)
if err != nil {
t.Errorf("Failed to load provider: %v", err)
}
//err := LoadProvider("github", `{"client_id":"test_id","client_secret":"test_secret"}`)
//if err != nil {
// t.Errorf("Failed to load provider: %v", err)
//}
cfg := CurrentProvider().GetConfiguration()
if cfg == nil {
t.Error("Expected non-nil configuration for 'github' provider, got nil")
+43 -24
View File
@@ -7,6 +7,7 @@ import (
"sync"
"github.com/komari-monitor/komari/database"
"github.com/komari-monitor/komari/database/config"
"github.com/komari-monitor/komari/database/models"
"github.com/komari-monitor/komari/utils/oauth/factory"
)
@@ -26,30 +27,6 @@ func CurrentProvider() factory.IOidcProvider {
func LoadProvider(name string, configJson string) error {
mu.Lock()
defer mu.Unlock()
go func() {
once.Do(func() {
all := factory.GetAllOidcProviders()
for _, provider := range all {
if _, err := database.GetOidcConfigByName(provider.GetName()); err == nil {
continue
}
// 如果数据库中没有该提供者的配置,则保存默认配置
config := provider.GetConfiguration()
configBytes, err := json.Marshal(config)
if err != nil {
log.Printf("Failed to marshal config for provider %s: %v", provider.GetName(), err)
return
}
if err := database.SaveOidcConfig(&models.OidcProvider{
Name: provider.GetName(),
Addition: string(configBytes),
}); err != nil {
log.Printf("Failed to save default config for provider %s: %v", provider.GetName(), err)
return
}
}
})
}()
if currentProvider != nil && currentProvider.GetName() == name {
return nil // 已经加载了相同的提供程序
}
@@ -72,3 +49,45 @@ func LoadProvider(name string, configJson string) error {
}
return nil
}
func Initialize() error {
once.Do(func() {
all := factory.GetAllOidcProviders()
for _, provider := range all {
if _, err := database.GetOidcConfigByName(provider.GetName()); err == nil {
continue
}
// 如果数据库中没有该提供者的配置,则保存默认配置
config := provider.GetConfiguration()
configBytes, err := json.Marshal(config)
if err != nil {
log.Printf("Failed to marshal config for provider %s: %v", provider.GetName(), err)
return
}
if err := database.SaveOidcConfig(&models.OidcProvider{
Name: provider.GetName(),
Addition: string(configBytes),
}); err != nil {
log.Printf("Failed to save default config for provider %s: %v", provider.GetName(), err)
return
}
}
})
cfg, _ := config.Get()
if cfg.OAuthProvider == "" || cfg.OAuthProvider == "none" {
LoadProvider("empty", "{}")
return nil
}
provider, err := database.GetOidcConfigByName(cfg.OAuthProvider)
if err != nil {
// 如果没有找到配置,使用empty provider
LoadProvider("empty", "{}")
return nil
}
err = LoadProvider(provider.Name, provider.Addition)
if err != nil {
log.Printf("Failed to load OIDC provider %s: %v", provider.Name, err)
return err
}
return nil
}