Commit graph

11 commits

Author SHA1 Message Date
b13c46806c Implement comprehensive config validation with graceful error handling
- Replace panic-prone config loading with detailed error messages
- Validate config file existence, TOML syntax, required fields
- Check filesystem access for root directory and certificate files
- Provide actionable error messages explaining how to fix each issue
- Exit gracefully with clear guidance instead of cryptic panics
- Maintain backward compatibility for valid configurations
2026-01-16 22:21:50 +00:00
b9380483d2 Remove complex SIGHUP reload feature, use simple restart instead
- Remove tokio signal handling and mutex-based TLS acceptor reloading
- Simplify main loop back to basic connection acceptance
- Update systemd service to remove ExecReload
- Change certbot hook to use systemctl restart instead of reload
- Maintain <1s restart time for certificate updates
- Eliminate user confusion about partial config reloading
2026-01-16 22:09:51 +00:00
caf9d0984f Implement SIGHUP certificate reloading for Let's Encrypt
- Add tokio signal handling for SIGHUP
- Implement thread-safe TLS acceptor reloading with Mutex
- Modify main loop to handle signals alongside connections
- Update systemd service (already had ExecReload)
- Add certbot hook script documentation to INSTALL.md
- Enable zero-downtime certificate renewal support
2026-01-16 13:05:20 +00:00
ea8083fe1f Implement dual host configuration: bind_host and hostname
- Replace 'host' config with separate 'bind_host' and 'hostname'
- bind_host: IP/interface for server binding (default 0.0.0.0)
- hostname: Domain for URI validation (required)
- Update all parsing and validation code
- Create dist/ directory with systemd service, config, and install guide
- Add comprehensive INSTALL.md with setup instructions
2026-01-16 12:46:27 +00:00
f05b9373f1 Implement BACKLOG.md items: config-only, request limits, URL validation
- Remove CLI options except --config and --test-processing-delay
- Enforce 1026 byte request limit per Gemini spec (1024 + 2 for CRLF)
- Add comprehensive URL parsing with host and port validation
- Reject malformed URIs and wrong ports with 59 Bad Request
- Update tests for new URL parsing signature
- Fix clippy warning in port parsing
2026-01-16 11:48:06 +00:00
3865211554 Implement configurable logging with tracing
- Replace eprintln! with tracing macros for configurable log levels
- Set up tracing_subscriber with level filtering from config
- Log format: YYYY-MM-DDTHH:MM:SSZ LEVEL IP "request" STATUS "message"
- Success logs: INFO level for 20 responses
- Error logs: WARN for 41/51, ERROR for 59
- Rate limiting and file serving now properly logged
- Remove unused RequestLogger::log_success method
2026-01-16 11:19:20 +00:00
33ae576b25 Implement rate limiting with 41 responses and comprehensive logging
- Add concurrent connection handling with tokio::spawn for proper rate limiting
- Send '41 Server unavailable' responses instead of dropping connections
- Move request logger initialization earlier to enable rate limiting logs
- Add logging for rate limited requests: 'Concurrent request limit exceeded'
- Fix clippy warnings: needless borrows and match simplification
- Update test script analysis to expect 41 responses for rate limiting
2026-01-16 06:00:18 +00:00
1500057a92 Add max concurrent requests to startup info
Display the configured max_concurrent_requests value in the server
startup information, consistent with other configuration values like
log level, host, port, etc.
2026-01-16 02:42:18 +00:00
0468781a69 Add configurable global concurrent request limiting
- Add max_concurrent_requests config option (default: 1000)
- Implement global AtomicUsize counter for concurrent request tracking
- Return status 41 'Server unavailable' when limit exceeded
- Proper counter management with decrements on all exit paths
- Add comprehensive config validation (1-1,000,000 range)
- Update documentation with rate limiting details
- Add unit tests for config parsing
- Thread-safe implementation using Ordering::Relaxed

This provides effective DDoS protection by limiting concurrent
connections to prevent server overload while maintaining
configurability for different deployment scenarios.
2026-01-16 02:26:59 +00:00
9d29321806 Fix Gemini protocol status codes and error handling
- Path security violations now return 51 (Not Found) instead of 59 (Bad Request)
- Timeouts return 41 (Server Unavailable) per Gemini spec
- Add comprehensive request validation: empty requests, oversized requests (>1024 bytes), malformed URLs
- Fix CLI argument conflict (config -c vs cert -c)
- Update documentation with status codes, error handling guidelines, and lint checking
- Add environment setup instructions for clippy and cargo PATH
2026-01-16 00:17:34 +00:00
1ed443ff2a Initial codebase structure
- Complete Gemini server implementation with logging
- Add comprehensive documentation (README.md, AGENTS.md)
- Implement certificate management guidelines
- Add .gitignore for security and build artifacts
- All unit tests passing (14/14)
- Ready for production deployment
2026-01-15 08:22:06 +09:00