feat: implement XMPP client and development server infrastructure
## XMPP Client Implementation - Create XMPP client with mellium.im/xmpp library - Add SASL Plain authentication with TLS support - Implement basic connection, ping, and disconnect functionality - Add TLS certificate verification skip option for development ## Development Server Management - Add custom makefile targets for XMPP server management - Implement devserver_start, devserver_stop, devserver_status commands - Add devserver_logs, devserver_clean, devserver_doctor commands - Create comprehensive sidecar/README.md with setup instructions ## XMPP Client Doctor Tool - Create cmd/xmpp-client-doctor diagnostic tool - Add CLI flags for server configuration with sensible defaults - Implement verbose logging and connection testing - Include insecure TLS option for development environments ## Bridge Architecture Foundation - Create placeholder bridge structs in proper package hierarchy - Add server/bridge/mattermost and server/bridge/xmpp packages - Update plugin initialization to create bridge instances - Maintain clean separation between Mattermost and XMPP concerns ## Dependencies and Configuration - Add mellium.im/xmpp dependencies to go.mod - Fix plugin.json password field type validation - Update README.md with XMPP bridge description and doctor usage - Add .claude.md to .gitignore for local development notes All tests passing. Ready for Phase 4 (Bridge Logic) implementation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f1a6cb138f
commit
07ff46624d
12 changed files with 763 additions and 10 deletions
|
@ -5,8 +5,11 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
mattermostbridge "github.com/mattermost/mattermost-plugin-bridge-xmpp/server/bridge/mattermost"
|
||||
xmppbridge "github.com/mattermost/mattermost-plugin-bridge-xmpp/server/bridge/xmpp"
|
||||
"github.com/mattermost/mattermost-plugin-bridge-xmpp/server/command"
|
||||
"github.com/mattermost/mattermost-plugin-bridge-xmpp/server/store/kvstore"
|
||||
"github.com/mattermost/mattermost-plugin-bridge-xmpp/server/xmpp"
|
||||
"github.com/mattermost/mattermost/server/public/model"
|
||||
"github.com/mattermost/mattermost/server/public/plugin"
|
||||
"github.com/mattermost/mattermost/server/public/pluginapi"
|
||||
|
@ -27,9 +30,15 @@ type Plugin struct {
|
|||
// commandClient is the client used to register and execute slash commands.
|
||||
commandClient command.Command
|
||||
|
||||
// xmppClient is the client used to communicate with XMPP servers.
|
||||
xmppClient *xmpp.Client
|
||||
|
||||
// logger is the main plugin logger
|
||||
logger Logger
|
||||
|
||||
// remoteID is the identifier returned by RegisterPluginForSharedChannels
|
||||
remoteID string
|
||||
|
||||
backgroundJob *cluster.Job
|
||||
|
||||
// configurationLock synchronizes access to the configuration.
|
||||
|
@ -38,6 +47,10 @@ type Plugin struct {
|
|||
// configuration is the active plugin configuration. Consult getConfiguration and
|
||||
// setConfiguration for usage.
|
||||
configuration *configuration
|
||||
|
||||
// Bridge components for dependency injection architecture
|
||||
mattermostToXMPPBridge *mattermostbridge.MattermostToXMPPBridge
|
||||
xmppToMattermostBridge *xmppbridge.XMPPToMattermostBridge
|
||||
}
|
||||
|
||||
// OnActivate is invoked when the plugin is activated. If an error is returned, the plugin will be deactivated.
|
||||
|
@ -49,6 +62,11 @@ func (p *Plugin) OnActivate() error {
|
|||
|
||||
p.kvstore = kvstore.NewKVStore(p.client)
|
||||
|
||||
p.initXMPPClient()
|
||||
|
||||
// Initialize bridge components
|
||||
p.initBridges()
|
||||
|
||||
p.commandClient = command.NewCommandHandler(p.client)
|
||||
|
||||
job, err := cluster.Schedule(
|
||||
|
@ -85,4 +103,23 @@ func (p *Plugin) ExecuteCommand(c *plugin.Context, args *model.CommandArgs) (*mo
|
|||
return response, nil
|
||||
}
|
||||
|
||||
func (p *Plugin) initXMPPClient() {
|
||||
config := p.getConfiguration()
|
||||
p.xmppClient = xmpp.NewClient(
|
||||
config.XMPPServerURL,
|
||||
config.XMPPUsername,
|
||||
config.XMPPPassword,
|
||||
config.GetXMPPResource(),
|
||||
p.remoteID,
|
||||
)
|
||||
}
|
||||
|
||||
func (p *Plugin) initBridges() {
|
||||
// Create bridge instances (Phase 4 will add proper dependencies)
|
||||
p.mattermostToXMPPBridge = mattermostbridge.NewMattermostToXMPPBridge()
|
||||
p.xmppToMattermostBridge = xmppbridge.NewXMPPToMattermostBridge()
|
||||
|
||||
p.logger.LogInfo("Bridge instances created successfully")
|
||||
}
|
||||
|
||||
// See https://developers.mattermost.com/extend/plugins/server/reference/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue