mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-17 20:55:28 +00:00
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
|
|
package fs
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
|
||
|
|
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/protocolstate"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ListDir lists all files and directories within a path
|
||
|
|
// depending on the itemType provided
|
||
|
|
// itemType can be any one of ['file','dir','all']
|
||
|
|
func ListDir(path string, itemType string) ([]string, error) {
|
||
|
|
finalPath, err := protocolstate.NormalizePath(path)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
values, err := os.ReadDir(finalPath)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
var results []string
|
||
|
|
for _, value := range values {
|
||
|
|
if itemType == "file" && value.IsDir() {
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
if itemType == "dir" && !value.IsDir() {
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
results = append(results, value.Name())
|
||
|
|
}
|
||
|
|
return results, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// ReadFile reads file contents within permitted paths
|
||
|
|
func ReadFile(path string) ([]byte, error) {
|
||
|
|
finalPath, err := protocolstate.NormalizePath(path)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
bin, err := os.ReadFile(finalPath)
|
||
|
|
return bin, err
|
||
|
|
}
|
||
|
|
|
||
|
|
// ReadFileAsString reads file contents within permitted paths
|
||
|
|
// and returns content as string
|
||
|
|
func ReadFileAsString(path string) (string, error) {
|
||
|
|
bin, err := ReadFile(path)
|
||
|
|
if err != nil {
|
||
|
|
return "", err
|
||
|
|
}
|
||
|
|
return string(bin), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// ReadFilesFromDir reads all files from a directory
|
||
|
|
// and returns a array with file contents of all files
|
||
|
|
func ReadFilesFromDir(dir string) ([]string, error) {
|
||
|
|
files, err := ListDir(dir, "file")
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
var results []string
|
||
|
|
for _, file := range files {
|
||
|
|
content, err := ReadFileAsString(dir + "/" + file)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
results = append(results, content)
|
||
|
|
}
|
||
|
|
return results, nil
|
||
|
|
}
|