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(resourcePostPutHandler, "/api/resources")).Methods("PUT")
api.PathPrefix("/resources").Handler(monkey(resourcePatchHandler, "/api/resources")).Methods("PATCH") 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(shareGetsHandler, "/api/share")).Methods("GET")
api.PathPrefix("/share").Handler(monkey(sharePostHandler, "/api/share")).Methods("POST") api.PathPrefix("/share").Handler(monkey(sharePostHandler, "/api/share")).Methods("POST")
api.PathPrefix("/share").Handler(monkey(shareDeleteHandler, "/api/share")).Methods("DELETE") 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) { 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 { 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 { if err == errors.ErrNotExist {
return renderJSON(w, r, []*share.Link{}) return renderJSON(w, r, []*share.Link{})
} }

View File

@ -8,7 +8,8 @@ import (
// StorageBackend is the interface to implement for a share storage. // StorageBackend is the interface to implement for a share storage.
type StorageBackend interface { type StorageBackend interface {
List(id uint) ([]*Link, error) All() ([]*Link, error)
FindByUserID(id uint) ([]*Link, error)
GetByHash(hash string) (*Link, error) GetByHash(hash string) (*Link, error)
GetPermanent(path string, id uint) (*Link, error) GetPermanent(path string, id uint) (*Link, error)
Gets(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} return &Storage{back: back}
} }
// List wraps a StorageBackend.List. // All wraps a StorageBackend.All.
func (s *Storage) List(id uint) ([]*Link, error) { func (s *Storage) All() ([]*Link, error) {
links, err := s.back.List(id) 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 { if err != nil {
return nil, err return nil, err

View File

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