PHPackages                             ilbronza/temporarylinks - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. ilbronza/temporarylinks

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ilbronza/temporarylinks
=======================

controlled temporary links for external operators

v2.5.1(3w ago)04MITPHP

Since Aug 7Pushed 2w agoCompare

[ Source](https://github.com/ilBronza/TemporaryLinks)[ Packagist](https://packagist.org/packages/ilbronza/temporarylinks)[ Docs](https://github.com/ilbronza/temporarylinks)[ RSS](/packages/ilbronza-temporarylinks/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependenciesVersions (2)Used By (0)

ilbronza/temporarylinks
=======================

[](#ilbronzatemporarylinks)

Link temporanei controllati per operatori esterni: URL pubblici `https://dominio.it/t/{token}` con scadenza, revoca manuale, limite visite, password/PIN opzionale, log accessi e protezione della pagina di destinazione.

Documentazione completa del flusso: [FUNZIONAMENTO.md](FUNZIONAMENTO.md).

Installazione nel progetto host
-------------------------------

[](#installazione-nel-progetto-host)

Aggiungere il path repository (se non già coperto dal wildcard) e la dependency:

```
"repositories": [
    { "type": "path", "url": "../../../pacchetti/TemporaryLinks" }
],
"require": {
    "ilbronza/temporarylinks": "*"
}
```

Poi:

```
composer update ilbronza/temporarylinks
php artisan migrate
```

Config pubblicabile con `php artisan vendor:publish --tag=temporarylinks.config`.

Creazione programmatica (modo preferito)
----------------------------------------

[](#creazione-programmatica-modo-preferito)

```
use IlBronza\TemporaryLinks\Facades\TemporaryLinks;

$result = TemporaryLinks::create()
    ->name('Compilazione rapportino')
    ->route('operators.timesheet.edit', ['operator' => $operator->getKey()])
    ->for($operator)                 // subject morph, opzionale
    ->expiresInMinutes(1440)         // default da config
    ->maxVisits(3)                   // opzionale
    ->password('1234')               // opzionale
    ->consumeOnFirstSuccess()        // opzionale, link monouso
    ->save();

$result->getPublicUrl(); // UNICO momento in cui l'URL col token in chiaro è disponibile
$result->link;           // il model TemporaryLink
```

Il token non viene mai salvato in chiaro: in tabella c'è solo `sha256`. Se l'URL va perso, usare l'azione admin "Genera nuovo URL" o `$link->regenerateToken()`.

Proteggere la destinazione (obbligatorio)
-----------------------------------------

[](#proteggere-la-destinazione-obbligatorio)

Il redirect da solo non protegge la pagina di destinazione. Applicare il middleware alle route raggiunte dai link:

```
Route::get('timesheet/{operator}/edit', ...)
    ->middleware('temporarylink.verified')
    ->name('operators.timesheet.edit');
```

Il middleware verifica che la sessione arrivi da un link temporaneo valido (flag messo al redirect), ricontrolla revoca/scadenza e rende disponibile il link corrente in `$request->attributes->get('temporaryLink')` (da cui leggere `subject`).

Flusso pubblico
---------------

[](#flusso-pubblico)

`GET /t/{token}` → verifica token (hash) → gate (revocato / consumato / non iniziato / scaduto / limite visite / destinazione valida) → eventuale challenge password → eventuale pagina interstiziale "Prosegui" (solo per link monouso o con `max_visits`, per evitare che gli email scanner brucino il link) → increment visite atomico → log accesso → grant sessione → redirect.

Throttle attivo sia sul GET pubblico sia sul POST password (configurabile).

Admin CRUD
----------

[](#admin-crud)

Route sotto `temporary-links-management` con middleware da `config('temporarylinks.middleware.admin')`. Azioni extra oltre al resource: `revoke`, `reactivate`, `extend`, `regenerateToken`, `duplicate`, `preview` (apre la destinazione senza contare la visita). Dopo creazione/rigenerazione l'URL in chiaro viene flashato in sessione (`temporarylinks.plainUrl` e `message`) e mostrato una sola volta.

Comandi
-------

[](#comandi)

- `php artisan temporarylinks:cleanup` — elimina access log più vecchi di `cleanup.access_log_retention_days`
- `php artisan temporarylinks:report` — conteggi per stato

Eventi
------

[](#eventi)

`TemporaryLinkCreated`, `TemporaryLinkOpened`, `TemporaryLinkBlocked`, `TemporaryLinkRevoked`, `TemporaryLinkConsumed`.

Override
--------

[](#override)

Come gli altri package IlBronza, tutto passa da `config/temporarylinks.php`: classi model, tabelle, controllers (`crud`, `actions`, `redirect`), parametersFiles, middleware, throttle, `allow_absolute_urls` + `allowed_hosts` per destinazioni URL assolute (default disabilitate, anti open-redirect).

Stati (solo calcolati)
----------------------

[](#stati-solo-calcolati)

`draft`, `scheduled`, `active`, `expired`, `revoked`, `consumed`, `limit_reached` — accessor `$link->status` / `$link->translated_status`, scopes `active()`, `scheduled()`, `expired()`, `revoked()`, `consumed()`, `neverOpened()`.

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance96

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity33

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

21d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/33c65523e8a1cdfe8ed5f5fb8d90101b28eceb8c2ef7acb50a24cf6c42b8e639?d=identicon)[ilBronza](/maintainers/ilBronza)

---

Top Contributors

[![bronza](https://avatars.githubusercontent.com/u/3426331?v=4)](https://github.com/bronza "bronza (3 commits)")

---

Tags

laravelTemporaryLinks

### Embed Badge

![Health badge](/badges/ilbronza-temporarylinks/health.svg)

```
[![Health](https://phpackages.com/badges/ilbronza-temporarylinks/health.svg)](https://phpackages.com/packages/ilbronza-temporarylinks)
```

###  Alternatives

[stephenjude/filament-blog

Filament Blog Builder

20919.9k](/packages/stephenjude-filament-blog)[datomatic/nova-detached-actions

A Laravel Nova tool to allow for placing actions in the Nova toolbar detached from the checkbox selection mechanism.

12287.4k](/packages/datomatic-nova-detached-actions)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
