Files
trpic/web/web.go
Hubert Chen ec2b7d4f32 refactor
auth, api/auth:
    use `http.StatusFound`(302) to redirect request
utils/error:
    add `Redirect()` to redirect request
    add `notFoundErr` empty struct
    add `NotFoundClose`, `NotFoundCloseIf` and `NotFoundCloseHandler` functions
    adjust `Recoverer()` middleware to implement `NotFoundClose*` functions
api/artworks:
    restrict private artworks visibility
assets:
    remove `WebAssetHandler` handler
    move `FilesAssetsHandler` and `ThumbnailAssetsHandler` to `src/web`
router:
    endpoint `/api/auth/refresh` can handle all http method
    select `/{name}.{ext}` handler by `configs.Config.Debug` config (load from disk or embed FS)
src/web:
    remove `EventWatcher` and `EventReload` functions
    restrict private artworks visibility in `ArtworksIDHandler` and `ArtworksNoScriptIDHandler`
    move `FilesAssetsHandler` and `ThumbnailAssetsHandler` from `assets`
web/scripts/submit_url:
    clearn input box after success request
web > webfs:
    rename package name to `webfs`
    rename `FS` variable to `Root`
    add `Sub(dir string)` function to access sub FS
2026-04-07 22:30:38 +08:00

52 lines
783 B
Go

package webfs
import (
"embed"
"fmt"
"io/fs"
"path"
)
//go:embed assets scripts styles templates
var webFS embed.FS
var Root fs.FS
func init() {
Root = prefixFS{root: "web", fs: webFS}
}
type prefixFS struct {
root string
fs fs.FS
}
func (p prefixFS) Open(name string) (fs.File, error) {
clean := path.Clean(name)
if clean == p.root {
return p.fs.Open(".")
}
return p.fs.Open(clean[len(p.root + "/"):])
}
func (p prefixFS) ReadDir(name string) ([]fs.DirEntry, error) {
clean := path.Clean(name)
if clean == p.root {
return fs.ReadDir(p.fs, ".")
}
return fs.ReadDir(p.fs, clean[len(p.root + "/"):])
}
func Sub(dir string) fs.FS {
sub, err := fs.Sub(Root, dir)
if err != nil {
panic(fmt.Errorf("failed to create subfs: %w", err))
}
return sub
}