From 22f622400862edaee51d03dc65897471effc3d32 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 11 Sep 2025 13:28:54 -0400 Subject: [PATCH] Generally working. --- .roo/rules-ask/AGENTS.md | 3 +- .roo/rules-code/AGENTS.md | 6 +- .roo/rules-debug/AGENTS.md | 4 +- AGENTS.md | 2 +- build/bud06.o | Bin 10032 -> 10008 bytes build/ginxsom-fcgi | Bin 232792 -> 232792 bytes build/request_validator.o | Bin 59056 -> 59208 bytes db/ginxsom.db | Bin 36864 -> 65536 bytes src/bud06.c | 21 +++--- src/main.c | 105 +--------------------------- src/request_validator.c | 12 +++- tests/auth_test_tmp/nip42_challenge | 2 +- tests/init_admin.sh | 33 --------- tests/requirements_test_bud06.sh | 23 +++--- 14 files changed, 51 insertions(+), 160 deletions(-) delete mode 100755 tests/init_admin.sh diff --git a/.roo/rules-ask/AGENTS.md b/.roo/rules-ask/AGENTS.md index 8b564c6..5a844bf 100644 --- a/.roo/rules-ask/AGENTS.md +++ b/.roo/rules-ask/AGENTS.md @@ -13,4 +13,5 @@ This file provides guidance to agents when working with code in this repository. - **Testing Setup**: Tests require `nak` tool for Nostr event generation - not standard HTTP testing - **Development Ports**: Local development uses port 9001, production typically uses nginx proxy on standard ports - **Setup Wizard**: Interactive setup creates cryptographically signed config files - not typical config generation -- **Extension Handling**: nginx config uses wildcards to serve files regardless of URL extension - Blossom protocol compliance \ No newline at end of file +- **Extension Handling**: nginx config uses wildcards to serve files regardless of URL extension - Blossom protocol compliance +- **Configuration Events**: Uses Nostr kind 33333 events with 1-year default expiration - XDG paths take priority over database \ No newline at end of file diff --git a/.roo/rules-code/AGENTS.md b/.roo/rules-code/AGENTS.md index 79b00e0..9efb0f6 100644 --- a/.roo/rules-code/AGENTS.md +++ b/.roo/rules-code/AGENTS.md @@ -15,4 +15,8 @@ This file provides guidance to agents when working with code in this repository. - **Configuration Loading**: File config takes priority over database - check XDG paths first, fallback to database - **Blob Metadata**: Database is single source of truth - use `get_blob_metadata()`, not filesystem checks - **nostr_core_lib Build**: Uses `build.sh` script, NOT `make` - run `./build.sh` to compile the library -- **Server Testing**: Use `./restart-all.sh` to properly restart and test ginxsom server, NOT direct binary execution \ No newline at end of file +- **Server Testing**: Use `./restart-all.sh` to properly restart and test ginxsom server, NOT direct binary execution +- **spawn-fcgi Parameters**: Must use `-M 666 -u "$USER" -g "$USER"` for socket permissions and ownership +- **Admin Event Structure**: Admin auth uses kind 24242 with "t" tag containing HTTP method, expiration typically 1 hour +- **Key File Permissions**: `.admin_keys` file must be chmod 600 or auth tests will fail +- **Development Environment**: Set `GINX_DEBUG=1` for pubkey extraction diagnostics during development \ No newline at end of file diff --git a/.roo/rules-debug/AGENTS.md b/.roo/rules-debug/AGENTS.md index 0533987..abf469b 100644 --- a/.roo/rules-debug/AGENTS.md +++ b/.roo/rules-debug/AGENTS.md @@ -13,4 +13,6 @@ This file provides guidance to agents when working with code in this repository. - **Config Loading**: File config errors are silent - check stderr for "CONFIG:" messages during startup - **Admin Key Mismatch**: Database admin_pubkey vs .admin_keys file often cause auth failures - **Nginx Port Conflicts**: Local nginx on 9001 conflicts with system nginx on 80 - check with `netstat -tlnp` -- **Hash Calculation**: File data buffer must be complete before `nostr_sha256()` call or hash is wrong \ No newline at end of file +- **Hash Calculation**: File data buffer must be complete before `nostr_sha256()` call or hash is wrong +- **Admin Key File**: `.admin_keys` must be chmod 600 and sourceable by bash - common test failure cause +- **Process Cleanup**: `restart-all.sh` performs force kill if graceful shutdown fails - check logs for hung processes \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 5fc74fd..659956c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -18,7 +18,7 @@ This file provides guidance to agents when working with code in this repository. ## Non-Standard Commands ```bash -# make clean && make && Restart nginx +# make clean && make && Restart nginx ./restart-all.sh # Start FastCGI daemon diff --git a/build/bud06.o b/build/bud06.o index ae40c44ec3e3a9a38d8a4940538b01b54e874797..c38df2bf1c2595bad9b0de6276ec8c2a258e76b9 100644 GIT binary patch delta 493 zcmdnsH^Xm&2IGy5norpnPfq4%m#p{bwPgT;7a+o;R}@6~bi1f^$PzdZ0wr5GYuqqOj8jDDl~2wMTD>ih@t)aj@>z1Eod~t=%Ci5+2P>j5)k+R6=wm8*&&I4pWG-X&d4@dP+pu- zZ}LVtaY;{hpfnJGRGI@Z%!HW9j`HG?*-%-K`G!ccMUxAGvh_%MO_5|Lf%G!Y*?dvH zo|$pM@F`TnT({@5J^qeR diff --git a/build/ginxsom-fcgi b/build/ginxsom-fcgi index 668baa2da758ad8ec011c2d439e4b834038d19ae..09bd5c76fc372ac26e852dc71f14922b3a9e2cb1 100755 GIT binary patch delta 81767 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�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 diff --git a/build/request_validator.o b/build/request_validator.o index d93da8d6ca3e997359424334ea10f2017d118d3a..923ee970874e88030d63293cd4cc4282a72fbe0c 100644 GIT binary patch literal 59208 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�ywt!S-`Qq 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 diff --git a/db/ginxsom.db b/db/ginxsom.db index 11a1706042671e3a991563856ddfc9c2d71ecf7d..47384861b683cca2d43ddb26cb35eb5f082ec094 100644 GIT binary patch literal 65536 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 diff --git a/src/bud06.c b/src/bud06.c index 0b87d89..23dfa65 100644 --- a/src/bud06.c +++ b/src/bud06.c @@ -204,14 +204,7 @@ void handle_head_upload_request(void) { return; } - // Check if blob already exists (duplicate detection) - if (check_blob_exists(sha256)) { - send_upload_error_response(409, "blob_exists", "Blob with this hash already exists", XREASON_BLOB_EXISTS); - log_request("HEAD", "/upload", "none", 409); - return; - } - - // Check for optional authorization + // Check for authorization first (before duplicate detection) const char* auth_header = getenv("HTTP_AUTHORIZATION"); const char* auth_status = "none"; @@ -220,6 +213,18 @@ void handle_head_upload_request(void) { // This handler receives pre-validated requests, so if we reach here with auth_header, // the authentication was already successful auth_status = "authenticated"; + } else { + // Check if server requires authorization for uploads + // If auth is required but not provided, return 401 before checking for duplicates + // TODO: This should check server configuration for auth requirements + // For now, assume auth is optional unless configured otherwise + } + + // Check if blob already exists (duplicate detection - after auth validation) + if (check_blob_exists(sha256)) { + send_upload_error_response(409, "blob_exists", "Blob with this hash already exists", XREASON_BLOB_EXISTS); + log_request("HEAD", "/upload", auth_status, 409); + return; } // All validations passed - return success diff --git a/src/main.c b/src/main.c index 00b2a70..2da2980 100644 --- a/src/main.c +++ b/src/main.c @@ -28,16 +28,6 @@ // Database path #define DB_PATH "db/ginxsom.db" -// ===== COMMENTED OUT UNUSED CODE ===== -// Forward declarations for config system (all commented out) -/* -int initialize_server_config(void); -int apply_config_from_event(cJSON *event); -int get_config_file_path(char *path, size_t path_size); -int load_server_config(const char *config_path); -int run_interactive_setup(const char *config_path); -*/ -// ===== END COMMENTED OUT CODE ===== // Configuration system implementation #include @@ -536,15 +526,6 @@ const char *extract_sha256_from_uri(const char *uri) { ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// -// ===== COMMENTED OUT UNUSED CODE ===== -// Forward declarations for detailed validation functions (all commented out) -/* -int detailed_structure_validation(cJSON *event); -int detailed_signature_validation(cJSON *event); -void analyze_event_fields(cJSON *event); -void hex_dump(const char *label, const unsigned char *data, size_t len); -*/ -// ===== END COMMENTED OUT CODE ===== ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// @@ -1024,38 +1005,7 @@ void handle_upload_request(void) { fflush(stderr); - // Legacy authentication check - now handled by centralized validation system - /* - // Check if authentication rules are enabled using nostr_core_lib system - int auth_required = nostr_auth_rules_enabled(); - fprintf(stderr, "AUTH: auth_rules_enabled = %d, auth_header present: %s\r\n", - auth_required, auth_header ? "YES" : "NO"); - // If authentication is required but no auth header provided, fail immediately - if (auth_required && !auth_header) { - free(file_data); - send_error_response(401, "authorization_required", - "Authorization required for upload operations", - "This server requires authentication for all uploads"); - log_request("PUT", "/upload", "missing_auth", 401); - return; - } - - // If auth rules are completely disabled, skip all validation and allow upload - if (!auth_required) { - fprintf(stderr, "AUTH: Authentication rules disabled - skipping all " - "validation and allowing upload\n"); - // Skip validation and proceed to file processing - goto process_file_upload; - } - */ - - // Authentication is handled by centralized validation system - // TODO: Get uploader_pubkey from centralized validation result - // For now, keep existing uploader_pubkey extraction for compatibility - -// Legacy goto label - no longer needed with centralized validation -// process_file_upload: // Get dimensions from in-memory buffer before saving file int width = 0, height = 0; nip94_get_dimensions(file_data, content_length, content_type, &width, @@ -1299,37 +1249,7 @@ void handle_upload_request_with_validation(nostr_request_result_t* validation_re fflush(stderr); - // Legacy authentication check - now handled by centralized validation system - /* - // Check if authentication rules are enabled using nostr_core_lib system - int auth_required = nostr_auth_rules_enabled(); - fprintf(stderr, "AUTH: auth_rules_enabled = %d, auth_header present: %s\r\n", - auth_required, auth_header ? "YES" : "NO"); - // If authentication is required but no auth header provided, fail immediately - if (auth_required && !auth_header) { - if (should_free_file_data) free(file_data); - send_error_response(401, "authorization_required", - "Authorization required for upload operations", - "This server requires authentication for all uploads"); - log_request("PUT", "/upload", "missing_auth", 401); - return; - } - - // If auth rules are completely disabled, skip all validation and allow upload - if (!auth_required) { - fprintf(stderr, "AUTH: Authentication rules disabled - skipping all " - "validation and allowing upload\n"); - // Skip validation and proceed to file processing - goto process_file_upload; - } - */ - - // Authentication was handled by centralized validation system - // uploader_pubkey should be set from validation result - -// Legacy goto label - no longer needed with centralized validation -// process_file_upload: // Get dimensions from in-memory buffer before saving file int width = 0, height = 0; nip94_get_dimensions(file_data, file_size, content_type, &width, @@ -1523,23 +1443,6 @@ int main(void) { // Try file-based config first, then fall back to database config int config_loaded = 0; -// All file-based config and interactive setup are commented out -/* -char config_path[512]; - -if (get_config_file_path(config_path, sizeof(config_path))) { - fprintf(stderr, "STARTUP: Checking for config file at: %s\n", config_path); - if (load_server_config(config_path)) { - fprintf(stderr, - "STARTUP: File-based configuration loaded successfully\n"); - config_loaded = 1; - } else { - fprintf(stderr, "STARTUP: No valid file-based config found, trying " - "database config\n"); - } -} -*/ - // Fall back to database configuration if file config failed if (!config_loaded /* && !initialize_server_config() */) { fprintf( @@ -1547,13 +1450,7 @@ if (!config_loaded /* && !initialize_server_config() */) { "STARTUP: No configuration found - server starting in setup mode\n"); fprintf(stderr, "STARTUP: Run interactive setup with: ginxsom --setup\n"); // For interactive mode (when stdin is available), offer setup - /* - char config_path[512]; - if (isatty(STDIN_FILENO) && - get_config_file_path(config_path, sizeof(config_path))) { - return run_interactive_setup(config_path); - } - */ + } else if (!config_loaded) { fprintf(stderr, "STARTUP: Database configuration loaded successfully\n"); } diff --git a/src/request_validator.c b/src/request_validator.c index a539952..ddc99ca 100644 --- a/src/request_validator.c +++ b/src/request_validator.c @@ -283,7 +283,17 @@ int nostr_validate_unified_request(const nostr_unified_request_t *request, // PHASE 2: NOSTR EVENT VALIDATION (CPU Intensive ~2ms) ///////////////////////////////////////////////////////////////////// - // Check if authentication header is provided + // Check if this is a BUD-09 report request - allow anonymous reporting + if (request->operation && strcmp(request->operation, "report") == 0) { + // BUD-09 allows anonymous reporting - pass through to bud09.c for validation + result->valid = 1; + result->error_code = NOSTR_SUCCESS; + strcpy(result->reason, "BUD-09 report request - bypassing auth for anonymous reporting"); + validator_debug_log("VALIDATOR_DEBUG: BUD-09 report detected, bypassing authentication\n"); + return NOSTR_SUCCESS; + } + + // Check if authentication header is provided (required for non-report operations) if (!request->auth_header) { result->valid = 0; diff --git a/tests/auth_test_tmp/nip42_challenge b/tests/auth_test_tmp/nip42_challenge index 969dfc0..9e491be 100644 --- a/tests/auth_test_tmp/nip42_challenge +++ b/tests/auth_test_tmp/nip42_challenge @@ -1 +1 @@ -09127399ac6d531773cafe433bd6ffd0592b04480543b8225ba17d48fd61b5ac +e3ba927d32ca105a8a4cafa2e013b97945a165c38e9ce573446a2332dc312fdb diff --git a/tests/init_admin.sh b/tests/init_admin.sh deleted file mode 100755 index 9b0805d..0000000 --- a/tests/init_admin.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -# Admin Initialization Script for Ginxsom Testing -# Sets up the test admin key in the database - -set -e - -# Test admin public key (must match TEST_ADMIN_PUBKEY from admin_test.sh) -TEST_ADMIN_PUBKEY="2ef05348f28d24e0f0ed0751278442c27b62c823c37af8d8d89d8592c6ee84e7" - -echo "Initializing admin access for testing..." - -# Check if database exists -if [ ! -f "db/ginxsom.db" ]; then - echo "Error: Database db/ginxsom.db not found. Run ./db/init.sh first." - exit 1 -fi - -# Configure admin settings -sqlite3 db/ginxsom.db << EOF -INSERT OR REPLACE INTO config (key, value, description) VALUES - ('admin_pubkey', '$TEST_ADMIN_PUBKEY', 'Nostr public key authorized for admin operations (test key)'), - ('admin_enabled', 'true', 'Enable admin interface'); -EOF - -echo "Admin access configured successfully!" -echo "Test admin public key: $TEST_ADMIN_PUBKEY" -echo "Use private key from admin_test.sh to generate authentication tokens" - -# Verify configuration -echo "" -echo "Current admin configuration:" -sqlite3 db/ginxsom.db "SELECT key, value FROM config WHERE key IN ('admin_pubkey', 'admin_enabled');" \ No newline at end of file diff --git a/tests/requirements_test_bud06.sh b/tests/requirements_test_bud06.sh index eb9f08b..973d563 100755 --- a/tests/requirements_test_bud06.sh +++ b/tests/requirements_test_bud06.sh @@ -11,11 +11,16 @@ echo "=== BUD-06 Upload Requirements Test Suite ===" SERVER_URL="http://localhost:9001" UPLOAD_ENDPOINT="${SERVER_URL}/upload" -# Test file properties -TEST_SHA256="24308d48eb498b593e55a87b6300ccffdea8432babc0bb898b1eff21ebbb72de" +# Test file properties - generate unique hashes for each test run +TIMESTAMP=$(date +%s) +TEST_SHA256=$(echo "test_bud06_${TIMESTAMP}_$(uname -n)" | sha256sum | cut -d' ' -f1) TEST_CONTENT_TYPE="image/png" TEST_CONTENT_LENGTH="71418" +# Generate additional unique hashes for tests that need fresh hashes +TEST_SHA256_FRESH=$(echo "fresh_bud06_${TIMESTAMP}_$(uname -n)" | sha256sum | cut -d' ' -f1) +TEST_SHA256_AUTH=$(echo "auth_bud06_${TIMESTAMP}_$(uname -n)" | sha256sum | cut -d' ' -f1) + # Helper function to make HEAD request with custom headers make_head_request() { local sha256="$1" @@ -59,11 +64,11 @@ echo "" echo "=== Test 1: Valid Upload Requirements ===" echo "Testing HEAD /upload with valid headers..." -RESPONSE=$(make_head_request "$TEST_SHA256" "$TEST_CONTENT_TYPE" "$TEST_CONTENT_LENGTH") +RESPONSE=$(make_head_request "$TEST_SHA256_FRESH" "$TEST_CONTENT_TYPE" "$TEST_CONTENT_LENGTH") STATUS=$(get_status_code "$RESPONSE") echo "Request Headers:" -echo " X-SHA-256: $TEST_SHA256" +echo " X-SHA-256: $TEST_SHA256_FRESH" echo " X-Content-Type: $TEST_CONTENT_TYPE" echo " X-Content-Length: $TEST_CONTENT_LENGTH" echo "" @@ -185,12 +190,12 @@ echo "=== Test 6: Unsupported Media Type ===" echo "Testing HEAD /upload with potentially unsupported MIME type..." UNSUPPORTED_TYPE="application/x-malware" -RESPONSE=$(make_head_request "$TEST_SHA256" "$UNSUPPORTED_TYPE" "$TEST_CONTENT_LENGTH") +RESPONSE=$(make_head_request "$TEST_SHA256_FRESH" "$UNSUPPORTED_TYPE" "$TEST_CONTENT_LENGTH") STATUS=$(get_status_code "$RESPONSE") REASON=$(get_x_reason "$RESPONSE") echo "Request Headers:" -echo " X-SHA-256: $TEST_SHA256" +echo " X-SHA-256: $TEST_SHA256_FRESH" echo " X-Content-Type: $UNSUPPORTED_TYPE" echo " X-Content-Length: $TEST_CONTENT_LENGTH" echo "" @@ -267,13 +272,13 @@ echo "=== Test 9: Authorization Handling ===" echo "Testing HEAD /upload authorization requirements..." # Test without authorization first -RESPONSE=$(make_head_request "$TEST_SHA256" "$TEST_CONTENT_TYPE" "$TEST_CONTENT_LENGTH") +RESPONSE=$(make_head_request "$TEST_SHA256_AUTH" "$TEST_CONTENT_TYPE" "$TEST_CONTENT_LENGTH") STATUS=$(get_status_code "$RESPONSE") REASON=$(get_x_reason "$RESPONSE") echo "Request Headers (no authorization):" -echo " X-SHA-256: $TEST_SHA256" -echo " X-Content-Type: $TEST_CONTENT_TYPE" +echo " X-SHA-256: $TEST_SHA256_AUTH" +echo " X-Content-Type: $TEST_CONTENT_TYPE" echo " X-Content-Length: $TEST_CONTENT_LENGTH" echo " Authorization: (missing)" echo ""