summaryrefslogtreecommitdiffhomepage
path: root/ipn/ipnlocal/peerapi.go
diff options
context:
space:
mode:
authorDavid Crawshaw <crawshaw@tailscale.com>2021-03-31 14:22:55 -0700
committerDavid Crawshaw <crawshaw@tailscale.com>2021-03-31 14:22:55 -0700
commit12306507da2409e788b1992d35aad91b013ac574 (patch)
treefc9eeba59d007665c9e6de732ee4d3c81ac1098f /ipn/ipnlocal/peerapi.go
parentcf2beafbcdb1c25c36621ab6b46647bc0c5f5224 (diff)
downloadtailscale-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.go45
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")