@@ -28,10 +28,7 @@ COMMANDS: | |||||
{{end}}{{if .Flags}} | {{end}}{{if .Flags}} | ||||
FLAGS: | FLAGS: | ||||
{{range .Flags}}{{.}} | {{range .Flags}}{{.}} | ||||
{{end}}{{end}} | |||||
VERSION: | |||||
` + Version + | |||||
`{{ "\n"}}` | |||||
{{end}}{{end}}` | |||||
var globalFlags = []cli.Flag{ | var globalFlags = []cli.Flag{ | ||||
cli.StringFlag{ | cli.StringFlag{ | ||||
@@ -346,7 +343,7 @@ func New() *Cmd { | |||||
options = append(options, server.FilterOptions(ipFilterOptions)) | options = append(options, server.FilterOptions(ipFilterOptions)) | ||||
} | } | ||||
if lifetime := c.Int("lifetime"); lifetime > 0 { | if lifetime := c.Int("lifetime"); lifetime > 0 { | ||||
server.LifeTime(lifetime) | |||||
options = append(options, server.LifeTime(lifetime)) | |||||
} else { | } else { | ||||
panic("lifetime not greater than 0") | panic("lifetime not greater than 0") | ||||
} | } | ||||
@@ -372,6 +372,10 @@ func (s *Server) postHandler(w http.ResponseWriter, r *http.Request) { | |||||
filename = url.PathEscape(filename) | filename = url.PathEscape(filename) | ||||
relativeURL, _ := url.Parse(path.Join(s.proxyPath, token, 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()) | _, _ = 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) | s.Lock(token, filename) | ||||
defer s.Unlock(token, filename) | defer s.Unlock(token, filename) | ||||
file := fmt.Sprintf("%s/%s", token, filename) | |||||
metadata, err = s.storage.Head(token, filename) | metadata, err = s.storage.Head(token, filename) | ||||
if s.storage.IsNotExist(err) { | if s.storage.IsNotExist(err) { | ||||
return metadata, nil | 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 { | 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) { | } 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 { | } else { | ||||
// update number of downloads | // 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 { | 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 | var fi *drive.File | ||||
fi, err = s.service.Files.Get(fileId).Do() | fi, err = s.service.Files.Get(fileId).Do() | ||||
if !s.hasChecksum(fi) { | 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 | return | ||||
} | } | ||||
if err != nil { | 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 { | 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 | 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) { | func (s *GDrive) Delete(token string, filename string) (err error) { | ||||
metadata, _ := s.findId(fmt.Sprintf("%s.metadata", filename), token) | metadata, _ := s.findId(fmt.Sprintf("%s.metadata", filename), token) | ||||
s.service.Files.Delete(metadata).Do() | |||||
_ = s.service.Files.Delete(metadata).Do() | |||||
var fileId string | var fileId string | ||||
fileId, err = s.findId(filename, token) | 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. | // Retrieves a token from a local file. | ||||
func gDriveTokenFromFile(file string) (*oauth2.Token, error) { | func gDriveTokenFromFile(file string) (*oauth2.Token, error) { | ||||
f, err := os.Open(file) | f, err := os.Open(file) | ||||
defer f.Close() | |||||
if err != nil { | if err != nil { | ||||
return nil, err | return nil, err | ||||
} | } | ||||
defer f.Close() | |||||
tok := &oauth2.Token{} | tok := &oauth2.Token{} | ||||
err = json.NewDecoder(f).Decode(tok) | err = json.NewDecoder(f).Decode(tok) | ||||
return tok, err | return tok, err | ||||
@@ -376,10 +378,10 @@ func gDriveTokenFromFile(file string) (*oauth2.Token, error) { | |||||
func saveGDriveToken(path string, token *oauth2.Token, logger *log.Logger) { | func saveGDriveToken(path string, token *oauth2.Token, logger *log.Logger) { | ||||
logger.Printf("Saving credential file to: %s\n", path) | logger.Printf("Saving credential file to: %s\n", path) | ||||
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) | f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) | ||||
defer f.Close() | |||||
if err != nil { | if err != nil { | ||||
logger.Fatalf("Unable to cache oauth token: %v", err) | 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) { | 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) | fi, err := os.Open(path) | ||||
if err != nil { | 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) { | 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)) | 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 { | if err := json.NewEncoder(buffer).Encode(metadata); err != nil { | ||||
log.Printf("%s", err.Error()) | log.Printf("%s", err.Error()) | ||||
return err | 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()) | log.Printf("%s", err.Error()) | ||||
return nil | return nil | ||||