Updated delete

This commit is contained in:
Your Name
2025-09-02 17:23:02 -04:00
parent 4412317ddb
commit 5838dc4dfc
20 changed files with 20858 additions and 17258 deletions

2
.gitignore vendored
View File

@@ -1,3 +1,5 @@
blossom/ blossom/
logs/ logs/
nostr_core_lib/ nostr_core_lib/
blobs/

View File

@@ -1,514 +1,170 @@
# Ginxsom Blossom Server Implementation Checklist # Ginxsom Blossom Server Implementation Status
This document outlines the implementation plan for ginxsom, a FastCGI-based Blossom server designed to work with nginx for optimal performance. This document tracks the implementation status of ginxsom, a high-performance FastCGI-based Blossom server designed to work with nginx.
## Architecture Overview ## Architecture Overview
- **nginx**: Handles static file serving (GET /<sha256>) for maximum performance - **nginx**: Handles static file serving (GET /<sha256>) for maximum performance
- **FastCGI Application**: Handles authenticated operations, metadata queries, uploads - **FastCGI Application**: Handles authenticated operations, metadata queries, uploads
- **SQLite Database**: Stores blob metadata and server configuration - **SQLite Database**: Stores blob metadata and server configuration
- **File Storage**: Flat directory structure initially, hierarchical optimization later - **File Storage**: Flat directory structure in `blobs/` directory
--- ---
## Phase 1: Basic File Serving & Retrieval (BUD-01) ## BUD-01: Blob Retrieval ✅ **COMPLETE**
### 1.1 Infrastructure Setup ### Infrastructure & Database
- [x] Create basic directory structure - [x] Create directory structure (`blobs/`, `db/`, `logs/`)
- [x] Create `blobs/` directory for file storage - [x] SQLite schema with `blobs` table (sha256, size, type, uploaded_at, uploader_pubkey, filename)
- [x] Create `db/` directory for SQLite database - [x] Database initialization scripts and proper indexes
- [x] Create `logs/` directory for application logs
- [x] Set up proper permissions (nginx readable, app writable)
### 1.2 Database Schema ### GET /<sha256> Endpoint
- [x] Design SQLite schema for blob metadata - [x] nginx static file serving with extension support (.txt, .jpg, .png, etc.)
- [x] `blobs` table: sha256, size, type, uploaded_at, uploader_pubkey, filename - [x] Extension fallback via `try_files` directive
- [x] `server_config` table: key-value pairs for server settings - [x] Proper MIME type detection and headers
- [x] Create database initialization script - [x] Cache headers (Cache-Control, immutable)
- [x] Add proper indexes on sha256 hash - [x] 404 handling for missing blobs
### 1.3 nginx Configuration ### HEAD /<sha256> Endpoint
- [x] Configure nginx for static file serving - [x] FastCGI metadata handler
- [x] Set up location block for `GET /<sha256>` pattern with extension support - [x] Database metadata queries
- [x] Configure try_files directive for multiple extension fallbacks - [x] Proper HTTP headers (Content-Type, Content-Length)
- [x] Configure proper MIME type detection - [x] SHA-256 extraction from URL paths
- [x] Add proper headers (Cache-Control, ETag, etc.) - [x] 404 responses for missing blobs
- [x] Handle 404s gracefully when blob doesn't exist
- [x] Configure FastCGI pass-through for HEAD and non-GET requests
**Future Enhancement Note**: Consider implementing nginx Lua extension for true Blossom compliance with dynamic file discovery. The current approach uses explicit extension lists in `try_files`, which works well for common extensions but may not serve files with unusual extensions. Lua module would allow runtime directory scanning for hash-matching files regardless of extension. ### Testing Status
- [x] File serving works with all supported extensions
### 1.4 Basic HEAD Endpoint - [x] HEAD requests return correct metadata
- [x] Implement FastCGI handler for `HEAD /<sha256>` - [x] 404 responses for missing files
- [x] Query database for blob metadata (single source of truth) - [ ] Performance testing with large files
- [x] Extract SHA-256 from URL (strip extensions)
- [x] Return proper headers (Content-Type, Content-Length, etc.)
- [x] Return 404 if blob doesn't exist in database
- [x] Add server timing headers for debugging
### 1.5 Testing & Validation
- [x] Create test blobs with known SHA-256 hashes
- [x] Verify nginx serves files correctly with extension support
- [x] Verify HEAD requests return proper metadata
- [x] Test with missing files (404 responses)
- [x] Test HEAD requests with and without extensions
- [ ] Performance test with large files
--- ---
## Phase 2: Upload & Authentication (BUD-02) ## BUD-02: File Upload & Authentication ✅ **COMPLETE**
### 2.1 Nostr Authentication Setup ### Nostr Authentication System
- [x] Integrate nostr_core_lib submodule - [x] nostr_core_lib integration and compilation
- [x] Update Makefile to include nostr_core_lib paths and static library - [x] secp256k1 context initialization (CRITICAL BUG FIXED)
- [x] Build libnostr_core_x64.a using provided build.sh script - [x] Authentication functions:
- [x] Add system dependencies: -lsecp256k1 -lssl -lcrypto -lcurl -lz -ldl -lpthread -lm - [x] `parse_authorization_header()` - Extract JSON from "Nostr base64(event)"
- [x] `validate_blossom_event()` - Validate kind 24242 events
- [x] `authenticate_request()` - Main authentication orchestrator
- [x] Enhanced error handling with specific error types (event_expired, invalid_signature, etc.)
- [x] API refactoring - upgraded from low-level crypto to `nostr_crypto_init()` API
- [x] Implement authentication functions in main.c (BUD-02 section): ### PUT /upload Endpoint
- [x] `parse_authorization_header()` - Extract JSON from "Nostr base64(event)" header - [x] Authorization header parsing and validation
- [x] `validate_blossom_event()` - Validate Blossom-specific requirements (kind 24242, content hash, method, expiration) - [x] File upload streaming to temporary location
- [x] `authenticate_request()` - Main orchestrator function
- [x] Leverage existing nostr_core_lib functions:
- [x] Use `nostr_validate_event()` for structure + signature validation (from nip001.h)
- [x] Use standardized error codes from nostr_common.h (NOSTR_SUCCESS, NOSTR_ERROR_EVENT_INVALID_SIGNATURE, etc.)
- [x] Use `nostr_strerror()` for error message translation
### 2.2 Upload Endpoint Implementation
- [x] Implement `PUT /upload` endpoint
- [x] Parse Authorization header (Nostr base64 event extraction)
- [x] Stream file upload to temporary location
- [x] Calculate SHA-256 hash during upload
- [x] Validate hash matches authorization if provided
- [x] Move file to permanent location
- [x] Store metadata in database (including uploader_pubkey and filename)
- [x] Return blob descriptor JSON response
### 2.3 Blob Descriptor Response
- [x] Implement blob descriptor structure
- [x] Required fields: url, sha256, size, type, uploaded
- [x] Handle MIME type detection
- [x] Generate proper blob URLs
- [x] Add optional server-specific fields (uploader_pubkey, filename)
### 2.4 Error Handling
- [x] Implement proper HTTP status codes
- [x] 400 Bad Request for invalid data
- [x] 401 Unauthorized for auth failures
- [x] 409 Conflict for hash mismatches
- [x] 413 Payload Too Large for size limits
- [x] 500 Internal Server Error for system issues
- [x] Add detailed error messages
- [x] Implement request logging
### 2.5 List Blobs Endpoint
- [x] Implement `GET /list/<pubkey>` endpoint
- [x] Extract pubkey from URL path
- [x] Query database for blobs uploaded by specified pubkey
- [x] Support `since` and `until` query parameters for date filtering
- [x] Return JSON array of blob descriptors
- [x] Handle empty results gracefully
- [x] Implement optional authorization with kind 24242 event validation
- [x] Validate `t` tag is set to "list"
- [x] Check authorization expiration
- [x] Verify event signature and structure
### 2.6 Delete Blob Endpoint
- [x] Implement `DELETE /<sha256>` endpoint
- [x] Extract SHA-256 hash from URL path
- [x] Require authorization with kind 24242 event validation
- [x] Validate `t` tag is set to "delete"
- [x] Verify at least one `x` tag matches the requested hash
- [x] Check authorization expiration
- [x] Verify event signature and structure
- [x] Check blob exists in database
- [x] Verify uploader_pubkey matches authorized pubkey (ownership check)
- [x] Remove blob file from filesystem
- [x] Remove blob metadata from database
- [x] Handle file deletion errors gracefully
- [x] Return appropriate success/error responses
### 2.7 Testing & Validation
- [x] Test uploads without authentication
- [x] Test uploads with valid nostr auth ✅ **WORKING** (HTTP 200 success)
- [x] Test uploads with invalid auth ✅ **WORKING** (proper error responses with specific error types)
- [x] Test hash mismatch scenarios ✅ **WORKING** (409 Conflict responses)
- [ ] Test file size limits
- [x] Verify blob descriptors are correct
- [x] Verify database metadata storage (uploader_pubkey and filename)
---
## Phase 3: Upload Requirements (BUD-06)
### 3.1 Upload Policy Configuration
- [ ] Add server configuration options
- [ ] Maximum file size limits
- [ ] Allowed MIME types
- [ ] Authentication requirements
- [ ] Rate limiting settings
- [ ] Storage quota limits
- [ ] Hash-based banning/filtering
### 3.2 HEAD /upload Endpoint Implementation
- [ ] Implement `HEAD /upload` endpoint for pre-flight upload validation
- [ ] Parse client headers:
- [ ] `X-SHA-256`: blob's SHA-256 hash
- [ ] `X-Content-Length`: blob size in bytes
- [ ] `X-Content-Type`: blob's MIME type
- [ ] Handle optional Authorization header (same as PUT /upload)
- [ ] Perform validation checks without file transfer:
- [ ] Validate SHA-256 format
- [ ] Check file size against limits
- [ ] Validate MIME type restrictions
- [ ] Check authentication if required
- [ ] Check if hash already exists (duplicate detection)
- [ ] Check if hash is banned
- [ ] Return appropriate HTTP status codes:
- [ ] `200 OK` - upload can proceed
- [ ] `400 Bad Request` - invalid headers
- [ ] `401 Unauthorized` - auth required
- [ ] `403 Forbidden` - not permitted (banned hash, etc.)
- [ ] `411 Length Required` - missing content length
- [ ] `413 Content Too Large` - file too large
- [ ] `415 Unsupported Media Type` - invalid MIME type
- [ ] Add `X-Reason` header with human-readable error messages
### 3.3 Upload Pre-validation Logic
- [ ] Create validation functions that can be shared between HEAD and PUT endpoints
- [ ] `validate_upload_headers()` - check required headers present and valid
- [ ] `check_file_size_limits()` - enforce maximum size restrictions
- [ ] `check_mime_type_allowed()` - validate against allowed types list
- [ ] `check_hash_restrictions()` - check banned hashes, duplicates
- [ ] `check_upload_permissions()` - user-specific upload rights
### 3.4 DOS Protection Benefits
- [ ] Implement early rejection before file transfer:
- [ ] Authentication happens before any file data sent
- [ ] Size validation prevents large file uploads that would be rejected
- [ ] MIME type checking prevents unwanted file types
- [ ] Hash checking prevents duplicate uploads
- [ ] Update PUT /upload to use same validation functions for consistency
### 3.5 Client Integration Support
- [ ] Update nginx configuration to properly handle HEAD requests to /upload
- [ ] Ensure FastCGI handles HEAD method for /upload endpoint
- [ ] Add CORS headers for preflight requests
### 3.6 Testing & Validation
- [ ] Test HEAD /upload with valid headers
- [ ] Test various error scenarios (missing headers, invalid formats)
- [ ] Test authorization requirements
- [ ] Test policy enforcement (size limits, MIME types, banned hashes)
- [ ] Verify error responses match BUD-06 specification
- [ ] Test client workflow: HEAD check → PUT upload
- [ ] Verify DOS protection effectiveness
---
## Phase 4: Advanced Authentication & Administration System
### 4.1 Flexible Authentication Rules System
#### 4.1.1 Database Schema Extension
- [ ] Create authentication rules tables
- [ ] `auth_rules` table: rule_type, rule_target, operation, rule_value, enabled, expires_at
- [ ] `auth_cache` table: performance caching for rule evaluation results
- [ ] Add indexes on rule_type, rule_target, operation for performance
#### 4.1.2 Authentication Rule Types Implementation
- [ ] Basic rule types:
- [ ] `pubkey_whitelist`: Only specific pubkeys allowed
- [ ] `pubkey_blacklist`: Specific pubkeys banned
- [ ] `hash_blacklist`: Specific file hashes cannot be uploaded
- [ ] `mime_type_whitelist`: Only specific content types allowed
- [ ] `mime_type_blacklist`: Specific content types banned
- [ ] Advanced rule types:
- [ ] `rate_limit`: Limit operations per pubkey/IP per time period
- [ ] `size_limit`: Per-pubkey or global size limits
- [ ] `conditional`: Complex JSON-based rules (time-based, size-based, etc.)
#### 4.1.3 Rule Evaluation Engine
- [ ] Core authentication functions:
- [ ] `evaluate_auth_rules()`: Main rule evaluation with caching
- [ ] `check_rule_cache()`: Performance optimization layer
- [ ] `process_rule_priority()`: Handle rule precedence and conflicts
- [ ] `update_auth_cache()`: Store evaluation results for reuse
- [ ] Integration points:
- [ ] Extend `handle_upload_request()` with rule evaluation
- [ ] Extend `handle_delete_request()` with rule evaluation
- [ ] Extend `handle_list_request()` with rule evaluation (optional)
#### 4.1.4 Rule Management Interface
- [ ] SQL-based rule management:
- [ ] `add_auth_rule()`: Add new authentication rules
- [ ] `remove_auth_rule()`: Remove rules by ID
- [ ] `list_auth_rules()`: Query existing rules with filters
- [ ] `update_auth_rule()`: Modify existing rule parameters
### 4.2 Nostr-Native Administrative Interface
#### 4.2.1 Server Identity Management
- [ ] Server keypair generation and storage:
- [ ] Generate server public/private keypair on first run
- [ ] Store server pubkey in `server_config` table
- [ ] Secure private key storage (encrypted file or environment)
- [ ] Key rotation capabilities for security
#### 4.2.2 Administrator Management System
- [ ] Administrator database schema:
- [ ] `administrators` table: pubkey, permissions, added_by, expires_at
- [ ] Permission levels: rules, config, users, stats, * (full access)
- [ ] Initial admin setup during server deployment
- [ ] Administrative functions:
- [ ] `check_admin_permissions()`: Verify admin authorization
- [ ] `add_administrator()`: Grant admin privileges
- [ ] `remove_administrator()`: Revoke admin privileges
- [ ] `list_administrators()`: Query admin list with permissions
#### 4.2.3 Administrative Event Types
- [ ] Event kind definitions:
- [ ] Kind 30242: Administrative commands (rule_add, rule_remove, config_set, etc.)
- [ ] Kind 30243: Administrative queries (stats_get, rule_list, audit_log, etc.)
- [ ] Kind 30244: Administrative responses (command results, query data)
- [ ] Command implementations:
- [ ] Rule management: `rule_add`, `rule_remove`, `rule_update`, `rule_list`
- [ ] System management: `config_set`, `config_get`, `admin_add`, `admin_remove`
- [ ] Query operations: `stats_get`, `blob_list`, `audit_log`, `storage_cleanup`
#### 4.2.4 Administrative Event Processing
- [ ] HTTP administrative endpoint:
- [ ] `POST /admin` with nostr event authorization
- [ ] JSON command interface with parameter validation
- [ ] Synchronous response with operation results
- [ ] Direct nostr relay integration (future enhancement):
- [ ] Subscribe to administrative events on configured relays
- [ ] Real-time event processing and response
- [ ] Publish response events back to relays
#### 4.2.5 Administrative Audit Trail
- [ ] Administrative logging system:
- [ ] `admin_log` table: track all administrative actions
- [ ] Event ID references for nostr event traceability
- [ ] Success/failure tracking with detailed error messages
- [ ] Audit query capabilities for compliance
#### 4.2.6 Security & Permission Framework
- [ ] Multi-level permission system:
- [ ] Granular permissions: rules, config, users, stats
- [ ] Permission inheritance and delegation
- [ ] Time-limited administrative access (expires_at)
- [ ] Authentication security:
- [ ] Strong nostr signature validation
- [ ] Administrator authorization chain verification
- [ ] Command-specific permission checks
- [ ] Rate limiting for administrative operations
### 4.3 Integration & Testing
- [ ] Authentication system integration:
- [ ] Integrate rule evaluation into existing authentication flow
- [ ] Maintain backward compatibility with nostr-only authentication
- [ ] Performance testing with rule caching
- [ ] Administrative system testing:
- [ ] Test all administrative commands and queries
- [ ] Verify permission enforcement and security
- [ ] Test audit logging and compliance features
- [ ] Load testing for administrative operations
---
## Phase 5: Optional Features
---
## Phase 5: Optional Features
### 4.1 User Server Lists (BUD-03) - Optional
- [ ] Implement server list advertisement
- [ ] Handle kind:10063 events
- [ ] Create server discovery endpoint
- [ ] Test client fallback scenarios
### 4.2 Blob Mirroring (BUD-04) - Optional
- [ ] Implement `PUT /mirror` endpoint
- [ ] Add URL downloading capability
- [ ] Implement hash verification
- [ ] Handle authorization for mirroring
- [ ] Test inter-server mirroring
### 4.3 Media Optimization (BUD-05) - Optional
- [ ] Implement `PUT /media` endpoint
- [ ] Add media processing libraries
- [ ] Implement optimization algorithms
- [ ] Handle various media formats
- [ ] Test optimization pipeline
### 4.4 Payment Integration (BUD-07) - Optional
- [ ] Implement 402 Payment Required responses
- [ ] Add Lightning payment support
- [ ] Add Cashu payment support
- [ ] Implement payment verification
- [ ] Test payment flows
### 4.5 NIP-94 Metadata (BUD-08) - Optional
- [ ] Add NIP-94 tag generation
- [ ] Extend blob descriptor responses
- [ ] Generate magnet links if supported
- [ ] Test metadata compatibility
### 4.6 Blob Reporting (BUD-09) - Optional
- [ ] Implement `PUT /report` endpoint
- [ ] Handle NIP-56 report events
- [ ] Add moderation interface
- [ ] Implement content filtering
- [ ] Test reporting workflow
---
## Development Milestones
### Milestone 1: Basic Functionality (Phase 1 Complete)
- [x] nginx serves files by hash with extension support
- [x] HEAD requests return metadata from database
- [x] Database stores blob information with proper schema
### Milestone 2: Full Upload Support (Phase 2 Pending)
- [x] Basic upload functionality working (PUT requests accepted)
- [x] SHA-256 hash calculation during upload - [x] SHA-256 hash calculation during upload
- [x] File storage to blobs/ directory - [x] Hash validation against authorization
- [x] File permissions (644) for nginx serving
- [x] Database metadata storage (uploader_pubkey, filename)
- [x] Blob descriptor JSON response - [x] Blob descriptor JSON response
- [x] Authenticated uploads working (Nostr kind 24242 event validation)
- [x] Proper error handling for upload scenarios
- [x] Database metadata storage during upload (with uploader_pubkey and filename)
- [x] List blobs endpoint implemented (GET /list/<pubkey>)
- [x] Delete blob endpoint implemented (DELETE /<sha256>)
### Milestone 3: Policy Compliance (Phase 3 Pending) ### GET /list/<pubkey> Endpoint
- [ ] Upload requirements implemented - [x] Extract pubkey from URL path
- [ ] Server policies configurable - [x] Database queries for user's blobs
- [ ] Spec compliance verified - [x] Optional authorization with kind 24242 event validation
- [x] Support for `since`/`until` query parameters
- [x] JSON array responses with blob descriptors
### Milestone 4: Advanced Authentication (Phase 4 Complete) ### DELETE /<sha256> Endpoint
- [ ] Flexible authentication rules system operational - [x] SHA-256 extraction from URL
- [ ] Nostr-native administrative interface implemented - [x] Required authorization with kind 24242 validation
- [ ] Rule evaluation engine with caching performance - [x] Ownership verification (uploader_pubkey matching)
- [ ] Administrative audit trail and compliance features - [x] File and database cleanup
- [x] Proper error handling for missing files
### Milestone 5: Production Ready (Phase 5 Complete) ### Testing Status
- Optional features implemented as needed - [x] Upload with valid nostr authentication (HTTP 200)
- Performance optimized - [x] Upload without authentication (proper error responses)
- Security hardened - [x] Hash mismatch validation (409 Conflict)
- Documentation complete - [x] List endpoint returns proper JSON
- [x] Delete endpoint with ownership checks
- [x] File retrieval after upload working
- [ ] File size limit testing
--- ---
## Testing Strategy ## BUD-03: Server List (User Server Lists) ⚪ **FOR CLIENTS, NOT SERVERS**
### Unit Tests ## BUD-04: Blob Mirroring ⚪ **PARTIAL**
- [ ] Authentication validation functions
- [ ] SHA-256 hash calculation
- [ ] Database operations
- [ ] Configuration parsing
### Integration Tests ### Current Status
- [ ] nginx + FastCGI integration - [x] nginx endpoint configured (`PUT /mirror`)
- [ ] End-to-end upload/download flows - [x] FastCGI routing established
- [ ] Error scenario handling - [ ] URL downloading implementation
- [ ] Multi-client concurrent access - [ ] Hash verification after download
- [ ] Authorization handling for mirroring
### Performance Tests - [ ] Inter-server mirroring testing
- [ ] Large file uploads/downloads
- [ ] Concurrent request handling
- [ ] Database query performance
- [ ] Memory usage optimization
### Compliance Tests
- [ ] Blossom protocol compliance
- [ ] Nostr event validation
- [ ] HTTP specification compliance
- [ ] Security best practices
--- ---
## Future Improvements ## BUD-05: Media Optimization ⚪ **PARTIAL**
### Upload Security & Performance Enhancements ### Current Status
- [x] nginx endpoint configured (`HEAD/PUT /media`)
**Current Issue**: The existing upload flow has a DOS vulnerability where large files are loaded entirely into memory before authentication occurs. This allows unauthenticated attackers to exhaust server memory. - [x] FastCGI routing established
- [ ] Media processing libraries integration
**Current Flow**: - [ ] Optimization algorithms implementation
``` - [ ] Multi-format media handling
Client → nginx → FastCGI ginxsom - [ ] Optimization pipeline testing
├─ reads entire file into memory (malloc + fread)
├─ validates auth (after file in memory)
└─ saves to blobs/ or errors
```
**Proposed Solution - nginx Upload Module**:
```
Client → nginx upload module → temp file → FastCGI ginxsom
├─ saves to /tmp/uploads/ ├─ validates auth quickly
└─ passes metadata only ├─ moves file to blobs/
└─ or deletes temp file
```
**Benefits**:
- Eliminates DOS vulnerability - nginx handles large files efficiently
- Fast auth validation - no waiting for full upload
- Leverages nginx strengths - what it's designed for
- Better scalability - memory usage independent of file size
**Implementation Requirements**:
- nginx upload module configuration
- Temp file cleanup handling
- Modified FastCGI code to process file paths instead of stdin
- Proper error handling for temp file operations
**Alternative Enhancement - HTTP 100 Continue**:
Could propose new Blossom BUD for two-phase upload:
1. Client sends headers with `Expect: 100-continue` + auth event
2. Server validates early (signature, expiration, pubkey)
3. Server responds `100 Continue` or `401 Unauthorized`
4. Client only sends file data if authorized
**Priority**: Implement after core BUD compliance is complete.
--- ---
## Security Considerations ## BUD-06: Upload Requirements ⚪ **NOT IMPLEMENTED**
- [ ] Input validation on all endpoints ### HEAD /upload Pre-flight Validation
- [ ] Rate limiting to prevent abuse - [ ] `HEAD /upload` endpoint implementation
- [ ] Secure file storage permissions - [ ] Client header parsing (X-SHA-256, X-Content-Length, X-Content-Type)
- [ ] Database injection prevention - [ ] Pre-flight validation without file transfer:
- [ ] Memory safety in C implementation - [ ] SHA-256 format validation
- [ ] Proper error message sanitization - [ ] File size limit checking
- [ ] Log security (no sensitive data) - [ ] MIME type restrictions
- [x] **secp256k1 Context Initialization Fixed** - Authentication system now fully functional - [ ] Authentication validation
- [x] **API Refactoring Complete** - Upgraded from low-level crypto headers to high-level `nostr_crypto_init()` API - [ ] Duplicate detection
- [x] **Enhanced Error Messages** - Specific error types: event_expired, invalid_signature, invalid_pubkey, etc. - [ ] Banned hash checking
- [ ] **Upload DOS vulnerability** - Current implementation vulnerable to memory exhaustion attacks - [ ] Proper HTTP status codes (200, 400, 401, 403, 411, 413, 415)
- [ ] X-Reason headers for error messages
### Upload Policy Configuration
- [ ] Server configuration system
- [ ] Maximum file size limits
- [ ] Allowed MIME type restrictions
- [ ] Rate limiting implementation
- [ ] DOS protection benefits
--- ---
## Performance Optimizations ## BUD-07: Payment Integration ⚪ **NOT IMPLEMENTED**
- [ ] nginx direct file serving (bypasses application) *Optional feature - not currently planned*
- [ ] FastCGI connection pooling
- [ ] Database connection management - [ ] 402 Payment Required responses
- [ ] Efficient hash calculation - [ ] Lightning payment support
- [ ] Memory-mapped file operations - [ ] Cashu payment integration
- [ ] Hierarchical file storage (future) - [ ] Payment verification flows
- [ ] CDN integration support
--- ---
## Deployment Checklist ## BUD-08: NIP-94 Metadata ⚪ **NOT IMPLEMENTED**
*Optional feature - not currently planned*
- [ ] NIP-94 tag generation
- [ ] Extended blob descriptor responses
- [ ] Magnet link generation
- [ ] Metadata compatibility testing
---
## BUD-09: Content Reporting ⚪ **PARTIAL**
### Current Status
- [x] nginx endpoint configured (`PUT /report`)
- [x] FastCGI routing established
- [ ] NIP-56 report event handling
- [ ] Moderation interface
- [ ] Content filtering implementation
- [ ] Reporting workflow testing
- [ ] nginx configuration template
- [ ] FastCGI service configuration
- [ ] Database initialization scripts
- [ ] Log rotation setup
- [ ] Monitoring and health checks
- [ ] Backup procedures
- [ ] Security hardening guide
- [ ] Documentation and examples

