feat: support "new-user" webhooks for LDAP and syncer (#4285)

This commit is contained in:
Copilot
2025-10-19 22:38:41 +08:00
committed by GitHub
parent 099e6437a9
commit 8f8b7e5215
3 changed files with 35 additions and 0 deletions

View File

@@ -383,6 +383,9 @@ func SyncLdapUsers(owner string, syncUsers []LdapUser, ldapId string) (existUser
failedUsers = append(failedUsers, syncUser)
continue
}
// Trigger webhook for LDAP user sync
TriggerWebhookForUser("new-user-ldap", newUser)
}
}

View File

@@ -147,6 +147,11 @@ func (syncer *Syncer) syncUsers() error {
if err != nil {
return err
}
// Trigger webhooks for syncer user additions
for _, newUser := range newUsers {
TriggerWebhookForUser("new-user-syncer", newUser)
}
}
if !syncer.IsReadOnly {

View File

@@ -26,6 +26,7 @@ import (
"github.com/casdoor/casdoor/i18n"
"github.com/casdoor/casdoor/idp"
"github.com/casdoor/casdoor/util"
"github.com/casvisor/casvisor-go-sdk/casvisorsdk"
"github.com/go-webauthn/webauthn/webauthn"
jsoniter "github.com/json-iterator/go"
"github.com/xorm-io/core"
@@ -873,3 +874,29 @@ func replaceAttributeValuesWithList(val string, replaceVals []string, values []s
return newValues
}
// TriggerWebhookForUser triggers a webhook for user operations (add, update, delete)
// action: the action type, e.g., "new-user", "update-user", "delete-user"
// user: the user object
func TriggerWebhookForUser(action string, user *User) {
if user == nil {
return
}
record := &casvisorsdk.Record{
Name: util.GenerateId(),
CreatedTime: util.GetCurrentTime(),
Organization: user.Owner,
User: user.Name,
Method: "POST",
RequestUri: "/api/" + action,
Action: action,
Object: util.StructToJson(user),
StatusCode: 200,
IsTriggered: false,
}
util.SafeGoroutine(func() {
AddRecord(record)
})
}