217 lines
6.6 KiB
Makefile
217 lines
6.6 KiB
Makefile
# 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
|