View File

@@ -1,231 +1,232 @@
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 296 Content length: 296
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30382d32305430393a33333a32362d30343a30300a52616e646f6d20646174613a20323465336130393961313333323063653530396562323334663735663334663733656239393966616133373764346361636231343165616536313933396665370a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431333a35393a31312d30343a30300a52616e646f6d20646174613a20373730353061633932653438633437373436653164393035343164393930373965383131633539666464313039343931313635623664333130656638646137360a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a
File data as string: Test blob content for Ginxsom Blossom server File data as string: Test blob content for Ginxsom Blossom server
Timestamp: 2025-08-20T09:33:26-04:00 Timestamp: 2025-09-02T13:59:11-04:00
Random data: 24e3a099a13320ce509eb234f75f34f73eb999faa377d4cacb141eae61939fe7 Random data: 77050ac92e48c47746e1d90541d99079e811c59fdd109491165b6d310ef8da76
Test message: Hello from put_test.sh! Test message: Hello from put_test.sh!
This file is used to test the upload functionality This file is used to test the upload functionality
of the Ginxsom Blossom server implementation. of the Ginxsom Blossom server implementation.
Calculated SHA-256: 97ed52416da9b486cc21ff71911ebb10b7298b1b12cdb5735fb8cfd76bb3d18e Calculated SHA-256: e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 296 Content length: 296
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30382d32305430393a33393a32372d30343a30300a52616e646f6d20646174613a20383039303533333161616530366665333533313961366630666266383566636165313966663139346561643962643664363062393237636432303035616130330a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431343a32323a35352d30343a30300a52616e646f6d20646174613a20393532613538346438663366633662356534396231646661626266363864373633383564366435313134326161303731373063373138393765613836316330330a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a
File data as string: Test blob content for Ginxsom Blossom server File data as string: Test blob content for Ginxsom Blossom server
Timestamp: 2025-08-20T09:39:27-04:00 Timestamp: 2025-09-02T14:22:55-04:00
Random data: 80905331aae06fe35319a6f0fbf85fcae19ff194ead9bd6d60b927cd2005aa03 Random data: 952a584d8f3fc6b5e49b1dfabbf68d76385d6d51142aa07170c71897ea861c03
Test message: Hello from put_test.sh! Test message: Hello from put_test.sh!
This file is used to test the upload functionality This file is used to test the upload functionality
of the Ginxsom Blossom server implementation. of the Ginxsom Blossom server implementation.
Calculated SHA-256: 87714d44b5d3a3954de88a1ce6b46eaa0b0d11887879a23e649fce83f0adee62 Calculated SHA-256: 52d7920725bbbd86d54a7802a45c0c39fa8158705436fc57d7c4fb4be1ce75f1
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 296 Content length: 296
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325430393a34343a33312d30343a30300a52616e646f6d20646174613a20376263336438313834326431363263643233393234356664393863316338363563343264383338646465653634343536653962633836366463313462353432610a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431353a31373a34372d30343a30300a52616e646f6d20646174613a20346538666566656333313034623838343038663063373161373365393762613137363834363734376535353737333334643432626533313438333961396262610a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a
File data as string: Test blob content for Ginxsom Blossom server File data as string: Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T09:44:31-04:00 Timestamp: 2025-09-02T15:17:47-04:00
Random data: 7bc3d81842d162cd239245fd98c1c865c42d838ddee64456e9bc866dc14b542a Random data: 4e8fefec3104b88408f0c71a73e97ba176846747e5577334d42be314839a9bba
Test message: Hello from put_test.sh! Test message: Hello from put_test.sh!
This file is used to test the upload functionality This file is used to test the upload functionality
of the Ginxsom Blossom server implementation. of the Ginxsom Blossom server implementation.
Calculated SHA-256: 2f4958f2e57b6d74120583abbfa7571171e1f5ca21b9b32643184b8af0027cfc Calculated SHA-256: 115c440bf5b69015f8b844d325ae33458a555b463d5d53e4dfe2d24cd740c5bc
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 83 Content length: 155
File data to hash: 74657374206461746120666f7220686173682038343731363137316261623136616430323162643839353330353031383966653630373539313734333663643131636339333366303231626263356435623062 File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431353a33363a33322d30343a30300a52616e646f6d3a2030353262656263326261313936326364643162366163383631626662366530350a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: test data for hash 84716171bab16ad021bd8953050189fe6075917436cd11cc933f021bbc5d5b0b File data as string: Test blob for deletion
Calculated SHA-256: d831a2b32ba89becc86fdb775c6fc09ad874bf126207fd275598f62d630044f4 Timestamp: 2025-09-02T15:36:32-04:00
Random: 052bebc2ba1962cdd1b6ac861bfb6e05
This file will be deleted as part of the DELETE test.
Calculated SHA-256: ef60ec148dbbbb4d78149dc02ae6fde50011f5232e6a3cfbaeca6290acdd9f5c
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 9 Content length: 34
File data to hash: 746573742064617461 File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: test data File data as string: Test file for unauthorized delete
Calculated SHA-256: 916f0027a575074ce72a331777c3478d6513f786a591bd892da1a577bf2335f9
Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 155
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431353a33373a34382d30343a30300a52616e646f6d3a2062306266613766653035316634633361306633323163373632333561653235660a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: This is a set file to test. Don't edit. File data as string: Test blob for deletion
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540 Timestamp: 2025-09-02T15:37:48-04:00
Random: b0bfa7fe051f4c3a0f321c76235ae25f
This file will be deleted as part of the DELETE test.
Calculated SHA-256: 8f104c1d5146cfe700f9e818db9973eeb05a32b0f7f7be5fa38b9ceafecd0af3
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 34
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: This is a set file to test. Don't edit. File data as string: Test file for unauthorized delete
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540
Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 155
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431353a34373a33332d30343a30300a52616e646f6d3a2030373530313237316633613337323137646637346235313830363436363261370a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: This is a set file to test. Don't edit. File data as string: Test blob for deletion
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540 Timestamp: 2025-09-02T15:47:33-04:00
Random: 07501271f3a37217df74b518064662a7
This file will be deleted as part of the DELETE test.
Calculated SHA-256: 728bfdc5fc7e2503af458225b4daecb6c512d8a45c90ba9561b3021f6c5f454a
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 34
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: This is a set file to test. Don't edit. File data as string: Test file for unauthorized delete
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540
Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 155
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431353a34393a35372d30343a30300a52616e646f6d3a2031303832356265376530316537633733316664643364383337633535373136300a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: This is a set file to test. Don't edit. File data as string: Test blob for deletion
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540 Timestamp: 2025-09-02T15:49:57-04:00
Random: 10825be7e01e7c731fdd3d837c557160
This file will be deleted as part of the DELETE test.
Calculated SHA-256: f3c2bebcb2db26a5e78251f4f9894d1b9fc95a0a9cd2c8500f95ec5ee98e5034
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 34
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: This is a set file to test. Don't edit. File data as string: Test file for unauthorized delete
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540
Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 155
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431363a30303a35322d30343a30300a52616e646f6d3a2037323939626138646631343261356662626334396565653933633961653339320a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: This is a set file to test. Don't edit. File data as string: Test blob for deletion
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540 Timestamp: 2025-09-02T16:00:52-04:00
Random: 7299ba8df142a5fbbc49eee93c9ae392
This file will be deleted as part of the DELETE test.
Calculated SHA-256: 2b585be19adc5a3b3bfe100c5c6c70839cbe9beaf4ff1ea02a2484fb86c7eb20
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 34
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: This is a set file to test. Don't edit. File data as string: Test file for unauthorized delete
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540
Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 155
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431363a30373a34372d30343a30300a52616e646f6d3a2031323139363461626261373566356538653935373065663264383933663033330a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: This is a set file to test. Don't edit. File data as string: Test blob for deletion
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540 Timestamp: 2025-09-02T16:07:47-04:00
Random: 121964abba75f5e8e9570ef2d893f033
This file will be deleted as part of the DELETE test.
Calculated SHA-256: 90dacf3b0c30be82a17a19b6fbc575cc374f961ba89e6fb6a3e686aae9d359a3
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 34
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: This is a set file to test. Don't edit. File data as string: Test file for unauthorized delete
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540
Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 155
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431363a30383a31342d30343a30300a52616e646f6d3a2066386361623430353063653662353336666664613165343637366366316566370a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: This is a set file to test. Don't edit. File data as string: Test blob for deletion
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540 Timestamp: 2025-09-02T16:08:14-04:00
Random: f8cab4050ce6b536ffda1e4676cf1ef7
This file will be deleted as part of the DELETE test.
Calculated SHA-256: b84b9a4c07c81b39b2ea3e77ef4e83b00034870b915540a87cb259b419316948
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 34
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: This is a set file to test. Don't edit. File data as string: Test file for unauthorized delete
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540
Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 155
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431363a30383a34352d30343a30300a52616e646f6d3a2035326366616239633032303230333230333731313636666432303130643561360a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: This is a set file to test. Don't edit. File data as string: Test blob for deletion
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540 Timestamp: 2025-09-02T16:08:45-04:00
Random: 52cfab9c02020320371166fd2010d5a6
This file will be deleted as part of the DELETE test.
Calculated SHA-256: 0d309cb86f18a0e641c3fa5c8e6f74298d8519129d23a01696781bd91cdd6a84
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 34
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: This is a set file to test. Don't edit. File data as string: Test file for unauthorized delete
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540
Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 155
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431363a31313a35312d30343a30300a52616e646f6d3a2037323561643439356132343061663661326539366263633462623337663736610a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: This is a set file to test. Don't edit. File data as string: Test blob for deletion
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540 Timestamp: 2025-09-02T16:11:51-04:00
Random: 725ad495a240af6a2e96bcc4bb37f76a
This file will be deleted as part of the DELETE test.
Calculated SHA-256: 04f46448a6c651e37ff64ab22f807c40315f7c51f67545c60a7163a24c93d679
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 34
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: This is a set file to test. Don't edit. File data as string: Test file for unauthorized delete
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540
Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 39 Content length: 155
File data to hash: 546869732069732061207365742066696c6520746f20746573742e20446f6e277420656469742e File data to hash: 5465737420626c6f6220666f722064656c6574696f6e0a54696d657374616d703a20323032352d30392d30325431363a31353a31392d30343a30300a52616e646f6d3a2038633061376561333361346336633265323134323034353865396136666332370a546869732066696c652077696c6c2062652064656c657465642061732070617274206f66207468652044454c45544520746573742e0a
File data as string: This is a set file to test. Don't edit. File data as string: Test blob for deletion
Calculated SHA-256: 3f49f934e838893bdc516e680ade3cee2a848bbf42c3e7aba0108cf7cedb8540 Timestamp: 2025-09-02T16:15:19-04:00
Random: 8c0a7ea33a4c6c2e21420458e9a6fc27
This file will be deleted as part of the DELETE test.
Calculated SHA-256: 5419a62dcb85b8e8466f273362ae4d2da8c62eab77c12f3737d92f4cec583e17
=== END DEBUG SESSION === === END DEBUG SESSION ===
=== HASH DEBUG SESSION === === HASH DEBUG SESSION ===
Content length: 296 Content length: 34
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431323a34353a32382d30343a30300a52616e646f6d20646174613a20386435393962643333353636323466636237383266383332623866303364396135333937326238343732613162646361633833656165333533653732323632310a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a File data to hash: 546573742066696c6520666f7220756e617574686f72697a65642064656c6574650a
File data as string: Test blob content for Ginxsom Blossom server File data as string: Test file for unauthorized delete
Timestamp: 2025-09-02T12:45:28-04:00
Random data: 8d599bd3356624fcb782f832b8f03d9a53972b8472a1bdcac83eae353e722621
Test message: Hello from put_test.sh!
This file is used to test the upload functionality Calculated SHA-256: 69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939
of the Ginxsom Blossom server implementation.
Calculated SHA-256: 7b3b92e2ffefed8c7444e9c78c432d279d859672e465bfc90fe44a7a2566a156
=== END DEBUG SESSION ===
=== HASH DEBUG SESSION ===
Content length: 296
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431323a34353a33332d30343a30300a52616e646f6d20646174613a20306434646365343535663861376264666238626431636338653930633235343666636237316630363839633337373435333061646661373138303134633930350a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a
File data as string: Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T12:45:33-04:00
Random data: 0d4dce455f8a7bdfb8bd1cc8e90c2546fcb71f0689c3774530adfa718014c905
Test message: Hello from put_test.sh!
This file is used to test the upload functionality
of the Ginxsom Blossom server implementation.
Calculated SHA-256: a27df9a425b43ca292eaf4e3779229d1955ea2e25aeddef196232008d4a25c5a
=== END DEBUG SESSION ===
=== HASH DEBUG SESSION ===
Content length: 296
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431323a34353a34322d30343a30300a52616e646f6d20646174613a20643239383630663962333735633266393634646433626362343436366661303138666537306163363333356234656537396365633030306334663764653165390a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a
File data as string: Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T12:45:42-04:00
Random data: d29860f9b375c2f964dd3bcb4466fa018fe70ac6335b4ee79cec000c4f7de1e9
Test message: Hello from put_test.sh!
This file is used to test the upload functionality
of the Ginxsom Blossom server implementation.
Calculated SHA-256: 61993aa6a0969bca4316461550095adbd2b5e82f691f514454a8f4082179c7c1
=== END DEBUG SESSION ===
=== HASH DEBUG SESSION ===
Content length: 296
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431323a34363a35302d30343a30300a52616e646f6d20646174613a20346630333037316538646536373133353963633966326434633836383832356335393736303161333232346339323463313661633633643331323232353935650a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a
File data as string: Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T12:46:50-04:00
Random data: 4f03071e8de671359cc9f2d4c868825c597601a3224c924c16ac63d31222595e
Test message: Hello from put_test.sh!
This file is used to test the upload functionality
of the Ginxsom Blossom server implementation.
Calculated SHA-256: 8f68175a71f1a38e70e0dac1b45973510973fd713a37a10e9b4d04b1558a7999
=== END DEBUG SESSION === === END DEBUG SESSION ===

