requested changes

This commit is contained in:
Weidi Deng 2020-12-13 09:22:51 +08:00
parent f2c0fd08e3
commit 29bf5a3b14
4 changed files with 45 additions and 17 deletions

View File

@ -51,7 +51,7 @@ func NewHandler(imgSvc ImgService, fileCache FileCache, store *storage.Storage,
api.PathPrefix("/resources").Handler(monkey(resourcePostPutHandler, "/api/resources")).Methods("PUT")
api.PathPrefix("/resources").Handler(monkey(resourcePatchHandler, "/api/resources")).Methods("PATCH")
api.Path("/shares").Handler(monkey(shareListHandler, "")).Methods("GET")
api.Path("/shares").Handler(monkey(shareListHandler, "/api/shares")).Methods("GET")
api.PathPrefix("/share").Handler(monkey(shareGetsHandler, "/api/share")).Methods("GET")
api.PathPrefix("/share").Handler(monkey(sharePostHandler, "/api/share")).Methods("POST")
api.PathPrefix("/share").Handler(monkey(shareDeleteHandler, "/api/share")).Methods("DELETE")

View File

@ -25,11 +25,15 @@ func withPermShare(fn handleFunc) handleFunc {
}
var shareListHandler = withPermShare(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
id := d.user.ID
var (
s []*share.Link
err error
)
if d.user.Perm.Admin {
id = 0
s, err = d.store.Share.All()
} else {
s, err = d.store.Share.FindByUserID(d.user.ID)
}
s, err := d.store.Share.List(id)
if err == errors.ErrNotExist {
return renderJSON(w, r, []*share.Link{})
}

View File

@ -8,7 +8,8 @@ import (
// StorageBackend is the interface to implement for a share storage.
type StorageBackend interface {
List(id uint) ([]*Link, error)
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)
@ -26,9 +27,29 @@ func NewStorage(back StorageBackend) *Storage {
return &Storage{back: back}
}
// List wraps a StorageBackend.List.
func (s *Storage) List(id uint) ([]*Link, error) {
links, err := s.back.List(id)
// 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

View File

@ -12,16 +12,19 @@ type shareBackend struct {
db *storm.DB
}
func (s shareBackend) List(id uint) ([]*share.Link, error) {
var (
v []*share.Link
err error
)
if id == 0 {
err = s.db.All(&v)
} else {
err = s.db.Select(q.Eq("UserID", id)).Find(&v)
func (s shareBackend) All() ([]*share.Link, error) {
var v []*share.Link
err := s.db.All(&v)
if err == storm.ErrNotFound {
return v, errors.ErrNotExist
}
return v, err
}
func (s shareBackend) FindByUserID(id uint) ([]*share.Link, error) {
var v []*share.Link
err := s.db.Select(q.Eq("UserID", id)).Find(&v)
if err == storm.ErrNotFound {
return v, errors.ErrNotExist
}