Fixed: NETWORK_RESILIENCE_COMPLETE
This commit is contained in:
216
ejabberd-module/Makefile
Normal file
216
ejabberd-module/Makefile
Normal file
@ -0,0 +1,216 @@
|
||||
# Ejabberd HMAC File Server Integration Module
|
||||
# Makefile for compilation, installation, and testing
|
||||
|
||||
# Configuration
|
||||
ERLC = erlc
|
||||
MODULE_NAME = mod_http_upload_hmac
|
||||
MODULE_SRC = $(MODULE_NAME).erl
|
||||
MODULE_BEAM = $(MODULE_NAME).beam
|
||||
|
||||
# Default ejabberd paths (auto-detected during install)
|
||||
EJABBERD_INCLUDE_DIR = /opt/ejabberd/lib/ejabberd-*/include
|
||||
EJABBERD_MODULES_DIR = /opt/ejabberd/lib/ejabberd-*/ebin
|
||||
|
||||
# Compilation flags
|
||||
ERLC_FLAGS = -I $(EJABBERD_INCLUDE_DIR) -W -v
|
||||
|
||||
# Colors for output
|
||||
GREEN = \033[0;32m
|
||||
YELLOW = \033[1;33m
|
||||
RED = \033[0;31m
|
||||
NC = \033[0m # No Color
|
||||
|
||||
.PHONY: all compile install clean test help
|
||||
|
||||
# Default target
|
||||
all: compile
|
||||
|
||||
# Compile the module
|
||||
compile: $(MODULE_BEAM)
|
||||
|
||||
$(MODULE_BEAM): $(MODULE_SRC)
|
||||
@echo -e "$(GREEN)Compiling $(MODULE_SRC)...$(NC)"
|
||||
$(ERLC) $(ERLC_FLAGS) -o . $(MODULE_SRC)
|
||||
@echo -e "$(GREEN)✓ Compilation successful$(NC)"
|
||||
|
||||
# Install module to ejabberd
|
||||
install: compile
|
||||
@echo -e "$(YELLOW)Installing module to ejabberd...$(NC)"
|
||||
@if [ ! -d "$(shell echo $(EJABBERD_MODULES_DIR))" ]; then \
|
||||
echo -e "$(RED)Error: ejabberd modules directory not found$(NC)"; \
|
||||
echo -e "$(YELLOW)Run: make detect-paths$(NC)"; \
|
||||
exit 1; \
|
||||
fi
|
||||
sudo cp $(MODULE_BEAM) $(shell echo $(EJABBERD_MODULES_DIR))/
|
||||
sudo chown ejabberd:ejabberd $(shell echo $(EJABBERD_MODULES_DIR))/$(MODULE_BEAM)
|
||||
sudo chmod 644 $(shell echo $(EJABBERD_MODULES_DIR))/$(MODULE_BEAM)
|
||||
@echo -e "$(GREEN)✓ Module installed$(NC)"
|
||||
|
||||
# Auto-install with script
|
||||
auto-install:
|
||||
@echo -e "$(GREEN)Running automatic installation...$(NC)"
|
||||
./install.sh
|
||||
|
||||
# Detect ejabberd paths
|
||||
detect-paths:
|
||||
@echo -e "$(YELLOW)Detecting ejabberd installation paths...$(NC)"
|
||||
@echo "Include directories:"
|
||||
@find /opt /usr -name "ejabberd.hrl" -type f 2>/dev/null | head -5 | sed 's/ejabberd.hrl//' || echo " None found"
|
||||
@echo "Module directories:"
|
||||
@find /opt /usr -name "ebin" -path "*/ejabberd*" -type d 2>/dev/null | head -5 || echo " None found"
|
||||
|
||||
# Test the installation
|
||||
test:
|
||||
@echo -e "$(GREEN)Running integration tests...$(NC)"
|
||||
./test.sh all
|
||||
|
||||
# Test specific components
|
||||
test-token:
|
||||
./test.sh token
|
||||
|
||||
test-health:
|
||||
./test.sh health
|
||||
|
||||
test-upload:
|
||||
./test.sh upload
|
||||
|
||||
test-ejabberd:
|
||||
./test.sh ejabberd
|
||||
|
||||
# Clean compiled files
|
||||
clean:
|
||||
@echo -e "$(YELLOW)Cleaning compiled files...$(NC)"
|
||||
rm -f *.beam
|
||||
@echo -e "$(GREEN)✓ Clean complete$(NC)"
|
||||
|
||||
# Uninstall module from ejabberd
|
||||
uninstall:
|
||||
@echo -e "$(YELLOW)Removing module from ejabberd...$(NC)"
|
||||
sudo rm -f $(shell echo $(EJABBERD_MODULES_DIR))/$(MODULE_BEAM)
|
||||
@echo -e "$(GREEN)✓ Module removed$(NC)"
|
||||
|
||||
# Check ejabberd status
|
||||
status:
|
||||
@echo -e "$(GREEN)Checking ejabberd status...$(NC)"
|
||||
@if command -v ejabberdctl >/dev/null 2>&1; then \
|
||||
ejabberdctl status || echo -e "$(RED)ejabberd is not running$(NC)"; \
|
||||
echo; \
|
||||
echo "Loaded modules:"; \
|
||||
ejabberdctl modules | grep -E "(http_upload|mod_http)" || echo " No HTTP upload modules found"; \
|
||||
else \
|
||||
echo -e "$(RED)ejabberdctl not found$(NC)"; \
|
||||
fi
|
||||
|
||||
# Check HMAC server status
|
||||
hmac-status:
|
||||
@echo -e "$(GREEN)Checking HMAC File Server status...$(NC)"
|
||||
@if systemctl is-active hmac-file-server >/dev/null 2>&1; then \
|
||||
echo -e "$(GREEN)✓ HMAC File Server is running$(NC)"; \
|
||||
curl -s http://localhost:8080/health && echo || echo -e "$(RED)Health check failed$(NC)"; \
|
||||
else \
|
||||
echo -e "$(RED)✗ HMAC File Server is not running$(NC)"; \
|
||||
fi
|
||||
|
||||
# Development: watch for changes and recompile
|
||||
watch:
|
||||
@echo -e "$(YELLOW)Watching for changes (Ctrl+C to stop)...$(NC)"
|
||||
@while true; do \
|
||||
if [ $(MODULE_SRC) -nt $(MODULE_BEAM) ]; then \
|
||||
echo -e "$(GREEN)Source changed, recompiling...$(NC)"; \
|
||||
make compile; \
|
||||
fi; \
|
||||
sleep 2; \
|
||||
done
|
||||
|
||||
# Generate example configuration
|
||||
config:
|
||||
@echo -e "$(GREEN)Generating example configuration...$(NC)"
|
||||
@cat << 'EOF'
|
||||
# Add to ejabberd.yml modules section:
|
||||
|
||||
modules:
|
||||
mod_http_upload_hmac:
|
||||
hmac_server_url: "http://localhost:8080"
|
||||
hmac_shared_secret: "your-secure-secret-here"
|
||||
max_size: 104857600 # 100MB
|
||||
quota_per_user: 1073741824 # 1GB
|
||||
token_expiry: 3600 # 1 hour
|
||||
allowed_extensions:
|
||||
- ".jpg"
|
||||
- ".png"
|
||||
- ".pdf"
|
||||
- ".mp4"
|
||||
- ".mp3"
|
||||
iqdisc: one_queue
|
||||
|
||||
# Comment out existing mod_http_upload:
|
||||
# mod_http_upload: []
|
||||
EOF
|
||||
|
||||
# Show logs
|
||||
logs:
|
||||
@echo -e "$(GREEN)Showing recent ejabberd logs...$(NC)"
|
||||
journalctl -u ejabberd --no-pager -n 50
|
||||
|
||||
logs-follow:
|
||||
@echo -e "$(GREEN)Following ejabberd logs (Ctrl+C to stop)...$(NC)"
|
||||
journalctl -u ejabberd -f
|
||||
|
||||
# Restart services
|
||||
restart:
|
||||
@echo -e "$(YELLOW)Restarting ejabberd...$(NC)"
|
||||
sudo systemctl restart ejabberd
|
||||
@echo -e "$(YELLOW)Restarting HMAC File Server...$(NC)"
|
||||
sudo systemctl restart hmac-file-server
|
||||
@echo -e "$(GREEN)✓ Services restarted$(NC)"
|
||||
|
||||
# Development setup
|
||||
dev-setup:
|
||||
@echo -e "$(GREEN)Setting up development environment...$(NC)"
|
||||
make detect-paths
|
||||
make compile
|
||||
@echo -e "$(GREEN)✓ Development setup complete$(NC)"
|
||||
@echo -e "$(YELLOW)Next steps:$(NC)"
|
||||
@echo "1. Configure ejabberd.yml (make config)"
|
||||
@echo "2. Install module (make install)"
|
||||
@echo "3. Restart services (make restart)"
|
||||
@echo "4. Test integration (make test)"
|
||||
|
||||
# Show help
|
||||
help:
|
||||
@echo -e "$(GREEN)HMAC File Server - Ejabberd Module Makefile$(NC)"
|
||||
@echo
|
||||
@echo -e "$(YELLOW)Build Commands:$(NC)"
|
||||
@echo " make compile - Compile the module"
|
||||
@echo " make install - Install module to ejabberd"
|
||||
@echo " make auto-install - Run full installation script"
|
||||
@echo " make clean - Remove compiled files"
|
||||
@echo " make uninstall - Remove module from ejabberd"
|
||||
@echo
|
||||
@echo -e "$(YELLOW)Testing Commands:$(NC)"
|
||||
@echo " make test - Run all integration tests"
|
||||
@echo " make test-token - Test Bearer token generation"
|
||||
@echo " make test-health - Test HMAC server health"
|
||||
@echo " make test-upload - Test file upload with Bearer token"
|
||||
@echo " make test-ejabberd- Test ejabberd module status"
|
||||
@echo
|
||||
@echo -e "$(YELLOW)Utility Commands:$(NC)"
|
||||
@echo " make status - Check ejabberd status"
|
||||
@echo " make hmac-status - Check HMAC server status"
|
||||
@echo " make logs - Show recent ejabberd logs"
|
||||
@echo " make logs-follow - Follow ejabberd logs"
|
||||
@echo " make restart - Restart both services"
|
||||
@echo " make config - Generate example configuration"
|
||||
@echo
|
||||
@echo -e "$(YELLOW)Development Commands:$(NC)"
|
||||
@echo " make dev-setup - Setup development environment"
|
||||
@echo " make detect-paths - Find ejabberd installation paths"
|
||||
@echo " make watch - Auto-recompile on changes"
|
||||
@echo
|
||||
@echo -e "$(YELLOW)Variables:$(NC)"
|
||||
@echo " ERLC=$(ERLC)"
|
||||
@echo " EJABBERD_INCLUDE_DIR=$(EJABBERD_INCLUDE_DIR)"
|
||||
@echo " EJABBERD_MODULES_DIR=$(EJABBERD_MODULES_DIR)"
|
||||
|
||||
# Default help when no target
|
||||
.DEFAULT_GOAL := help
|
Reference in New Issue
Block a user