From 480f4dba7f8b32ce4eae3527e577995a5442d5da Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Thu, 15 Jan 2026 12:28:35 -0600 Subject: [PATCH] Add script to apply Pangolin security rules Helper script to upload security rules to Pangolin instance. Requires PANGOLIN_KEY environment variable. --- scripts/apply-pangolin-rules.sh | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 scripts/apply-pangolin-rules.sh diff --git a/scripts/apply-pangolin-rules.sh b/scripts/apply-pangolin-rules.sh new file mode 100755 index 00000000..25a6dcf2 --- /dev/null +++ b/scripts/apply-pangolin-rules.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Apply Pangolin security rules to your instance +# Requires PANGOLIN_KEY environment variable + +set -e + +# Colors +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +RULES_FILE="pangolin-security-rules.toml" +PANGOLIN_API="https://api.pangolin.net/v1" + +if [ -z "$PANGOLIN_KEY" ]; then + echo -e "${RED}Error: PANGOLIN_KEY environment variable not set${NC}" + echo "Export your Pangolin API key first:" + echo " export PANGOLIN_KEY=" + exit 1 +fi + +if [ ! -f "$RULES_FILE" ]; then + echo -e "${RED}Error: $RULES_FILE not found${NC}" + echo "Run this script from the towerops project root" + exit 1 +fi + +echo -e "${BLUE}Uploading Pangolin security rules...${NC}" +echo "" + +# Upload rules +response=$(curl -s -X POST \ + -H "Authorization: Bearer $PANGOLIN_KEY" \ + -H "Content-Type: application/toml" \ + --data-binary "@$RULES_FILE" \ + "$PANGOLIN_API/rules/upload") + +# Check response +if echo "$response" | grep -q '"success":true'; then + echo -e "${GREEN}✓ Rules uploaded successfully!${NC}" + echo "" + + # Extract rule count if available + rule_count=$(echo "$response" | grep -o '"rule_count":[0-9]*' | grep -o '[0-9]*' || echo "unknown") + echo -e "${BLUE}Rules deployed:${NC} $rule_count" + + echo "" + echo -e "${BLUE}Next steps:${NC}" + echo "1. Verify rules: curl -H \"Authorization: Bearer \$PANGOLIN_KEY\" $PANGOLIN_API/rules" + echo "2. Monitor blocks: curl -H \"Authorization: Bearer \$PANGOLIN_KEY\" $PANGOLIN_API/logs?action=block" + echo "3. View dashboard: https://app.pangolin.net/rules" +else + echo -e "${RED}✗ Failed to upload rules${NC}" + echo "" + echo -e "${YELLOW}Response:${NC}" + echo "$response" | jq . 2>/dev/null || echo "$response" + exit 1 +fi