commit 6899ca04e284877554b91f3f448367eaa141515b
parent eda9cccce7704e65905f26fa0bfc94f055e498e2
Author: weetat <wtenison@protonmail.com>
Date: Thu, 27 Feb 2025 05:29:12 +0000
Fold DirectorySignature into MakeDirectoryPkg
MakeDirectoryPkg now takes the path, depth and a filepath.Match glob
directly instead of a signature struct holding a regexp. The fmd data
lookup is commented out for now.
Diffstat:
5 files changed, 65 insertions(+), 89 deletions(-)
diff --git a/src/filesystem/directories.go b/src/filesystem/directories.go
@@ -2,12 +2,8 @@ package filesystem
import (
"fmt"
- "log"
- "miki/src/fmd"
"os"
"path/filepath"
- "regexp"
- "strings"
)
type SearchDepth int
@@ -18,112 +14,106 @@ const (
SEARCH_DEPTH_ZERO SearchDepth = 0
)
-type DirectorySignature struct {
- Root string // The root directoy of the resource.
- DependencyDepth SearchDepth // The folder search depth of the resource. -1=inf, 0=single, >0=n-depth
- DependencyPattern *regexp.Regexp // The pattern of valid resource dependency files.
-}
-
type DirectoryPackage struct {
Root string // The root directory of the resource.
DependencyFiles []string // The set of valid resource files.
DependencyData interface{} // Any relevant resource data.
}
-func MakeDirectorySig(directory string, depth SearchDepth, pattern *regexp.Regexp) (DirectorySignature, error) {
+// func MakeDirectoryPkg(resSig DirectorySignature) (DirectoryPackage, error) {
+func MakeDirectoryPkg(directory string, depth SearchDepth, filePattern string) (DirectoryPackage, error) {
- if directory == "" || depth < -1 || pattern == nil {
- _retErr := fmt.Errorf("MakeDirectorySig:invalid directory signature (%s, %d, %s)", directory, depth, pattern)
- return DirectorySignature{}, _retErr
- }
+ _dirPkg := DirectoryPackage{Root: filepath.Clean(directory)}
- if _, _err := os.Stat(directory); _err != nil {
- _retErr := fmt.Errorf("MakeDirectorySig:%s", _err)
- return DirectorySignature{}, _retErr
+ // Check for valid input parameters.
+ if _dirPkg.Root == "" || depth < -1 {
+ _retErr := fmt.Errorf("MakeDirectoryDir:invalid directory signature (%s, %d)", _dirPkg.Root, depth)
+ return _dirPkg, _retErr
}
- return DirectorySignature{directory, depth, pattern}, nil
-}
-
-func MakeDirectoryPkg(resSig DirectorySignature) (DirectoryPackage, error) {
+ // Check if input directory exists.
+ if _, _err := os.Stat(_dirPkg.Root); _err != nil {
+ _retErr := fmt.Errorf("MakeDirectoryDir:os.Stat:%s", _err)
+ return _dirPkg, _retErr
+ }
// Check and collect resource signature directory files.
- _files, _err := os.ReadDir(resSig.Root)
+ _fileList, _err := os.ReadDir(_dirPkg.Root)
if _err != nil {
_retErr := fmt.Errorf("MakeDirectoryPkg:%s", _err)
return DirectoryPackage{}, _retErr
}
- _resPkg := DirectoryPackage{
- Root: resSig.Root,
- DependencyFiles: []string{},
- DependencyData: nil,
- }
-
- _resFileDirDeps := []string{}
+ // A variable to store root sub-directory files.
+ _subDirPkgDeps := []string{}
// Collete all valid files and/or sub-directory files.
- for _, _f := range _files {
+ for _, _f := range _fileList {
// Recurse into valid sub-directory files.
- if _f.IsDir() && (resSig.DependencyDepth > SEARCH_DEPTH_ZERO || resSig.DependencyDepth == SEARCH_DEPTH_INF) {
+ if _f.IsDir() && (depth > SEARCH_DEPTH_ZERO || depth == SEARCH_DEPTH_INF) {
// Decrement depth if not infinite.
- _depDepth := resSig.DependencyDepth
- if _depDepth != SEARCH_DEPTH_INF {
- _depDepth = _depDepth - 1
- }
-
- // Make directory signature for each sub-file/dir
- _resDirSig, _err := MakeDirectorySig(_f.Name(), _depDepth, resSig.DependencyPattern)
- if _err != nil {
- _retErr := fmt.Errorf("MakeDirectoryPkg:%s", _err)
- return DirectoryPackage{}, _retErr
+ if depth != SEARCH_DEPTH_INF {
+ depth--
}
- // Make the respective package.
- _resDirPkg, _err := MakeDirectoryPkg(_resDirSig)
+ // Get sub-directory content.
+ _subDirPkg, _err := MakeDirectoryPkg(_f.Name(), depth, filePattern)
if _err != nil {
_retErr := fmt.Errorf("MakeDirectoryPkg:%s", _err)
return DirectoryPackage{}, _retErr
}
// Add to package dependencies list.
- _resFileDirDeps = append(_resFileDirDeps, _resDirPkg.DependencyFiles...)
+ _subDirPkgDeps = append(_subDirPkgDeps, _subDirPkg.DependencyFiles...)
- } else if resSig.DependencyPattern != nil && resSig.DependencyPattern.MatchString(_f.Name()) {
+ } else {
// Add files that match pattern to dependency list.
- _resPkg.DependencyFiles = append(_resPkg.DependencyFiles, filepath.Join(_resPkg.Root, _f.Name()))
+ if matches, _ := filepath.Match(filePattern, _f.Name()); matches {
+ _dirPkg.DependencyFiles = append(_dirPkg.DependencyFiles, filepath.Join(_dirPkg.Root, _f.Name()))
+ }
}
}
// Include any sub-directory file dependencies.
- _resPkg.DependencyFiles = append(_resPkg.DependencyFiles, _resFileDirDeps...)
+ _dirPkg.DependencyFiles = append(_dirPkg.DependencyFiles, _subDirPkgDeps...)
+
+ return _dirPkg, nil
// Check for atricle entry.
// TODO: Move to secure and refined interface.
- _dataFiles, _err := os.ReadDir(Dirs["data"])
- if _err != nil {
- _retErr := fmt.Errorf("MakeDirectoryPkg:%s", _err)
- return DirectoryPackage{}, _retErr
- }
- for _, _df := range _dataFiles {
- _rootFile := strings.Split(resSig.Root, "/")
- _rootDataFile := _rootFile[len(_rootFile)-1] + ".fmd"
+ // _dataFiles, _err := os.ReadDir(Dirs["data"])
+ // if _err != nil {
+ // _retErr := fmt.Errorf("MakeDirectoryPkg:%s", _err)
+ // return DirectoryPackage{}, _retErr
+ // }
- if _df.Name() == _rootDataFile {
- log.Printf("INFO\tMakeDirectoryPkg:df:%s, rootDataFile:%s", _df.Name(), _rootDataFile)
+ // for _, _df := range _dataFiles {
+ // _rootFile := strings.Split(resSig.Root, "/")
+ // _rootDataFile := _rootFile[len(_rootFile)-1] + ".fmd"
- var _DataContainer struct {
- PageContent string
- }
+ // if _df.Name() == _rootDataFile {
+ // log.Printf("INFO\tMakeDirectoryPkg:df:%s, rootDataFile:%s", _df.Name(), _rootDataFile)
- _DataContainer.PageContent = fmd.WritFMDToHTMLString(filepath.Join(Dirs["data"], _rootDataFile))
+ // var _DataContainer struct {
+ // PageContent string
+ // }
- _resPkg.DependencyData = _DataContainer
- }
- }
+ // _DataContainer.PageContent = fmd.WritFMDToHTMLString(filepath.Join(Dirs["data"], _rootDataFile))
- return _resPkg, nil
+ // _resPkg.DependencyData = _DataContainer
+ // }
+ // }
}
+
+// func AppendRootPathToFiles(root string, files []string) []string {
+// var _appendedFileList []string
+
+// for _, _f := range files {
+// _appendedFileList = append(_appendedFileList, filepath.Join(root, _f))
+// }
+
+// return _appendedFileList
+// }
diff --git a/src/filesystem/files.go b/src/filesystem/files.go
@@ -4,12 +4,8 @@ import (
"encoding/json"
"fmt"
"os"
- "regexp"
)
-var FilePatternHTML = regexp.MustCompile("^([a-zA-Z0-9.]+).html$")
-var FilePatternJSON = regexp.MustCompile("^([a-zA-Z0-9.]+).json$")
-
func ReadFileJSON(filePath string, outputDataContainer interface{}) error {
_fsData, _err := os.ReadFile(filePath)
diff --git a/src/filesystem/filesystem.go b/src/filesystem/filesystem.go
@@ -5,7 +5,6 @@ import (
"path/filepath"
)
-// var Dirs map[string]string
var Dirs = make(map[string]string)
var WebGlobalPkg DirectoryPackage
@@ -30,12 +29,8 @@ func Init() {
//// GET GLOBAL WEB RESOURCES
- _globalSig, _err := MakeDirectorySig(filepath.Join(Dirs["web"], "/global"), 0, FilePatternHTML)
- if _err != nil {
- log.Panicf("__PANIC\tfilesystem:Init:%s", _err)
- }
-
- WebGlobalPkg, _err = MakeDirectoryPkg(_globalSig)
+ var _err error
+ WebGlobalPkg, _err = MakeDirectoryPkg(filepath.Join(Dirs["web"], "/global"), SEARCH_DEPTH_ZERO, "*.html")
if _err != nil {
log.Panicf("__PANIC\tfilesystem:Init:%s", _err)
}
diff --git a/src/network/network.go b/src/network/network.go
@@ -26,11 +26,14 @@ func Init() {
CertFile string `json:"cert-file"`
KeyFile string `json:"key-file"`
}
+
var _siDataStruct struct {
ServerInfo ServerInfo `json:"server-info"`
}
- mfs.ReadFileJSON("sys/config.json", &_siDataStruct)
+ if _err := mfs.ReadFileJSON("sys/config.json", &_siDataStruct); _err != nil {
+ log.Panicf("__PANIC\tfilesystem:%s", _err)
+ }
serverInfo.port = _siDataStruct.ServerInfo.Port
serverInfo.sslPath = _siDataStruct.ServerInfo.SslPath
@@ -42,11 +45,11 @@ func Init() {
//// CHECK FOR VALID CERT INFO
if _, err := os.Stat(serverInfo.certFile); err != nil {
- log.Panicf("__PANIC\tnetwork:Init:%s", err)
+ log.Panicf("__PANIC\tnetwork:Init:os.Stat:%s", err)
}
if _, err := os.Stat(serverInfo.keyFile); err != nil {
- log.Panicf("__PANIC\tnetwork:Init:%s", err)
+ log.Panicf("__PANIC\tnetwork:Init:os.Stat:%s", err)
}
//// MAKE SERVER ROUTES
diff --git a/src/network/routes.go b/src/network/routes.go
@@ -36,16 +36,8 @@ func makeServerRoutes() {
func handlePageDefault(w http.ResponseWriter, r *http.Request) {
- // Produce URL path to directory relation.
- _r, _err := mfs.MakeDirectorySig(filepath.Join(mfs.Dirs["web"], r.URL.String()), 0, mfs.FilePatternHTML)
- if _err != nil {
- log.Printf("_ERROR\tnetwork:handlePageDefault(\"/\"):%s", _err)
- http.NotFound(w, r)
- return
- }
-
// Collect HTML template files from directory.
- _rPkg, _err := mfs.MakeDirectoryPkg(_r)
+ _rPkg, _err := mfs.MakeDirectoryPkg(filepath.Join(mfs.Dirs["web"], r.URL.String()), mfs.SEARCH_DEPTH_ZERO, "*.html")
if _err != nil {
log.Printf("_ERROR\tnetwork:handlePageDefault(\"/\"):%s", _err)
http.NotFound(w, r)