|
@@ -19,6 +19,8 @@ import (
|
|
var (
|
|
var (
|
|
cancelSyncHook context.CancelFunc
|
|
cancelSyncHook context.CancelFunc
|
|
hookStopWg sync.WaitGroup
|
|
hookStopWg sync.WaitGroup
|
|
|
|
+ idpSyncMtx sync.Mutex
|
|
|
|
+ idpSyncErr error
|
|
)
|
|
)
|
|
|
|
|
|
func ResetIDPSyncHook() {
|
|
func ResetIDPSyncHook() {
|
|
@@ -57,6 +59,8 @@ func runIDPSyncHook(ctx context.Context) {
|
|
}
|
|
}
|
|
|
|
|
|
func SyncFromIDP() error {
|
|
func SyncFromIDP() error {
|
|
|
|
+ idpSyncMtx.Lock()
|
|
|
|
+ defer idpSyncMtx.Unlock()
|
|
settings := logic.GetServerSettings()
|
|
settings := logic.GetServerSettings()
|
|
|
|
|
|
var idpClient idp.Client
|
|
var idpClient idp.Client
|
|
@@ -64,6 +68,10 @@ func SyncFromIDP() error {
|
|
var idpGroups []idp.Group
|
|
var idpGroups []idp.Group
|
|
var err error
|
|
var err error
|
|
|
|
|
|
|
|
+ defer func() {
|
|
|
|
+ idpSyncErr = err
|
|
|
|
+ }()
|
|
|
|
+
|
|
switch settings.AuthProvider {
|
|
switch settings.AuthProvider {
|
|
case "google":
|
|
case "google":
|
|
idpClient, err = google.NewGoogleWorkspaceClient()
|
|
idpClient, err = google.NewGoogleWorkspaceClient()
|
|
@@ -74,7 +82,8 @@ func SyncFromIDP() error {
|
|
idpClient = azure.NewAzureEntraIDClient()
|
|
idpClient = azure.NewAzureEntraIDClient()
|
|
default:
|
|
default:
|
|
if settings.AuthProvider != "" {
|
|
if settings.AuthProvider != "" {
|
|
- return fmt.Errorf("invalid auth provider: %s", settings.AuthProvider)
|
|
|
|
|
|
+ err = fmt.Errorf("invalid auth provider: %s", settings.AuthProvider)
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -95,7 +104,8 @@ func SyncFromIDP() error {
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
|
|
|
|
- return syncGroups(idpGroups)
|
|
|
|
|
|
+ err = syncGroups(idpGroups)
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
|
|
|
|
func syncUsers(idpUsers []idp.User) error {
|
|
func syncUsers(idpUsers []idp.User) error {
|
|
@@ -310,3 +320,23 @@ func syncGroups(idpGroups []idp.Group) error {
|
|
|
|
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+func GetIDPSyncStatus() models.IDPSyncStatus {
|
|
|
|
+ if idpSyncMtx.TryLock() {
|
|
|
|
+ defer idpSyncMtx.Unlock()
|
|
|
|
+ return models.IDPSyncStatus{
|
|
|
|
+ Status: "in_progress",
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if idpSyncErr == nil {
|
|
|
|
+ return models.IDPSyncStatus{
|
|
|
|
+ Status: "completed",
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ return models.IDPSyncStatus{
|
|
|
|
+ Status: "failed",
|
|
|
|
+ Description: idpSyncErr.Error(),
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|