| 84 | } |
| 85 | |
| 86 | func cmdFileServer(fs caddycmd.Flags) (int, error) { |
| 87 | caddy.TrapSignals() |
| 88 | |
| 89 | domain := fs.String("domain") |
| 90 | root := fs.String("root") |
| 91 | listen := fs.String("listen") |
| 92 | browse := fs.Bool("browse") |
| 93 | templates := fs.Bool("templates") |
| 94 | accessLog := fs.Bool("access-log") |
| 95 | fileLimit := fs.Int("file-limit") |
| 96 | debug := fs.Bool("debug") |
| 97 | revealSymlinks := fs.Bool("reveal-symlinks") |
| 98 | compress := !fs.Bool("no-compress") |
| 99 | precompressed, err := fs.GetStringSlice("precompressed") |
| 100 | if err != nil { |
| 101 | return caddy.ExitCodeFailedStartup, fmt.Errorf("invalid precompressed flag: %v", err) |
| 102 | } |
| 103 | var handlers []json.RawMessage |
| 104 | |
| 105 | if compress { |
| 106 | zstd, err := caddy.GetModule("http.encoders.zstd") |
| 107 | if err != nil { |
| 108 | return caddy.ExitCodeFailedStartup, err |
| 109 | } |
| 110 | |
| 111 | gzip, err := caddy.GetModule("http.encoders.gzip") |
| 112 | if err != nil { |
| 113 | return caddy.ExitCodeFailedStartup, err |
| 114 | } |
| 115 | |
| 116 | handlers = append(handlers, caddyconfig.JSONModuleObject(encode.Encode{ |
| 117 | EncodingsRaw: caddy.ModuleMap{ |
| 118 | "zstd": caddyconfig.JSON(zstd.New(), nil), |
| 119 | "gzip": caddyconfig.JSON(gzip.New(), nil), |
| 120 | }, |
| 121 | Prefer: []string{"zstd", "gzip"}, |
| 122 | }, "handler", "encode", nil)) |
| 123 | } |
| 124 | |
| 125 | if templates { |
| 126 | handler := caddytpl.Templates{FileRoot: root} |
| 127 | handlers = append(handlers, caddyconfig.JSONModuleObject(handler, "handler", "templates", nil)) |
| 128 | } |
| 129 | |
| 130 | handler := FileServer{Root: root} |
| 131 | |
| 132 | if len(precompressed) != 0 { |
| 133 | // logic mirrors modules/caddyhttp/fileserver/caddyfile.go case "precompressed" |
| 134 | var order []string |
| 135 | for _, compression := range precompressed { |
| 136 | modID := "http.precompressed." + compression |
| 137 | mod, err := caddy.GetModule(modID) |
| 138 | if err != nil { |
| 139 | return caddy.ExitCodeFailedStartup, fmt.Errorf("getting module named '%s': %v", modID, err) |
| 140 | } |
| 141 | inst := mod.New() |
| 142 | precompress, ok := inst.(encode.Precompressed) |
| 143 | if !ok { |