#!/bin/bash # skyweave_deploy.sh - Deploy Skyweave API framework # --- Repository and Local Paths --- LOCAL_REPO_ROOT="." LOCAL_CGI_SCRIPT_RELPATH="cgi_scripts/skyweave.lua" LOCAL_SKYWEAVE_MODULE_DIR_RELPATH="skyweave" LOCAL_JSON_LIB_RELPATH="lib/json.lua" # --- Remote Target Paths --- REMOTE_BASE_DIR="/usr/lib/lua" REMOTE_CGI_SCRIPT="/www/cgi-bin/skyweave.lua" REMOTE_SKYWEAVE_MODULE_DIR="${REMOTE_BASE_DIR}/skyweave" REMOTE_JSON_LIB="${REMOTE_BASE_DIR}/json.lua" REMOTE_CGI_DIR="/www/cgi-bin" # --- User-configurable settings --- SSH_ALIAS="roof-unit" ROOF_IP="192.168.10.254" REMOTE_HTTP_PORT="${1:-42069}" # Use first script arg for port, or default SCP_FLAG_O="-O -o LogLevel=ERROR" # For legacy SCP mode if needed by server # Colors GREEN='\033[0;32m'; RED='\033[0;31m'; YELLOW='\033[0;33m'; NC='\033[0m' echo -e "${YELLOW}Starting Skyweave framework deployment to ${SSH_ALIAS}...${NC}" echo -e "${YELLOW}(Ensure '${SSH_ALIAS}' is correctly configured in your ~/.ssh/config)${NC}" echo "" # === 1. Check Local Source Files and Directories === echo -e "${YELLOW}Checking local source files and directories...${NC}" if [ ! -f "${LOCAL_REPO_ROOT}/${LOCAL_CGI_SCRIPT_RELPATH}" ]; then echo -e "${RED}Error: Local CGI script ${LOCAL_REPO_ROOT}/${LOCAL_CGI_SCRIPT_RELPATH} not found!${NC}" exit 1 fi if [ ! -d "${LOCAL_REPO_ROOT}/${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH}" ]; then echo -e "${RED}Error: Local Skyweave module directory ${LOCAL_REPO_ROOT}/${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH} not found!${NC}" exit 1 fi if [ ! -f "${LOCAL_REPO_ROOT}/${LOCAL_JSON_LIB_RELPATH}" ]; then echo -e "${RED}Error: Local json.lua library ${LOCAL_REPO_ROOT}/${LOCAL_JSON_LIB_RELPATH} not found!${NC}" exit 1 fi echo -e "${GREEN}Local files and directories found.${NC}" echo "" # === 2. Create Remote Directories === echo -e "${YELLOW}Creating remote directories...${NC}" ssh -q ${SSH_ALIAS} "mkdir -p ${REMOTE_SKYWEAVE_MODULE_DIR}/handlers ${REMOTE_CGI_DIR}" if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to create remote directories on ${SSH_ALIAS}!${NC}" exit 1 fi echo -e "${GREEN}Remote directories ensured.${NC}" echo "" # === 3. Deploy Files === echo -e "${YELLOW}Deploying json.lua library...${NC}" scp ${SCP_FLAG_O} "${LOCAL_REPO_ROOT}/${LOCAL_JSON_LIB_RELPATH}" "${SSH_ALIAS}:${REMOTE_JSON_LIB}" if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to copy json.lua to ${SSH_ALIAS}!${NC}"; exit 1; fi echo -e "${GREEN}json.lua deployed.${NC}" echo "" echo -e "${YELLOW}Deploying Skyweave module directory (${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH})...${NC}" scp ${SCP_FLAG_O} -r "${LOCAL_REPO_ROOT}/${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH}/." "${SSH_ALIAS}:${REMOTE_SKYWEAVE_MODULE_DIR}/" if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to copy Skyweave module directory to ${SSH_ALIAS}!${NC}"; exit 1; fi echo -e "${GREEN}Skyweave module directory deployed.${NC}" echo "" echo -e "${YELLOW}Deploying main CGI script (${LOCAL_CGI_SCRIPT_RELPATH})...${NC}" scp ${SCP_FLAG_O} "${LOCAL_REPO_ROOT}/${LOCAL_CGI_SCRIPT_RELPATH}" "${SSH_ALIAS}:${REMOTE_CGI_SCRIPT}" if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to copy CGI script to ${SSH_ALIAS}!${NC}"; exit 1; fi echo -e "${GREEN}Main CGI script deployed.${NC}" echo "" # === 4. Set Permissions on Remote Files === echo -e "${YELLOW}Setting permissions on remote files...${NC}" CGI_CHMOD_FAILED=0 ssh -q ${SSH_ALIAS} "chmod +x ${REMOTE_CGI_SCRIPT}" || CGI_CHMOD_FAILED=1 ssh -q ${SSH_ALIAS} "chmod 644 ${REMOTE_JSON_LIB}" || echo -e "${YELLOW}Warning: chmod failed for ${REMOTE_JSON_LIB}.${NC}" ssh -q ${SSH_ALIAS} "find ${REMOTE_SKYWEAVE_MODULE_DIR} -type d -exec chmod 755 {} \;" || echo -e "${YELLOW}Warning: chmod failed for module dirs in ${REMOTE_SKYWEAVE_MODULE_DIR}.${NC}" ssh -q ${SSH_ALIAS} "find ${REMOTE_SKYWEAVE_MODULE_DIR} -type f -exec chmod 644 {} \;" || echo -e "${YELLOW}Warning: chmod failed for module files in ${REMOTE_SKYWEAVE_MODULE_DIR}.${NC}" if [ "$CGI_CHMOD_FAILED" = "1" ]; then echo -e "${RED}Critical permission setting for CGI script failed. Deployment may not be functional.${NC}" exit 1 fi echo -e "${GREEN}Remote permissions set.${NC}" echo "" # === 5. Test Deployed API === echo -e "${GREEN}All deployment and permission operations complete for ${SSH_ALIAS}!${NC}" echo "" # Add a newline for spacing before API test echo -e "${YELLOW}Testing API via http://${ROOF_IP}:${REMOTE_HTTP_PORT}...${NC}" API_TEST_URL="http://${ROOF_IP}:${REMOTE_HTTP_PORT}/cgi-bin/skyweave.lua?get_config=network_config" RESPONSE=$(curl -s -X GET "${API_TEST_URL}") if [ $? -eq 0 ] && [[ "${RESPONSE}" == *'"errCode":0'* ]]; then echo -e "${GREEN}API test successful!${NC}" echo -e "Response: ${RESPONSE}" else echo -e "${RED}API test failed!${NC}" echo -e "Curl exit status for ${API_TEST_URL}: $?" echo -e "Response: ${RESPONSE}" fi echo -e "\n${YELLOW}API endpoint: http://${ROOF_IP}:${REMOTE_HTTP_PORT}/cgi-bin/skyweave.lua${NC}" echo -e "${YELLOW}Example usage: curl -X POST -H \"Content-Type: application/json\" -d '{\"ssid\":\"MyNetwork\",\"key\":\"MyPassword\",\"encryption\":\"psk2\"}' http://${ROOF_IP}:${REMOTE_HTTP_PORT}/cgi-bin/skyweave.lua?set_config=connect_wifi${NC}" echo "" echo -e "${GREEN}Deployment script finished.${NC}"