Files
hmac-file-server/ejabberd-module/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