diff options
| author | David Crawshaw <crawshaw@tailscale.com> | 2021-03-31 14:22:55 -0700 |
|---|---|---|
| committer | David Crawshaw <crawshaw@tailscale.com> | 2021-03-31 14:22:55 -0700 |
| commit | 12306507da2409e788b1992d35aad91b013ac574 (patch) | |
| tree | fc9eeba59d007665c9e6de732ee4d3c81ac1098f /ipn/ipnlocal/peerapi.go | |
| parent | cf2beafbcdb1c25c36621ab6b46647bc0c5f5224 (diff) | |
| download | tailscale-crawshaw/movefiles.tar.xz tailscale-crawshaw/movefiles.zip | |
ipnlocal: add MoveFilesTo methodcrawshaw/movefiles
Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
Diffstat (limited to 'ipn/ipnlocal/peerapi.go')
| -rw-r--r-- | ipn/ipnlocal/peerapi.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/ipn/ipnlocal/peerapi.go b/ipn/ipnlocal/peerapi.go index 568c6a811..e4294a942 100644 --- a/ipn/ipnlocal/peerapi.go +++ b/ipn/ipnlocal/peerapi.go @@ -135,6 +135,51 @@ func (s *peerAPIServer) WaitingFiles() (ret []WaitingFile, err error) { return ret, nil } +func (s *peerAPIServer) MoveFilesTo(dir string) (filesMoved []string, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("MoveFilesTo: %w", err) + } + }() + + if s.rootDir == "" { + return nil, errors.New("peerapi disabled; reconsider life choices TODO") + } + f, err := os.Open(s.rootDir) + if err != nil { + return nil, err + } + defer f.Close() + for { + des, err := f.ReadDir(10) + if err == io.EOF { + break + } + if err != nil { + return filesMoved, err + } + for _, de := range des { + if strings.HasSuffix(de.Name(), partialSuffix) { + continue + } + if !de.Type().IsRegular() { + continue + } + tsdir := filepath.Join(dir, "Tailscale") + if err := os.MkdirAll(tsdir, 0777); err != nil { + return filesMoved, err + } + dst := filepath.Join(tsdir, filepath.Base(de.Name())) + err = os.Rename(filepath.Join(s.rootDir, de.Name()), dst) + if err != nil { + return filesMoved, err + } + filesMoved = append(filesMoved, dst) + } + } + return filesMoved, nil +} + func (s *peerAPIServer) DeleteFile(baseName string) error { if s.rootDir == "" { return errors.New("peerapi disabled; no storage configured") |