View File

@@ -3,140 +3,264 @@ nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_verify_event_signature result: 0 (Success)
CRYPTO VALIDATION FAILED!
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === END CRYPTO DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === COMPLETE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event result: 0 (Success)
=== END STRUCTURE DEBUG === === END COMPLETE DEBUG ===
=== CRYPTO VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_validate_event_structure result: 0 (Success)
CRYPTO VALIDATION FAILED! === END STRUCTURE DEBUG ===
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== STRUCTURE VALIDATION DEBUG === === END CRYPTO DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG === === COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== CRYPTO VALIDATION DEBUG === === END COMPLETE DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key)
CRYPTO VALIDATION FAILED! === STRUCTURE VALIDATION DEBUG ===
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64) nostr_validate_event_structure result: 0 (Success)
=== END CRYPTO DEBUG === === END STRUCTURE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === CRYPTO VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_verify_event_signature result: 0 (Success)
=== END STRUCTURE DEBUG === === END CRYPTO DEBUG ===
=== CRYPTO VALIDATION DEBUG === === COMPLETE VALIDATION DEBUG ===
nostr_verify_event_signature result: -32 (Event has invalid public key) nostr_validate_event result: 0 (Success)
CRYPTO VALIDATION FAILED! === END COMPLETE DEBUG ===
Failed pubkey: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (length: 64)
=== END CRYPTO DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG === === STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success) nostr_validate_event_structure result: 0 (Success)

