Selaa lähdekoodia

first test using local storage

pull/294/head
Stefan Benten 4 vuotta sitten
vanhempi
commit
88a2e464e7
4 muutettua tiedostoa jossa 21 lisäystä ja 15 poistoa
  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 Näytä tiedosto

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


+ 9
- 3
server/handlers.go Näytä tiedosto

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



+ 7
- 5
server/storage/gdrive.go Näytä tiedosto

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

+ 3
- 2
server/storage/local.go Näytä tiedosto

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


Ladataan…
Peruuta
Tallenna