mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2025-12-06 03:05:29 -05:00
prevent Tiny_httpd_dir.config from being built by hand; provide builder
This commit is contained in:
parent
cafa2a5420
commit
cdd7df29ac
3 changed files with 38 additions and 4 deletions
|
|
@ -5,22 +5,36 @@ module Pf = Printf
|
|||
type dir_behavior =
|
||||
| Index | Lists | Index_or_lists | Forbidden
|
||||
|
||||
type hidden = unit
|
||||
type config = {
|
||||
mutable download: bool;
|
||||
mutable dir_behavior: dir_behavior;
|
||||
mutable delete: bool;
|
||||
mutable upload: bool;
|
||||
mutable max_upload_size: int;
|
||||
_rest: hidden
|
||||
}
|
||||
|
||||
let default_config () : config =
|
||||
let default_config_ : config =
|
||||
{ download=true;
|
||||
dir_behavior=Forbidden;
|
||||
delete=false;
|
||||
upload=false;
|
||||
max_upload_size = 10 * 1024 * 1024;
|
||||
_rest=();
|
||||
}
|
||||
|
||||
let default_config () = default_config_
|
||||
let config
|
||||
?(download=default_config_.download)
|
||||
?(dir_behavior=default_config_.dir_behavior)
|
||||
?(delete=default_config_.delete)
|
||||
?(upload=default_config_.upload)
|
||||
?(max_upload_size=default_config_.max_upload_size)
|
||||
() : config =
|
||||
{ download; dir_behavior; delete; upload; max_upload_size;
|
||||
_rest=()}
|
||||
|
||||
let contains_dot_dot s =
|
||||
try
|
||||
String.iteri
|
||||
|
|
|
|||
|
|
@ -23,7 +23,12 @@ type dir_behavior =
|
|||
| Forbidden
|
||||
(** Forbid access to directory. This is suited for serving assets, for example. *)
|
||||
|
||||
(** configuration for static file handlers *)
|
||||
type hidden
|
||||
(** Type used to prevent users from building a config directly.
|
||||
Use {!default_config} or {!config} instead. *)
|
||||
|
||||
(** configuration for static file handlers. This might get
|
||||
more fields over time. *)
|
||||
type config = {
|
||||
mutable download: bool;
|
||||
(** Is downloading files allowed? *)
|
||||
|
|
@ -40,6 +45,9 @@ type config = {
|
|||
mutable max_upload_size: int;
|
||||
(** If {!upload} is true, this is the maximum size in bytes for
|
||||
uploaded files. *)
|
||||
|
||||
_rest: hidden;
|
||||
(** Just ignore this field. *)
|
||||
}
|
||||
|
||||
(** default configuration: [
|
||||
|
|
@ -51,6 +59,17 @@ type config = {
|
|||
}] *)
|
||||
val default_config : unit -> config
|
||||
|
||||
val config :
|
||||
?download:bool ->
|
||||
?dir_behavior:dir_behavior ->
|
||||
?delete:bool ->
|
||||
?upload:bool ->
|
||||
?max_upload_size:int ->
|
||||
unit ->
|
||||
config
|
||||
(** Build a config from {!default_config}.
|
||||
@since NEXT_RELEASE *)
|
||||
|
||||
(** [add_dirpath ~config ~dir ~prefix server] adds route handle to the
|
||||
[server] to serve static files in [dir] when url starts with [prefix],
|
||||
using the given configuration [config]. *)
|
||||
|
|
|
|||
|
|
@ -20,8 +20,9 @@ let parse_size s : int =
|
|||
with _ -> raise (Arg.Bad "invalid size (expected <int>[kM]?)")
|
||||
|
||||
let main () =
|
||||
let config = D.default_config() in
|
||||
config.dir_behavior <- Index_or_lists; (* keep old behavior *)
|
||||
let config =
|
||||
D.config ~dir_behavior:Index_or_lists ()
|
||||
in
|
||||
let dir_ = ref "." in
|
||||
let addr = ref "127.0.0.1" in
|
||||
let port = ref 8080 in
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue