github.com/aarzilli/tools@v0.0.0-20151123112009-0d27094f75e0/net/http/fileserver/2_dir_contents.go (about) 1 package fileserver 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "net/url" 7 "path" 8 "strings" 9 "time" 10 11 "github.com/pbberlin/tools/net/http/fetch" 12 "github.com/pbberlin/tools/net/http/loghttp" 13 "github.com/pbberlin/tools/os/fsi/common" 14 "github.com/pbberlin/tools/stringspb" 15 ) 16 17 // GetDirContents fetches from fileserver - via http 18 // Parsing the received JSON into string slices 19 func GetDirContents(hostWithPrefix, dir string) ([]string, []string, *bytes.Buffer, error) { 20 21 lg, lge := loghttp.Logger(nil, nil) 22 _ = lg 23 24 var b = new(bytes.Buffer) 25 26 dirs := []string{} 27 fils := []string{} 28 29 // build url 30 urlSubDirs, err := url.Parse(path.Join(hostWithPrefix, dir)) 31 lge(err) 32 if err != nil { 33 return dirs, fils, b, err 34 } 35 sd := urlSubDirs.String() 36 sd = common.Directorify(sd) 37 wpf(b, "requ subdirs from %v", sd) 38 39 // make req 40 bsubdirs, effU, err := fetch.UrlGetter(nil, fetch.Options{URL: sd}) 41 lge(err) 42 if err != nil { 43 return dirs, fils, b, err 44 } 45 wpf(b, "got %s - %v", bsubdirs, effU) 46 47 // parse json 48 mpSubDir := []map[string]string{} 49 err = json.Unmarshal(bsubdirs, &mpSubDir) 50 lge(err) 51 if err != nil { 52 // lg("%s", bsubdirs) 53 return dirs, fils, b, err 54 } 55 wpf(b, "json of subdir is %s", stringspb.IndentedDump(mpSubDir)) 56 57 for _, v := range mpSubDir { 58 59 if dir, ok := v["path"]; ok { 60 if strings.HasSuffix(dir, "/") { 61 dirs = append(dirs, dir) 62 } else { 63 fils = append(fils, dir) 64 } 65 } 66 67 if smod, ok := v["mod"]; ok { 68 t, err := time.Parse(time.RFC1123Z, smod) 69 lge(err) 70 wpf(b, "age %-6.2v", time.Now().Sub(t).Hours()) 71 } 72 73 } 74 return dirs, fils, b, nil 75 76 }