- Implement proper XMPP MUC operations using mellium.im/xmpp/muc package - Add session readiness checking to prevent blocking on room joins - Create comprehensive bridge manager architecture with lifecycle management - Add complete channel mapping functionality with KV store persistence - Remove defensive logger nil checks as requested by user - Enhance XMPP client doctor with MUC testing (join/wait/leave workflow) - Add detailed dev server documentation for test room creation - Implement timeout protection for all MUC operations - Add proper error handling with fmt.Errorf instead of pkg/errors - Successfully tested: MUC join in ~21ms, 5s wait, clean leave operation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
172 lines
No EOL
4.4 KiB
Markdown
172 lines
No EOL
4.4 KiB
Markdown
# Development XMPP Server
|
|
|
|
This folder contains a `docker-compose.yml` file for development purposes. It sets up a local XMPP server (Openfire) to use while developing the Mattermost XMPP bridge plugin.
|
|
|
|
## Quick Start
|
|
|
|
From the project root directory, use the Makefile targets:
|
|
|
|
```bash
|
|
# Start the XMPP server
|
|
make devserver_start
|
|
|
|
# Check server status
|
|
make devserver_status
|
|
|
|
# Test connectivity with the doctor tool
|
|
make devserver_doctor
|
|
|
|
# Stop the server
|
|
make devserver_stop
|
|
```
|
|
|
|
## Manual Docker Usage
|
|
|
|
Alternatively, you can manage the server directly:
|
|
|
|
```bash
|
|
# Start the server
|
|
cd sidecar
|
|
docker compose up -d
|
|
|
|
# Stop the server
|
|
docker compose down
|
|
|
|
# View logs
|
|
docker compose logs -f openfire
|
|
```
|
|
|
|
## Initial Setup
|
|
|
|
After starting the server for the first time, you need to complete the Openfire setup:
|
|
|
|
### 1. Access Admin Console
|
|
|
|
Open your web browser and go to: http://localhost:9090
|
|
|
|
### 2. Complete Setup Wizard
|
|
|
|
1. **Language Selection**: Choose your preferred language
|
|
2. **Server Settings**:
|
|
- Server Domain: `localhost` (default is fine)
|
|
- Keep other defaults
|
|
3. **Database Settings**:
|
|
- Choose "Embedded Database" for development
|
|
- This creates a local database that persists in Docker volumes
|
|
4. **Profile Settings**:
|
|
- Choose "Default" (no LDAP needed for development)
|
|
5. **Administrator Account**:
|
|
- Username: `admin`
|
|
- Password: `admin` (for development consistency)
|
|
- Email: `admin@localhost`
|
|
|
|
### 3. Create Test User
|
|
|
|
After completing the setup wizard:
|
|
|
|
1. Log in to the admin console with `admin` / `admin`
|
|
2. Go to **Users/Groups** → **Create New User**
|
|
3. Fill in the user details:
|
|
- **Username**: `testuser`
|
|
- **Password**: `testpass`
|
|
- **Confirm Password**: `testpass`
|
|
- **Name**: `Test User`
|
|
- **Email**: `testuser@localhost`
|
|
4. Click **Create User**
|
|
|
|
### 4. Create Test MUC Room
|
|
|
|
For testing Multi-User Chat functionality, create a test room:
|
|
|
|
1. In the admin console, go to **Group Chat** → **Create New Room**
|
|
2. Fill in the room details:
|
|
- **Room ID**: `test1`
|
|
- **Room Name**: `Test Room 1`
|
|
- **Description**: `Test room for XMPP bridge development`
|
|
- **Subject**: `Development Test Room`
|
|
3. Configure room settings:
|
|
- **Room Type**: Public (searchable and accessible)
|
|
- **Persistent**: Yes (room survives server restarts)
|
|
- **Max occupants**: 50 (or leave default)
|
|
- **Enable**: Yes
|
|
4. Click **Create Room**
|
|
|
|
The room will be accessible as `test1@conference.localhost` for testing MUC operations.
|
|
|
|
### 5. Test Connectivity
|
|
|
|
Run the doctor tool to verify everything is working:
|
|
|
|
```bash
|
|
make devserver_doctor
|
|
```
|
|
|
|
You should see successful connection, ping, and disconnect messages.
|
|
|
|
#### Test MUC Operations
|
|
|
|
To test Multi-User Chat room operations (requires the test room created above):
|
|
|
|
```bash
|
|
# Test MUC room join/leave operations
|
|
go run cmd/xmpp-client-doctor/main.go --test-muc
|
|
```
|
|
|
|
This will test joining the `test1@conference.localhost` room, waiting 5 seconds, and then leaving.
|
|
|
|
## Server Details
|
|
|
|
- **Admin Console**: http://localhost:9090
|
|
- **XMPP Server**: localhost:5222 (client connections)
|
|
- **XMPP SSL Server**: localhost:5223 (SSL client connections)
|
|
- **XMPP Server-to-Server**: localhost:5269
|
|
- **File Transfer Proxy**: localhost:7777
|
|
|
|
## Test Credentials
|
|
|
|
After setup, use these credentials for testing:
|
|
|
|
- **Admin User**: `admin` / `admin`
|
|
- **Test User**: `testuser@localhost` / `testpass`
|
|
|
|
## Data Persistence
|
|
|
|
The server data is stored in Docker volumes:
|
|
- `sidecar_openfire_data`: Openfire configuration and database
|
|
- `sidecar_postgres_data`: PostgreSQL database (if you choose PostgreSQL instead of embedded DB)
|
|
|
|
## Troubleshooting
|
|
|
|
### Server Won't Start
|
|
```bash
|
|
# Check if ports are already in use
|
|
lsof -i :9090
|
|
lsof -i :5222
|
|
|
|
# View server logs
|
|
make devserver_logs
|
|
```
|
|
|
|
### Reset Everything
|
|
```bash
|
|
# This removes all data and containers
|
|
make devserver_clean
|
|
```
|
|
|
|
### Test Different Configurations
|
|
```bash
|
|
# Test with custom server settings
|
|
go run cmd/xmpp-client-doctor/main.go \
|
|
-server="localhost:5222" \
|
|
-username="testuser@localhost" \
|
|
-password="testpass" \
|
|
-insecure-skip-verify=true \
|
|
-verbose=true
|
|
```
|
|
|
|
## Development Notes
|
|
|
|
- The server uses self-signed certificates, so the doctor tool defaults to `-insecure-skip-verify=true`
|
|
- All data persists between container restarts unless you run `make devserver_clean`
|
|
- The PostgreSQL and Adminer services are included but optional (you can use embedded database)
|
|
- The server takes ~30 seconds to fully start up after `docker compose up` |