Skip to content

Booru 4.1

Choose a tag to compare

@weekanya weekanya released this 06 Sep 08:28
· 224 commits to main since this release

Booru 4.1

Security and Credential Management

  • Durable Credential Migration with Data-Loss Protection:

    • Legacy Rule34 and Gelbooru User ID / API Key credentials are migrated to Android Keystore-backed EncryptedSharedPreferences.
    • Migration proceeds only when secure storage is successfully initialized.
    • Credential writes use synchronous commit() with read-back verification against the source value before legacy DataStore keys are removed.
    • Plaintext credential fallback storage is prohibited.
    • Migration remains safe to retry if secure storage or a credential write fails.
  • Custom Booru Credential Isolation:

    • Custom source metadata (id, name, baseUrl, engine) remains in DataStore, while API keys and user IDs are stored exclusively in SecureCredentialsStorage.
    • Deleting a custom source removes its secure credentials and metadata, preventing orphaned credentials.
  • HTTPS Enforcement for Custom Sources:

    • Base URLs for custom Booru endpoints require HTTPS.
    • Plain HTTP connections are rejected during source creation, editing, and network execution.
  • Sensitive Data Redaction:

    • Request logging redacts authentication tokens, passwords, API keys, user IDs, and other sensitive authentication parameters.

Application Updater Hardening

  • Host and Transport Verification:

    • Update checks and APK downloads require HTTPS and are restricted to trusted GitHub asset hosts.
    • Insecure and untrusted cross-domain redirects are rejected.
  • Pre-Install Package and Signature Verification:

    • Downloaded update APKs are verified before installation to ensure that the package name and signing certificate match the currently installed application.
    • Incomplete or invalid APK files are removed after failed downloads or verification.

Functional Fixes and Improvements

  • Newest Feed Sorting:

    • Fixed an issue where the result of sortedWith() was not applied to multi-source feeds.
    • Posts are ordered by valid creation timestamps in descending order, with score used as a deterministic tie-breaker.
    • Posts without valid timestamps are placed after timestamped posts and ordered by score.
  • Exact Blacklist Matching:

    • Blacklist filtering now uses exact token matching to prevent false-positive substring exclusions.
    • For example, blocking cat no longer blocks catgirl.
    • Namespaced tags such as character:xxx and artist:xxx are supported with case-insensitive matching.
  • Cache and Media Safety:

    • Offline favorites stored in the Room database and app-private filesDir/favorites_media storage remain isolated from temporary browsing caches.
    • Clearing the application cache purges Coil (200 MB LRU) and ExoPlayer (100 MB LRU) caches without removing saved favorites.
    • Direct downloads to public media directories remove incomplete files after failed downloads and trigger MediaScannerConnection after successful completion.