diff --git a/core/share.go b/core/share.go index 883160dfc..222be3526 100644 --- a/core/share.go +++ b/core/share.go @@ -36,6 +36,9 @@ func (s *shareService) Load(ctx context.Context, id string) (*model.Share, error return nil, err } share := entity.(*model.Share) + if !share.ExpiresAt.IsZero() && share.ExpiresAt.Before(time.Now()) { + return nil, model.ErrNotAvailable + } share.LastVisitedAt = time.Now() share.VisitCount++ diff --git a/server/public/handle_shares.go b/server/public/handle_shares.go index 0b74bd8bc..add6e29ad 100644 --- a/server/public/handle_shares.go +++ b/server/public/handle_shares.go @@ -27,6 +27,9 @@ func (p *Router) handleShares(w http.ResponseWriter, r *http.Request) { // If it is not, consider it a share ID s, err := p.share.Load(r.Context(), id) switch { + case errors.Is(err, model.ErrNotAvailable): + log.Error(r, "Share expired", "id", id, err) + http.Error(w, "Share not available anymore", http.StatusGone) case errors.Is(err, model.ErrNotFound): log.Error(r, "Share not found", "id", id, err) http.Error(w, "Share not found", http.StatusNotFound)