#!/bin/bash
# upload_html_test.sh - Test script for uploading HTML to production Ginxsom Blossom server
# Tests upload functionality on blossom.laantungir.net
set -e # Exit on any error
# Configuration
SERVER_URL="https://blossom.laantungir.net"
UPLOAD_ENDPOINT="${SERVER_URL}/upload"
TEST_FILE="tests/test_upload.html"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Helper functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
# Calculate file hash
calculate_hash() {
log_info "Calculating SHA-256 hash..."
HASH=$(sha256sum "${TEST_FILE}" | cut -d' ' -f1)
log_success "File hash: ${HASH}"
}
# Generate nostr event
generate_nostr_event() {
log_info "Generating kind 24242 nostr event..."
EXPIRATION=$(date -d '+1 hour' +%s)
EVENT_JSON=$(nak event -k 24242 -c "" \
--sec "22cc83aa57928a2800234c939240c9a6f0f44a33ea3838a860ed38930b195afd" \
-t "t=upload" \
-t "x=${HASH}" \
-t "expiration=${EXPIRATION}")
if [[ -z "$EVENT_JSON" ]]; then
log_error "Failed to generate nostr event"
exit 1
fi
log_success "Generated nostr event"
}
# Create authorization header
create_auth_header() {
log_info "Creating authorization header..."
AUTH_B64=$(echo -n "$EVENT_JSON" | base64 -w 0)
AUTH_HEADER="Nostr ${AUTH_B64}"
log_success "Created authorization header"
}
# Perform upload
perform_upload() {
log_info "Performing upload to ${UPLOAD_ENDPOINT}..."
RESPONSE_FILE=$(mktemp)
HTTP_STATUS=$(curl -s -w "%{http_code}" \
-X PUT \
-H "Authorization: ${AUTH_HEADER}" \
-H "Content-Type: text/html" \
--data-binary "@${TEST_FILE}" \
"${UPLOAD_ENDPOINT}" \
-o "${RESPONSE_FILE}")
echo "HTTP Status: ${HTTP_STATUS}"
echo "Response body:"
cat "${RESPONSE_FILE}"
echo
rm -f "${RESPONSE_FILE}"
if [[ "${HTTP_STATUS}" == "200" || "${HTTP_STATUS}" == "201" ]]; then
log_success "Upload successful!"
else
log_error "Upload failed with HTTP status: ${HTTP_STATUS}"
exit 1
fi
}
# Test file retrieval
test_retrieval() {
log_info "Testing file retrieval..."
# Try with .html extension
RETRIEVAL_URL_EXT="${SERVER_URL}/${HASH}.html"
log_info "Trying retrieval with extension: ${RETRIEVAL_URL_EXT}"
if curl -s -f -I "${RETRIEVAL_URL_EXT}" > /dev/null 2>&1; then
log_success "File found with .html extension!"
else
log_warning "File NOT found with .html extension"
fi
# Try without extension
RETRIEVAL_URL="${SERVER_URL}/${HASH}"
log_info "Trying retrieval without extension: ${RETRIEVAL_URL}"
if curl -s -f -I "${RETRIEVAL_URL}" > /dev/null 2>&1; then
log_success "File found without extension!"
else
log_warning "File NOT found without extension"
fi
}
# Main execution
main() {
calculate_hash
generate_nostr_event
create_auth_header
perform_upload
test_retrieval
}
main "$@"