2674
Trash/main copy.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +0,0 @@
Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T15:17:47-04:00
Random data: 4e8fefec3104b88408f0c71a73e97ba176846747e5577334d42be314839a9bba
Test message: Hello from put_test.sh!
This file is used to test the upload functionality
of the Ginxsom Blossom server implementation.

View File

@@ -1,7 +0,0 @@
Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T14:22:55-04:00
Random data: 952a584d8f3fc6b5e49b1dfabbf68d76385d6d51142aa07170c71897ea861c03
Test message: Hello from put_test.sh!
This file is used to test the upload functionality
of the Ginxsom Blossom server implementation.

View File

@@ -1,7 +0,0 @@
Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T13:59:11-04:00
Random data: 77050ac92e48c47746e1d90541d99079e811c59fdd109491165b6d310ef8da76
Test message: Hello from put_test.sh!
This file is used to test the upload functionality
of the Ginxsom Blossom server implementation.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,42 +0,0 @@
=== HASH DEBUG SESSION ===
Content length: 296
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431333a35393a31312d30343a30300a52616e646f6d20646174613a20373730353061633932653438633437373436653164393035343164393930373965383131633539666464313039343931313635623664333130656638646137360a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a
File data as string: Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T13:59:11-04:00
Random data: 77050ac92e48c47746e1d90541d99079e811c59fdd109491165b6d310ef8da76
Test message: Hello from put_test.sh!
This file is used to test the upload functionality
of the Ginxsom Blossom server implementation.
Calculated SHA-256: e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4
=== END DEBUG SESSION ===
=== HASH DEBUG SESSION ===
Content length: 296
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431343a32323a35352d30343a30300a52616e646f6d20646174613a20393532613538346438663366633662356534396231646661626266363864373633383564366435313134326161303731373063373138393765613836316330330a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a
File data as string: Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T14:22:55-04:00
Random data: 952a584d8f3fc6b5e49b1dfabbf68d76385d6d51142aa07170c71897ea861c03
Test message: Hello from put_test.sh!
This file is used to test the upload functionality
of the Ginxsom Blossom server implementation.
Calculated SHA-256: 52d7920725bbbd86d54a7802a45c0c39fa8158705436fc57d7c4fb4be1ce75f1
=== END DEBUG SESSION ===
=== HASH DEBUG SESSION ===
Content length: 296
File data to hash: 5465737420626c6f6220636f6e74656e7420666f722047696e78736f6d20426c6f73736f6d207365727665720a54696d657374616d703a20323032352d30392d30325431353a31373a34372d30343a30300a52616e646f6d20646174613a20346538666566656333313034623838343038663063373161373365393762613137363834363734376535353737333334643432626533313438333961396262610a54657374206d6573736167653a2048656c6c6f2066726f6d207075745f746573742e7368210a0a546869732066696c65206973207573656420746f2074657374207468652075706c6f61642066756e6374696f6e616c6974790a6f66207468652047696e78736f6d20426c6f73736f6d2073657276657220696d706c656d656e746174696f6e2e0a
File data as string: Test blob content for Ginxsom Blossom server
Timestamp: 2025-09-02T15:17:47-04:00
Random data: 4e8fefec3104b88408f0c71a73e97ba176846747e5577334d42be314839a9bba
Test message: Hello from put_test.sh!
This file is used to test the upload functionality
of the Ginxsom Blossom server implementation.
Calculated SHA-256: 115c440bf5b69015f8b844d325ae33458a555b463d5d53e4dfe2d24cd740c5bc
=== END DEBUG SESSION ===

