github.com/vmware/transport-go@v1.3.4/plank/pkg/server/neutered_fs.go (about) 1 // Copyright 2019-2021 VMware, Inc. 2 // SPDX-License-Identifier: BSD-2-Clause 3 4 package server 5 6 import ( 7 "io" 8 "net/http" 9 "os" 10 ) 11 12 type NoDirFileSystem struct { 13 fs http.Dir 14 } 15 16 type neuteredStatFile struct { 17 http.File 18 readDirCount int 19 } 20 21 func (e neuteredStatFile) Stat() (os.FileInfo, error) { 22 s, err := e.File.Stat() 23 if err != nil { 24 return nil, err 25 } 26 if s.IsDir() { 27 LOOP: 28 for { 29 fl, err := e.File.Readdir(e.readDirCount) 30 switch err { 31 case io.EOF: 32 break LOOP 33 case nil: 34 for _, f := range fl { 35 if f.Name() == "index.html" { 36 return s, err 37 } 38 } 39 default: 40 return nil, err 41 } 42 } 43 return nil, os.ErrNotExist 44 } 45 return s, err 46 } 47 48 func (nd NoDirFileSystem) Open(name string) (http.File, error) { 49 f, err := nd.fs.Open(name) 50 if err != nil { 51 return nil, err 52 } 53 return neuteredStatFile{f, 2}, nil 54 }