From 88a2e464e71cd11d0fe50c0eb1d2b1e7db6b32c4 Mon Sep 17 00:00:00 2001 From: Stefan Benten Date: Sun, 29 Mar 2020 15:58:47 +0200 Subject: [PATCH] first test using local storage --- cmd/cmd.go | 7 ++----- server/handlers.go | 12 +++++++++--- server/storage/gdrive.go | 12 +++++++----- server/storage/local.go | 5 +++-- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 81a07fd..8b2880d 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -28,10 +28,7 @@ COMMANDS: {{end}}{{if .Flags}} FLAGS: {{range .Flags}}{{.}} -{{end}}{{end}} -VERSION: -` + Version + - `{{ "\n"}}` +{{end}}{{end}}` var globalFlags = []cli.Flag{ cli.StringFlag{ @@ -346,7 +343,7 @@ func New() *Cmd { options = append(options, server.FilterOptions(ipFilterOptions)) } if lifetime := c.Int("lifetime"); lifetime > 0 { - server.LifeTime(lifetime) + options = append(options, server.LifeTime(lifetime)) } else { panic("lifetime not greater than 0") } diff --git a/server/handlers.go b/server/handlers.go index 7803a94..d50ba23 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -372,6 +372,10 @@ func (s *Server) postHandler(w http.ResponseWriter, r *http.Request) { filename = url.PathEscape(filename) relativeURL, _ := url.Parse(path.Join(s.proxyPath, token, filename)) + deleteURL, _ := url.Parse(path.Join(s.proxyPath, token, filename, metadata.DeletionToken)) + + w.Header().Set("X-Url-Delete", utils.ResolveURL(r, deleteURL)) + _, _ = fmt.Fprintln(w, utils.GetURL(r).ResolveReference(relativeURL).String()) } } @@ -827,6 +831,8 @@ func (s *Server) checkMetadata(token, filename string, increaseDownload bool) (m s.Lock(token, filename) defer s.Unlock(token, filename) + file := fmt.Sprintf("%s/%s", token, filename) + metadata, err = s.storage.Head(token, filename) if s.storage.IsNotExist(err) { return metadata, nil @@ -835,9 +841,9 @@ func (s *Server) checkMetadata(token, filename string, increaseDownload bool) (m } if metadata.MaxDownloads != -1 && metadata.Downloads >= metadata.MaxDownloads { - return metadata, errors.New("max downloads exceeded") + return metadata, errors.New("max downloads exceeded for " + file) } else if !metadata.MaxDate.IsZero() && time.Now().After(metadata.MaxDate) { - return metadata, errors.New("file access expired") + return metadata, errors.New("file access expired for " + file) } else { // update number of downloads @@ -846,7 +852,7 @@ func (s *Server) checkMetadata(token, filename string, increaseDownload bool) (m } if err := s.storage.Meta(token, filename, metadata); err != nil { - return metadata, errors.New("could not save metadata") + return metadata, errors.New("could not save metadata for " + file) } } diff --git a/server/storage/gdrive.go b/server/storage/gdrive.go index 1fc6748..95f2b93 100644 --- a/server/storage/gdrive.go +++ b/server/storage/gdrive.go @@ -74,7 +74,7 @@ func (s *GDrive) Get(token string, filename string) (reader io.ReadCloser, metad var fi *drive.File fi, err = s.service.Files.Get(fileId).Do() if !s.hasChecksum(fi) { - err = fmt.Errorf("Cannot find file %s/%s", token, filename) + err = fmt.Errorf("cannot find file %s/%s", token, filename) return } if err != nil { @@ -155,6 +155,8 @@ func (s *GDrive) Head(token string, filename string) (metadata Metadata, err err } func (s *GDrive) Meta(token string, filename string, metadata Metadata) error { + //TODO: implement + log.Printf("updating meta %s/%s with %v", token, filename, metadata) return nil } @@ -205,7 +207,7 @@ func (s *GDrive) Put(token string, filename string, reader io.Reader, metadata M func (s *GDrive) Delete(token string, filename string) (err error) { metadata, _ := s.findId(fmt.Sprintf("%s.metadata", filename), token) - s.service.Files.Delete(metadata).Do() + _ = s.service.Files.Delete(metadata).Do() var fileId string fileId, err = s.findId(filename, token) @@ -363,10 +365,10 @@ func getGDriveTokenFromWeb(config *oauth2.Config, logger *log.Logger) *oauth2.To // Retrieves a token from a local file. func gDriveTokenFromFile(file string) (*oauth2.Token, error) { f, err := os.Open(file) - defer f.Close() if err != nil { return nil, err } + defer f.Close() tok := &oauth2.Token{} err = json.NewDecoder(f).Decode(tok) return tok, err @@ -376,10 +378,10 @@ func gDriveTokenFromFile(file string) (*oauth2.Token, error) { func saveGDriveToken(path string, token *oauth2.Token, logger *log.Logger) { logger.Printf("Saving credential file to: %s\n", path) f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) - defer f.Close() if err != nil { logger.Fatalf("Unable to cache oauth token: %v", err) } + defer f.Close() - json.NewEncoder(f).Encode(token) + _ = json.NewEncoder(f).Encode(token) } diff --git a/server/storage/local.go b/server/storage/local.go index 36d022c..0590ac8 100644 --- a/server/storage/local.go +++ b/server/storage/local.go @@ -59,7 +59,7 @@ func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, } func (s *LocalStorage) Head(token string, filename string) (metadata Metadata, err error) { - path := filepath.Join(s.basedir, token, filename) + path := filepath.Join(s.basedir, token, fmt.Sprintf("%s.metadata", filename)) fi, err := os.Open(path) if err != nil { @@ -92,6 +92,7 @@ func (s *LocalStorage) Put(token string, filename string, reader io.Reader, meta } func (s *LocalStorage) Delete(token string, filename string) (err error) { + log.Printf("deleting file %s/%s/%s", s.basedir, token, filename) return os.RemoveAll(filepath.Join(s.basedir, token)) } @@ -154,7 +155,7 @@ func (s *LocalStorage) putMetadata(token string, filename string, metadata Metad if err := json.NewEncoder(buffer).Encode(metadata); err != nil { log.Printf("%s", err.Error()) return err - } else if err := s.put(token, filename, buffer); err != nil { + } else if err := s.put(token, fmt.Sprintf("%s.metadata", filename), buffer); err != nil { log.Printf("%s", err.Error()) return nil