129 lines
3.2 KiB
Bash
Executable File
129 lines
3.2 KiB
Bash
Executable File
#!/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 "$@"
|