mirror of
				https://github.com/filebrowser/filebrowser.git
				synced 2025-10-31 17:23:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package share
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/filebrowser/filebrowser/v2/errors"
 | |
| )
 | |
| 
 | |
| // StorageBackend is the interface to implement for a share storage.
 | |
| type StorageBackend interface {
 | |
| 	All() ([]*Link, error)
 | |
| 	FindByUserID(id uint) ([]*Link, error)
 | |
| 	GetByHash(hash string) (*Link, error)
 | |
| 	GetPermanent(path string, id uint) (*Link, error)
 | |
| 	Gets(path string, id uint) ([]*Link, error)
 | |
| 	Save(s *Link) error
 | |
| 	Delete(hash string) error
 | |
| }
 | |
| 
 | |
| // Storage is a storage.
 | |
| type Storage struct {
 | |
| 	back StorageBackend
 | |
| }
 | |
| 
 | |
| // NewStorage creates a share links storage from a backend.
 | |
| func NewStorage(back StorageBackend) *Storage {
 | |
| 	return &Storage{back: back}
 | |
| }
 | |
| 
 | |
| // All wraps a StorageBackend.All.
 | |
| func (s *Storage) All() ([]*Link, error) {
 | |
| 	links, err := s.back.All()
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	for i, link := range links {
 | |
| 		if link.Expire != 0 && link.Expire <= time.Now().Unix() {
 | |
| 			if err := s.Delete(link.Hash); err != nil {
 | |
| 				return nil, err
 | |
| 			}
 | |
| 			links = append(links[:i], links[i+1:]...)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return links, nil
 | |
| }
 | |
| 
 | |
| // FindByUserID wraps a StorageBackend.FindByUserID.
 | |
| func (s *Storage) FindByUserID(id uint) ([]*Link, error) {
 | |
| 	links, err := s.back.FindByUserID(id)
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	for i, link := range links {
 | |
| 		if link.Expire != 0 && link.Expire <= time.Now().Unix() {
 | |
| 			if err := s.Delete(link.Hash); err != nil {
 | |
| 				return nil, err
 | |
| 			}
 | |
| 			links = append(links[:i], links[i+1:]...)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return links, nil
 | |
| }
 | |
| 
 | |
| // GetByHash wraps a StorageBackend.GetByHash.
 | |
| func (s *Storage) GetByHash(hash string) (*Link, error) {
 | |
| 	link, err := s.back.GetByHash(hash)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	if link.Expire != 0 && link.Expire <= time.Now().Unix() {
 | |
| 		if err := s.Delete(link.Hash); err != nil {
 | |
| 			return nil, err
 | |
| 		}
 | |
| 		return nil, errors.ErrNotExist
 | |
| 	}
 | |
| 
 | |
| 	return link, nil
 | |
| }
 | |
| 
 | |
| // GetPermanent wraps a StorageBackend.GetPermanent
 | |
| func (s *Storage) GetPermanent(path string, id uint) (*Link, error) {
 | |
| 	return s.back.GetPermanent(path, id)
 | |
| }
 | |
| 
 | |
| // Gets wraps a StorageBackend.Gets
 | |
| func (s *Storage) Gets(path string, id uint) ([]*Link, error) {
 | |
| 	links, err := s.back.Gets(path, id)
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	for i, link := range links {
 | |
| 		if link.Expire != 0 && link.Expire <= time.Now().Unix() {
 | |
| 			if err := s.Delete(link.Hash); err != nil {
 | |
| 				return nil, err
 | |
| 			}
 | |
| 			links = append(links[:i], links[i+1:]...)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return links, nil
 | |
| }
 | |
| 
 | |
| // Save wraps a StorageBackend.Save
 | |
| func (s *Storage) Save(l *Link) error {
 | |
| 	return s.back.Save(l)
 | |
| }
 | |
| 
 | |
| // Delete wraps a StorageBackend.Delete
 | |
| func (s *Storage) Delete(hash string) error {
 | |
| 	return s.back.Delete(hash)
 | |
| }
 | 
