Tags

Tags give the ability to mark specific points in history as being important
  • 1.0.10

    a28dfb7a · Release 1.0.10 ·
  • 1.0.9

    ### Added
    - Added `AGENTS.md` with repository-specific engineering, testing, and release guidance for future contributors and coding agents.
    - Added per-repository `Public access` support so published repositories can be exposed without authentication while private repositories remain token-protected.
    
    ### Changed
    - Updated Composer metadata/archive access logic to allow anonymous access only to packages coming from repositories marked as public, while preserving full token-based access for private packages.
    - Updated `/packages` HTML index behavior so anonymous browsing is blocked whenever any published private repository exists, preventing mixed-visibility package name leakage.
    
    ### Testing
    - Updated controller unit tests for anonymous/public access behavior and mixed-visibility guarding.
  • 1.0.7

    81e68fc8 · merge: release 1.0.7 ·
    Release 1.0.7
    
    Highlights:
    - Raise Drupal core compatibility floor to 11.3+ (and 12.x).
    - Add HMAC auth method submodule (`satis_hub_hmac_auth`).
    - Add publish/unpublish operations for Satis Repository entities.
    - Rework `/admin/satis-hub/satis-build-api` with async build progress and improved log UX.
    - Harden base64 token validation and `/hooks/rebuild-satis` webhook security (POST-only, provider verification, event filtering).
    - Refactor settings/install flows into dedicated services and update related tests.
    
    See CHANGELOG.md for full details.
  • 1.0.6

    ed914bbe · release: 1.0.6 ·
    ## Satis Hub 1.0.6 (2026-02-22)
    
    This release focused on safer defaults, improved rebuild reliability, and cleaner internal architecture.
    
    ### Added
    - Added a new action block in `SettingsForms` with a **Use packages page as homepage** button.
    - Added a dedicated submit handler to set `system.site:page.front` to `/packages` on demand.
    
    ### Changed
    - Reworked the homepage setup flow: the front page is no longer forced automatically during module install.
    - Hardened file path resolution for package/json download endpoints by constraining resolved paths to the configured output directory.
    - Fixed rebuild configuration handling in `satisRebuild()` so caller-provided config overrides are preserved.
    - Reworked JSON parsing to `JSON_THROW_ON_ERROR` with exception-based handling in controller, helper, and auth-method code paths.
    - Removed unused constructor dependencies from `SatisHelper` while keeping WeakMap-based settings cache.
    - Updated `satis_hub.helper` service wiring and unit tests to match the simplified `SatisHelper` constructor signature.
    - Unified repeated authentication checks in `SatisController` by extracting shared `applies/authenticate` handling into a single private helper.
    
    ### Removed
    - Removed `satis_hub_install()` logic that automatically changed the front page to `/packages`.
    
    ### Security
    - Added path traversal protection for file access via download endpoints.
  • 1.0.5

    e907287c · 1.0.5 ·
    Refactored the overall design and improved the code structure.
    Implemented a Plugin Manager.
    Extracted JWT authentication into a dedicated module.
  • 1.0.4

    6def529e · Prepared v1.0.4 ·
    ### Added
    - BuildStatus enum with helper methods (`isSuccessful()`, `isError()`, `getLabel()`)
    - SatisRebuildResult value object with rich API for handling rebuild results
    - WeakMap caching for `getBuildSettings()` method (reduces DB queries by ~66%)
    - LoggerChannelTrait for lazy-loaded logging
    - 16+ typed class constants (PHP 8.3 feature)
    - Private helper methods for better code organization:
      - `loadBuildSettings()` - Configuration loading
      - `collectMetadataFiles()` - JSON file collection
      - `processMetadataFile()` - Single file processing
      - `buildSatisPayload()` - Payload creation
      - `loadRepositories()` - Repository loading
      - `prepareDirectory()` - File system wrapper
    - Detailed PHPDoc array shape type hints for better IDE support
    - null check in `validateBuildToken()` method
    
    ### Changed
    - **BREAKING**: `satisRebuild()` now returns `SatisRebuildResult|Response` instead of `array|Response`
    - **BREAKING**: Class is no longer fully `readonly` (but all instance properties are `readonly`)
    - **BREAKING**: LoggerInterface removed from constructor (replaced with LoggerChannelTrait)
    - Replaced all error suppression operators (@) with proper try-catch blocks
    - Used `glob()` instead of `scandir()` for better performance
    - Used `hash_equals()` for token validation (timing attack protection)
    - Match expressions instead of ternary operators for status determination
    - Strict type comparisons (`!==` instead of `!=`)
    - CamelCase naming convention for variables
    - Improved error handling with `\Throwable` instead of `\Exception`
    - HTTP status codes now use Response constants
    - All magic values extracted to typed constants
    
    ### Fixed
    - Bug in `syncTwigTemplatesToPrivate()` where file path was used instead of parent directory
    - Proper directory preparation in file copying operations
    - Memory leaks through automatic WeakMap garbage collection
    
    ### Removed
    - LoggerInterface dependency from constructor
    - All error suppression operators (@)
    - Magic strings and hardcoded values
    - Duplicated code in metadata file processing
    
    ### Performance
    - **66% reduction** in database queries for build settings (3+ → 1)
    - **20-30% faster** overall rebuild execution
    - **50% faster** methods using settings (through caching)
    - Automatic memory management through WeakMap
    
    ### Security
    - Added timing attack protection with `hash_equals()` for token validation
    - Improved error handling prevents information leakage
    
    ### Code Quality
    - **66% reduction** in cyclomatic complexity (~15 → ~5 per method)
    - **40-70% reduction** in lines per method (50-100 → <30)
    - **100% type coverage** (up from ~60%)
    - **100% elimination** of magic values (20+ → 0)
    - PSR-12 compliant code formatting
  • 1.0.3

    55e60811 · Updated composer.json ·
    Improved composer.json
  • 1.0.1

    Improved composer.json. Updated dependencies for composer.json
  • 1.0.0

    487e48d3 · 1.0.x ·
    Added base module functionality:
    - 📦 **Private Composer Repository Management**
      - Add and manage repositories
      - Support for public and private repositories
      - Flexible Satis configuration management
    
    - 🔐 **Client Access & Authentication**
      - Generate **JWT tokens**
      - Generate **Base64 (HTTP Basic Auth) tokens**
      - Assign tokens to specific clients or repositories
      - Revoke or rotate access tokens at any time
    
    - 🔑 **auth.json Management**
      - Centralized management of Composer `auth.json`
      - Support for HTTP Basic Auth, GitHub tokens, GitLab tokens, and other Composer authentication methods
      - Secure storage and controlled distribution of credentials to clients
    
    - 🔄 **Repository Rebuilds**
      - Manual repository rebuild via the Drupal UI
      - Automatic rebuilds via **webhooks**
      - Designed for CI/CD workflows
    
    - ⚙️ **Satis Integration**
      - Automatic generation of `satis.json`
      - Trigger Satis builds directly from Drupal
      - Monitor and control build results