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  }