grazulex/laravel-sharelink
Secure, temporary share links for Laravel. Share files, routes, and model previews with expirations, usage limits, password protection, rate limiting, IP/CIDR filtering, signed URLs, burn-after-reading, and full access auditing.
Generate, manage, and secure temporary share links for files, routes, and models
A powerful Laravel package for creating secure, time-limited sharing capabilities with comprehensive audit trails
Laravel ShareLink is a comprehensive package for generating secure, time-limited sharing capabilities in your Laravel applications. Perfect for sharing files, creating temporary access to routes, or providing time-limited previews of model data with complete audit trails and advanced security features.
Install the package via Composer:
composer require grazulex/laravel-sharelink
Publish and run the migrations:
php artisan vendor:publish --tag="sharelink-migrations"
php artisan migrate
Optionally, publish the configuration file:
php artisan vendor:publish --tag="sharelink-config"
๐ก Auto-Discovery: The service provider will be automatically registered thanks to Laravel's package auto-discovery.
use Grazulex\ShareLink\Facades\ShareLink;
// Share a file with expiration
$link = ShareLink::create('/path/to/document.pdf')
->expiresIn(60) // 60 minutes
->maxClicks(5)
->withPassword('secret123')
->generate();
echo $link->url; // https://yourapp.com/share/abc123xyz
// Share a local file
$link = ShareLink::create('/storage/documents/report.pdf')
->expiresIn(1440) // 24 hours
->maxClicks(10)
->generate();
// Share via Laravel Storage
$link = ShareLink::create('s3://bucket/private/document.pdf')
->expiresIn(60)
->withPassword('secure')
->generate();
// Share a named route with parameters
$link = ShareLink::create([
'type' => 'route',
'route' => 'user.profile',
'parameters' => ['user' => 123]
])
->expiresIn(120)
->generate();
// Share a model preview (JSON representation)
$user = User::find(1);
$link = ShareLink::create([
'type' => 'model',
'class' => User::class,
'id' => $user->id
])
->expiresIn(30)
->generate();
// Burn-after-reading link with IP restrictions
$link = ShareLink::create('/secure/document.pdf')
->expiresIn(60)
->burnAfterReading() // Self-destructs after first access
->metadata([
'allowed_ips' => ['192.168.1.0/24', '10.0.0.1'],
'denied_ips' => ['192.168.1.100']
])
->generate();
// Signed URL for extra security
$signedUrl = ShareLink::signedUrl($link, now()->addHour());
For comprehensive documentation, examples, and advanced usage guides, visit our Wiki:
The wiki includes:
Laravel ShareLink includes powerful CLI commands for managing your share links:
# Create a new share link
php artisan sharelink:create /path/to/file --expires=60 --max-clicks=5
# List all share links
php artisan sharelink:list --active --expired
# Revoke a specific link
php artisan sharelink:revoke abc123xyz
# Clean up expired links
php artisan sharelink:prune --days=7
The package comes with sensible defaults, but you can customize everything:
// config/sharelink.php
return [
'route' => [
'prefix' => 'share',
'middleware' => ['web'],
],
'security' => [
'signed_routes' => [
'enabled' => true,
'required' => false,
],
'rate_limiting' => [
'enabled' => true,
'max_attempts' => 10,
],
'password_throttling' => [
'enabled' => true,
'max_attempts' => 5,
],
],
'delivery' => [
'x_sendfile' => false,
'x_accel_redirect' => false,
],
];
composer test
Please see CONTRIBUTING.md for details.
If you discover any security-related issues, please email jms@grazulex.be instead of using the issue tracker.
Please see the Wiki Changelog for more information on what has changed recently.
The MIT License (MIT). Please see License File for more information.
Laravel ShareLink is maintained by Jean-Marc Strauven, creator of 17+ Laravel packages.
๐ Secure File Sharing & Access Control
๐ฆ Custom Laravel Package Development
๐๏ธ Complete Laravel Applications
๐ก Building a Laravel SaaS or need custom features? I'd love to help bring your project to life.
If Laravel ShareLink is useful for your project:
How can I help you explore Laravel packages today?