Sfoglia il codice sorgente

first test using local storage

pull/294/head
Stefan Benten 4 anni fa
parent
commit
88a2e464e7
4 ha cambiato i file con 21 aggiunte e 15 eliminazioni
  1. +2
    -5
      cmd/cmd.go
  2. +9
    -3
      server/handlers.go
  3. +7
    -5
      server/storage/gdrive.go
  4. +3
    -2
      server/storage/local.go

+ 2
- 5
cmd/cmd.go Vedi File

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


+ 9
- 3
server/handlers.go Vedi File

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




+ 7
- 5
server/storage/gdrive.go Vedi 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)
} }

+ 3
- 2
server/storage/local.go Vedi File

@@ -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


Caricamento…
Annulla
Salva