- Extract bridge user detection logic into separate isBridgeUserMessage() function - Fix gocritic ifElseChain issues by converting if-else to switch statements - Fix gofmt formatting issues in client.go - Fix revive naming issues by renaming XMPPUser to User and XMPPUserManager to UserManager - Improve code organization and maintainability 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
51 lines
1.8 KiB
Go
51 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/mattermost/mattermost/server/public/model"
|
|
"github.com/mattermost/mattermost/server/public/plugin"
|
|
)
|
|
|
|
// UserHasBeenDeleted is called when a user has been deleted from Mattermost
|
|
// This allows us to clean up ghost users from the XMPP server
|
|
func (p *Plugin) UserHasBeenDeleted(c *plugin.Context, user *model.User) {
|
|
if user == nil {
|
|
p.logger.LogWarn("UserHasBeenDeleted called with nil user")
|
|
return
|
|
}
|
|
|
|
p.logger.LogDebug("User deleted from Mattermost, cleaning up bridge users", "user_id", user.Id, "username", user.Username)
|
|
|
|
// Clean up ghost users from external bridges (skip Mattermost bridge)
|
|
for _, bridgeName := range p.bridgeManager.ListBridges() {
|
|
// Skip the Mattermost bridge since it represents the Mattermost side
|
|
if bridgeName == "mattermost" {
|
|
p.logger.LogDebug("Skipping Mattermost bridge for user cleanup", "user_id", user.Id)
|
|
continue
|
|
}
|
|
|
|
bridge, err := p.bridgeManager.GetBridge(bridgeName)
|
|
if err != nil {
|
|
p.logger.LogWarn("Failed to get bridge for user cleanup", "bridge", bridgeName, "error", err)
|
|
continue
|
|
}
|
|
|
|
userManager := bridge.GetUserManager()
|
|
if userManager == nil {
|
|
p.logger.LogDebug("Bridge has no user manager, skipping cleanup", "bridge", bridgeName)
|
|
continue
|
|
}
|
|
|
|
// Check if this user exists in the bridge
|
|
if !userManager.HasUser(user.Id) {
|
|
p.logger.LogDebug("User not found in bridge, skipping cleanup", "bridge", bridgeName, "user_id", user.Id)
|
|
continue
|
|
}
|
|
|
|
// Delete the user from the bridge (this will handle ghost user cleanup if enabled)
|
|
if err := userManager.DeleteUser(user.Id); err != nil {
|
|
p.logger.LogWarn("Failed to delete user from bridge", "bridge", bridgeName, "user_id", user.Id, "error", err)
|
|
} else {
|
|
p.logger.LogInfo("Successfully deleted user from bridge", "bridge", bridgeName, "user_id", user.Id, "username", user.Username)
|
|
}
|
|
}
|
|
}
|