View File

@@ -1,36 +0,0 @@
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===
=== STRUCTURE VALIDATION DEBUG ===
nostr_validate_event_structure result: 0 (Success)
=== END STRUCTURE DEBUG ===
=== CRYPTO VALIDATION DEBUG ===
nostr_verify_event_signature result: 0 (Success)
=== END CRYPTO DEBUG ===
=== COMPLETE VALIDATION DEBUG ===
nostr_validate_event result: 0 (Success)
=== END COMPLETE DEBUG ===

View File

@@ -1,28 +1,103 @@
127.0.0.1 - - [02/Sep/2025:11:22:13 -0400] "PUT /upload HTTP/1.1" 401 150 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:00:53 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:11:29:38 -0400] "PUT /upload HTTP/1.1" 401 150 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:00:53 -0400] "GET /2b585be19adc5a3b3bfe100c5c6c70839cbe9beaf4ff1ea02a2484fb86c7eb20.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:11:32:15 -0400] "PUT /upload HTTP/1.1" 401 150 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:00:53 -0400] "DELETE /2b585be19adc5a3b3bfe100c5c6c70839cbe9beaf4ff1ea02a2484fb86c7eb20 HTTP/1.1" 403 132 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:11:35:33 -0400] "PUT /upload HTTP/1.1" 401 150 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:00:53 -0400] "GET /2b585be19adc5a3b3bfe100c5c6c70839cbe9beaf4ff1ea02a2484fb86c7eb20.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:11:40:11 -0400] "PUT /upload HTTP/1.1" 401 150 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:00:53 -0400] "HEAD /2b585be19adc5a3b3bfe100c5c6c70839cbe9beaf4ff1ea02a2484fb86c7eb20 HTTP/1.1" 200 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:11:43:51 -0400] "PUT /upload HTTP/1.1" 401 163 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:00:53 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:11:48:32 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:00:53 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:12:01:40 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:07:48 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:12:45:18 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:07:48 -0400] "GET /90dacf3b0c30be82a17a19b6fbc575cc374f961ba89e6fb6a3e686aae9d359a3.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:12:45:29 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:07:48 -0400] "DELETE /90dacf3b0c30be82a17a19b6fbc575cc374f961ba89e6fb6a3e686aae9d359a3 HTTP/1.1" 403 132 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:12:45:34 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:07:48 -0400] "GET /90dacf3b0c30be82a17a19b6fbc575cc374f961ba89e6fb6a3e686aae9d359a3.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:12:45:42 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:07:48 -0400] "HEAD /90dacf3b0c30be82a17a19b6fbc575cc374f961ba89e6fb6a3e686aae9d359a3 HTTP/1.1" 200 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:12:46:50 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:07:49 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:12:49:20 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 200 1520 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:07:49 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:13:59:11 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:15 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:13:59:38 -0400] "GET /e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4.txt HTTP/1.1" 404 162 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:15 -0400] "GET /b84b9a4c07c81b39b2ea3e77ef4e83b00034870b915540a87cb259b419316948.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:14:03:38 -0400] "GET /e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4.txt HTTP/1.1" 404 162 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:15 -0400] "DELETE /b84b9a4c07c81b39b2ea3e77ef4e83b00034870b915540a87cb259b419316948 HTTP/1.1" 403 132 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:14:05:11 -0400] "GET /e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4.txt HTTP/1.1" 404 162 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:15 -0400] "GET /b84b9a4c07c81b39b2ea3e77ef4e83b00034870b915540a87cb259b419316948.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:14:22:56 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:15 -0400] "HEAD /b84b9a4c07c81b39b2ea3e77ef4e83b00034870b915540a87cb259b419316948 HTTP/1.1" 200 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:14:23:24 -0400] "GET /e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4.txt HTTP/1.1" 404 162 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:15 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:14:24:38 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 200 635 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:15 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:14:25:06 -0400] "GET /e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4 HTTP/1.1" 404 162 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:45 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:14:25:10 -0400] "GET /e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4.txt HTTP/1.1" 404 162 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:45 -0400] "GET /0d309cb86f18a0e641c3fa5c8e6f74298d8519129d23a01696781bd91cdd6a84.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:15:17:32 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 200 635 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:45 -0400] "DELETE /0d309cb86f18a0e641c3fa5c8e6f74298d8519129d23a01696781bd91cdd6a84 HTTP/1.1" 403 132 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:15:17:47 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:45 -0400] "GET /0d309cb86f18a0e641c3fa5c8e6f74298d8519129d23a01696781bd91cdd6a84.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:15:18:08 -0400] "GET /e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4.txt HTTP/1.1" 404 162 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:45 -0400] "HEAD /0d309cb86f18a0e641c3fa5c8e6f74298d8519129d23a01696781bd91cdd6a84 HTTP/1.1" 200 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:15:20:15 -0400] "GET /e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4.txt HTTP/1.1" 200 296 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:46 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:15:20:49 -0400] "GET /e6bdc6b5336072dc05e1a6eea68c75110cbd6c1994f5dbfe75c5880a8b43dcf4 HTTP/1.1" 200 296 "-" "curl/8.15.0" 127.0.0.1 - - [02/Sep/2025:16:08:46 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:11:51 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:11:51 -0400] "GET /04f46448a6c651e37ff64ab22f807c40315f7c51f67545c60a7163a24c93d679.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:11:52 -0400] "DELETE /04f46448a6c651e37ff64ab22f807c40315f7c51f67545c60a7163a24c93d679 HTTP/1.1" 403 132 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:11:52 -0400] "GET /04f46448a6c651e37ff64ab22f807c40315f7c51f67545c60a7163a24c93d679.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:11:52 -0400] "HEAD /04f46448a6c651e37ff64ab22f807c40315f7c51f67545c60a7163a24c93d679 HTTP/1.1" 200 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:11:52 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:11:52 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:15:20 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:15:20 -0400] "GET /5419a62dcb85b8e8466f273362ae4d2da8c62eab77c12f3737d92f4cec583e17.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:15:20 -0400] "DELETE /5419a62dcb85b8e8466f273362ae4d2da8c62eab77c12f3737d92f4cec583e17 HTTP/1.1" 403 132 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:15:20 -0400] "GET /5419a62dcb85b8e8466f273362ae4d2da8c62eab77c12f3737d92f4cec583e17.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:15:20 -0400] "HEAD /5419a62dcb85b8e8466f273362ae4d2da8c62eab77c12f3737d92f4cec583e17 HTTP/1.1" 200 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:15:20 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:15:20 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:45:20 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:45:46 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:47:31 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:47:53 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 200 4807 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:49:14 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 200 4807 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:49:19 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:50:01 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:50:01 -0400] "GET /b88fbd5b2524f46e1395ec8a016f283572753a422db9c436c393e7b8e71a99cd.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:50:01 -0400] "DELETE /b88fbd5b2524f46e1395ec8a016f283572753a422db9c436c393e7b8e71a99cd HTTP/1.1" 403 132 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:50:01 -0400] "GET /b88fbd5b2524f46e1395ec8a016f283572753a422db9c436c393e7b8e71a99cd.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:50:01 -0400] "HEAD /b88fbd5b2524f46e1395ec8a016f283572753a422db9c436c393e7b8e71a99cd HTTP/1.1" 200 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:50:01 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:50:01 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:52:15 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:52:15 -0400] "GET /f06b28d395f4abe4a74447059526afd860e704fc570f6643753f973691d2d3ca.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:52:15 -0400] "DELETE /f06b28d395f4abe4a74447059526afd860e704fc570f6643753f973691d2d3ca HTTP/1.1" 403 132 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:52:15 -0400] "GET /f06b28d395f4abe4a74447059526afd860e704fc570f6643753f973691d2d3ca.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:52:15 -0400] "HEAD /f06b28d395f4abe4a74447059526afd860e704fc570f6643753f973691d2d3ca HTTP/1.1" 200 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:52:15 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:52:15 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:56:02 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:56:02 -0400] "GET /ea1b654a135f781e269e0c20caf800c3d997d2ac97a75317c46045436c4e035c.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:56:02 -0400] "DELETE /ea1b654a135f781e269e0c20caf800c3d997d2ac97a75317c46045436c4e035c HTTP/1.1" 200 136 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:56:02 -0400] "GET /ea1b654a135f781e269e0c20caf800c3d997d2ac97a75317c46045436c4e035c.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:56:02 -0400] "HEAD /ea1b654a135f781e269e0c20caf800c3d997d2ac97a75317c46045436c4e035c HTTP/1.1" 404 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:56:03 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:56:03 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:58:34 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:58:34 -0400] "GET /2449b6f0fa8e7047db871f6d89a8f5b9f16422a4adcc3f87e259bd83c22f1e45.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:58:35 -0400] "DELETE /2449b6f0fa8e7047db871f6d89a8f5b9f16422a4adcc3f87e259bd83c22f1e45 HTTP/1.1" 200 136 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:58:35 -0400] "GET /2449b6f0fa8e7047db871f6d89a8f5b9f16422a4adcc3f87e259bd83c22f1e45.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:58:35 -0400] "HEAD /2449b6f0fa8e7047db871f6d89a8f5b9f16422a4adcc3f87e259bd83c22f1e45 HTTP/1.1" 404 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:58:35 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:16:58:35 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:00:58 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:00:58 -0400] "GET /f13536a1fd51478e54144399bb58454b6122b6c72914536a5ae12f09284151a8.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:00:59 -0400] "DELETE /f13536a1fd51478e54144399bb58454b6122b6c72914536a5ae12f09284151a8 HTTP/1.1" 200 136 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:00:59 -0400] "GET /f13536a1fd51478e54144399bb58454b6122b6c72914536a5ae12f09284151a8.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:00:59 -0400] "HEAD /f13536a1fd51478e54144399bb58454b6122b6c72914536a5ae12f09284151a8 HTTP/1.1" 404 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:00:59 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:00:59 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:13:03 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:13:03 -0400] "GET /6449ec4b3e3b49c24748a4fc3d8c055b7d20747a00e80e4f25cb4b173321ed96.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:13:04 -0400] "DELETE /6449ec4b3e3b49c24748a4fc3d8c055b7d20747a00e80e4f25cb4b173321ed96 HTTP/1.1" 200 136 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:13:04 -0400] "GET /6449ec4b3e3b49c24748a4fc3d8c055b7d20747a00e80e4f25cb4b173321ed96.txt HTTP/1.1" 404 162 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:13:04 -0400] "HEAD /6449ec4b3e3b49c24748a4fc3d8c055b7d20747a00e80e4f25cb4b173321ed96 HTTP/1.1" 404 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:13:04 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:13:04 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:18:33 -0400] "PUT /e787257edcb1ebab94a1d8dd0984d041d3959cbfd132daa4ca5da412909a82a5 HTTP/1.1" 405 166 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:20:18 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:20:18 -0400] "GET /b0cc9a02c7562de50ef5aed7ed5b9f9674e442061348ea8ef469c996f8d3cf2f.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:20:18 -0400] "DELETE /b0cc9a02c7562de50ef5aed7ed5b9f9674e442061348ea8ef469c996f8d3cf2f HTTP/1.1" 200 136 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:20:18 -0400] "GET /b0cc9a02c7562de50ef5aed7ed5b9f9674e442061348ea8ef469c996f8d3cf2f.txt HTTP/1.1" 404 162 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:20:18 -0400] "HEAD /b0cc9a02c7562de50ef5aed7ed5b9f9674e442061348ea8ef469c996f8d3cf2f HTTP/1.1" 404 0 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:20:19 -0400] "PUT /upload HTTP/1.1" 200 261 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:20:19 -0400] "DELETE /69d582a822ece2d06346f19c1d3c95ca9986b380c855b9ae4e2bb3c7972b8939 HTTP/1.1" 401 188 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:21:41 -0400] "PUT /upload HTTP/1.1" 200 262 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:21:41 -0400] "GET /28408ccd849c970912bdd4fd10aba23697cfd91a43c1b801af254167a25ceb36.txt HTTP/1.1" 200 155 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:21:41 -0400] "DELETE /28408ccd849c970912bdd4fd10aba23697cfd91a43c1b801af254167a25ceb36 HTTP/1.1" 200 136 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:21:41 -0400] "GET /28408ccd849c970912bdd4fd10aba23697cfd91a43c1b801af254167a25ceb36.txt HTTP/1.1" 404 162 "-" "curl/8.15.0"
127.0.0.1 - - [02/Sep/2025:17:21:41 -0400] "HEAD /28408ccd849c970912bdd4fd10aba23697cfd91a43c1b801af254167a25ceb36 HTTP/1.1" 404 0 "-" "curl/8.15.0"

