@@ -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") | |||
} | |||
@@ -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) | |||
} | |||
} | |||
@@ -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) | |||
} |
@@ -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 | |||