simplesamlphp/composer-module-installer
Composer plugin that installs SimpleSAMLphp modules via Composer. Define your module as type "simplesamlphp-module" (or "simplesamlphp-assets-*") and it installs into SimpleSAMLphp’s modules/ (or public/) directory. Works with Packagist or private repos.
Install the Composer Plugin Globally (or project-specific):
composer global require simplesamlphp/composer-module-installer
OR add to your project’s composer.json:
"extra": {
"installer-paths": {
"vendor/simplesamlphp/composer-module-installer": ["type:simplesamlphp-module"]
}
}
Ensure SimpleSAMLphp is Installed:
composer require simplesaml/simplesamlphp
Install a Module:
composer require vendor/simplesamlphp-module-mymodule
Example: For the auth module:
composer require simplesamlphp/simplesamlphp-module-auth
Verify Installation:
vendor/simplesamlphp/modules/mymodule/.config.php includes the module in module.enable.Scenario: You need to integrate a custom or third-party SimpleSAMLphp module (e.g., simplesamlphp-module-google-auth) into your Laravel app.
Add the Module via Composer:
composer require simplesamlphp/simplesamlphp-module-google-auth
Enable the Module in SimpleSAMLphp:
Edit config/config.php:
'module.enable' => [
'googleauth' => true,
// ... other modules
],
Configure the Module:
Update metadata/saml20-idp-hosted.php or module-specific configs in modules/googleauth/config.php.
Trigger Module Logic from Laravel: Use Laravel’s HTTP client or SimpleSAMLphp’s API:
$response = Http::get('https://simplesamlphp.example.com/module.php/googleauth/auth.php');
Development:
dev-master for local testing:
composer require vendor/simplesamlphp-module-mymodule:dev-master
ln -s vendor/simplesamlphp/modules/mymodule modules/
Production:
composer.json:
"require": {
"simplesamlphp/simplesamlphp-module-auth": "1.0.0"
}
composer install --optimize-autoloader for performance.CI/CD:
# GitHub Actions example
- run: composer require simplesamlphp/simplesamlphp-module-mymodule
- run: php artisan simplesaml:modules:link # Custom task to symlink modules
Create a Laravel Service Provider to expose SimpleSAMLphp modules:
// app/Providers/SimpleSAMLServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use SimpleSAML\Module;
class SimpleSAMLServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('simplesaml.module', function () {
return Module::load('mymodule');
});
}
}
For modules with frontend assets (e.g., CSS/JS):
composer require simplesamlphp/simplesamlphp-assets-mymodule
public/:
cp -r vendor/simplesamlphp/assets/mymodule/* public/assets/mymodule/
config/app.php:
'assets' => [
'simplesaml' => 'assets/mymodule',
],
To create a Composer-installable module:
mymodule/
├── composer.json
├── Module.php
└── config.php
composer.json:
{
"name": "vendor/simplesamlphp-module-mymodule",
"type": "simplesamlphp-module",
"require": {
"simplesamlphp/composer-module-installer": "^1.4"
},
"extra": {
"ssp-mixedcase-module-name": "MyModule"
}
}
For internal modules, add a repositories entry in Laravel’s composer.json:
"repositories": [
{
"type": "path",
"url": "../path/to/mymodule"
}
],
Then install:
composer require vendor/simplesamlphp-module-mymodule:dev-master
Module Naming Conflicts:
MyModule).ssp-mixedcase-module-name extra in composer.json for backward compatibility.Autoloading Issues:
SimpleSAML\Module\* namespaces, which may conflict with Laravel’s SimpleSAML facade.use SimpleSAML\Module\MyModule\Module as MyModule;
Plugin Not Auto-Installed:
composer.json:
"require": {
"simplesamlphp/composer-module-installer": "^1.4"
}
Asset Module Paths:
vendor/simplesamlphp/assets/, but Laravel expects public/."scripts": {
"post-install-cmd": [
"php artisan simplesaml:assets:link"
]
}
Composer 2.x Plugin System:
composer self-update
Module Not Installing:
composer require vendor/module --verbose
composer.json has "type": "simplesamlphp-module".Module Not Loading:
vendor/simplesamlphp/modules/mymodule/
config.php for module.enable.Namespace Collisions:
composer dump-autoload to regenerate the autoloader.composer why-not vendor/simplesamlphp/module to diagnose conflicts.Laravel Artisan Commands: Create custom commands to manage modules:
// app/Console/Commands/LinkSimpleSAMLModules.php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Symfony\Component\Process\Process;
class LinkSimpleSAMLModules extends Command
{
protected $signature = 'simplesaml:modules:link';
protected $description = 'Symlink SimpleSAMLphp modules';
public function handle()
{
$process = new Process(['ln', '-sfn', 'vendor/simplesamlphp/modules/*', 'modules/']);
$process->run();
$this->info($process->getOutput());
}
}
Environment-Specific Modules: Use Composer’s environment variables to install different modules per environment:
composer require --dev vendor/simplesamlphp-module-debug
Update Strategy:
composer.json:
"require": {
"simplesamlphp/simplesamlphp-module-auth": "1.0.0"
}
composer update vendor/module cautiously (test in staging first).Fallback to Manual Installation: If Composer fails, manually install modules:
git clone https://github.com/simplesamlphp/mymodule.git modules/mymodule
Monitor for Updates:
How can I help you explore Laravel packages today?