33449
logs/error.log Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
FastCGI starting at Tue Sep 2 03:20:09 PM EDT 2025 FastCGI starting at Tue Sep 2 05:18:26 PM EDT 2025

View File

@@ -1 +1 @@
189132 198244

View File

@@ -1 +0,0 @@
spawn-fcgi: child exited with: 127

File diff suppressed because it is too large Load Diff

211
tests/delete_test.sh Executable file
View File

@@ -0,0 +1,211 @@
#!/bin/bash
# delete_test.sh - Test script for DELETE /<sha256> endpoint (BUD-02)
# This script tests the blob deletion functionality
set -e # Exit on any error
# Configuration
SERVER_URL="http://localhost:9001"
TEST_FILE="test_delete_blob_$(date +%s).txt"
CLEANUP_FILES=()
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Cleanup function
cleanup() {
echo -e "${YELLOW}Cleaning up temporary files...${NC}"
for file in "${CLEANUP_FILES[@]}"; do
if [[ -f "$file" ]]; then
rm -f "$file"
echo "Removed: $file"
fi
done
}
# Set up cleanup on exit
trap cleanup EXIT
# 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"
}
# Create test file and upload it first
create_and_upload_blob() {
log_info "Creating test file for deletion: ${TEST_FILE}"
# Create test content
cat > "${TEST_FILE}" << EOF
Test blob for deletion
Timestamp: $(date -Iseconds)
Random: $(openssl rand -hex 16)
This file will be deleted as part of the DELETE test.
EOF
CLEANUP_FILES+=("${TEST_FILE}")
# Calculate hash
HASH=$(sha256sum "${TEST_FILE}" | cut -d' ' -f1)
log_success "File hash: ${HASH}"
# Generate upload event
EXPIRATION=$(date -d '+1 hour' +%s)
UPLOAD_EVENT=$(nak event -k 24242 -c "" \
-t "t=upload" \
-t "x=${HASH}" \
-t "expiration=${EXPIRATION}")
# DEBUG: Print the upload event details
echo "=== UPLOAD EVENT DEBUG ==="
echo "Upload event JSON:"
echo "$UPLOAD_EVENT" | jq '.'
UPLOAD_PUBKEY=$(echo "$UPLOAD_EVENT" | jq -r '.pubkey')
echo "Upload pubkey: $UPLOAD_PUBKEY"
echo "=========================="
# Upload the file
UPLOAD_AUTH=$(echo -n "$UPLOAD_EVENT" | base64 -w 0)
log_info "Uploading blob first..."
HTTP_STATUS=$(curl -s -w "%{http_code}" \
-X PUT \
-H "Authorization: Nostr ${UPLOAD_AUTH}" \
-H "Content-Type: text/plain" \
--data-binary "@${TEST_FILE}" \
"${SERVER_URL}/upload" \
-o /dev/null)
if [[ "$HTTP_STATUS" == "200" ]]; then
log_success "Upload successful (HTTP $HTTP_STATUS)"
else
log_error "Upload failed (HTTP $HTTP_STATUS)"
exit 1
fi
# Verify file exists
if curl -s -f "${SERVER_URL}/${HASH}.txt" > /dev/null; then
log_success "File confirmed accessible at /${HASH}.txt"
else
log_error "Uploaded file not accessible"
exit 1
fi
}
# Test DELETE with authorization
test_delete_with_auth() {
log_info "Testing DELETE /${HASH} with proper authorization..."
# Generate delete event
EXPIRATION=$(date -d '+1 hour' +%s)
DELETE_EVENT=$(nak event -k 24242 -c "" \
-t "t=delete" \
-t "x=${HASH}" \
-t "expiration=${EXPIRATION}")
# DEBUG: Print the delete event details
echo "=== DELETE EVENT DEBUG ==="
echo "Delete event JSON:"
echo "$DELETE_EVENT" | jq '.'
DELETE_PUBKEY=$(echo "$DELETE_EVENT" | jq -r '.pubkey')
echo "Delete pubkey: $DELETE_PUBKEY"
echo "Upload pubkey: $UPLOAD_PUBKEY"
if [[ "$UPLOAD_PUBKEY" == "$DELETE_PUBKEY" ]]; then
echo "✓ Pubkeys MATCH"
else
echo "✗ Pubkeys DIFFER - This is the problem!"
fi
echo "=========================="
DELETE_AUTH=$(echo -n "$DELETE_EVENT" | base64 -w 0)
# Perform DELETE request
RESPONSE_FILE=$(mktemp)
CLEANUP_FILES+=("${RESPONSE_FILE}")
HTTP_STATUS=$(curl -s -w "%{http_code}" \
-X DELETE \
-H "Authorization: Nostr ${DELETE_AUTH}" \
"${SERVER_URL}/${HASH}" \
-o "${RESPONSE_FILE}")
echo "HTTP Status: ${HTTP_STATUS}"
echo "Response body:"
cat "${RESPONSE_FILE}"
echo
case "${HTTP_STATUS}" in
200)
log_success "Delete successful!"
;;
401)
log_error "Unauthorized - check authorization"
;;
403)
log_error "Forbidden - ownership check failed"
;;
404)
log_error "Not found - blob doesn't exist"
;;
*)
log_error "Delete failed with HTTP status: ${HTTP_STATUS}"
;;
esac
}
# Test that file is actually deleted
test_file_deletion() {
log_info "Verifying file is actually deleted..."
# Try to access the file
if curl -s -f "${SERVER_URL}/${HASH}.txt" > /dev/null 2>&1; then
log_error "File still accessible after deletion!"
else
log_success "File correctly deleted from server"
fi
# Try HEAD request
HEAD_STATUS=$(curl -s -w "%{http_code}" -I "${SERVER_URL}/${HASH}" -o /dev/null)
if [[ "$HEAD_STATUS" == "404" ]]; then
log_success "HEAD request correctly returns 404"
else
log_error "HEAD request returned ${HEAD_STATUS}, expected 404"
fi
}
# Main execution
main() {
echo "=== Ginxsom DELETE Test (BUD-02) ==="
echo "Timestamp: $(date -Iseconds)"
echo
create_and_upload_blob
echo
test_delete_with_auth
echo
test_file_deletion
echo
log_info "DELETE test completed!"
echo "Summary:"
echo " Test hash: ${HASH}"
echo " Server: ${SERVER_URL}"
echo " DELETE endpoint tested: ${SERVER_URL}/<sha256>"
}
# Run main function
main "$@"