Updated delete
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,5 @@
|
|||||||
blossom/
|
blossom/
|
||||||
logs/
|
logs/
|
||||||
nostr_core_lib/
|
nostr_core_lib/
|
||||||
|
blobs/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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 ===
|
||||||
|
|
||||||
|
|||||||
@@ -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
2674
Trash/main copy.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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.
|
|
||||||
@@ -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.
|
|
||||||
@@ -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.
BIN
build/main.o
BIN
build/main.o
Binary file not shown.
BIN
db/ginxsom.db
BIN
db/ginxsom.db
Binary file not shown.
@@ -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 ===
|
|
||||||
|
|
||||||
@@ -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 ===
|
|
||||||
|
|
||||||
131
logs/access.log
131
logs/access.log
@@ -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
33449
logs/error.log
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
189132
|
198244
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
spawn-fcgi: child exited with: 127
|
|
||||||
422
src/main.c
422
src/main.c
File diff suppressed because it is too large
Load Diff
211
tests/delete_test.sh
Executable file
211
tests/delete_test.sh
Executable 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 "$@"
|
||||||
Reference in New Issue
Block a user