diff --git a/src/extensions/authbasic.ml b/src/extensions/authbasic.ml index ea2670dbd..1c8e005d7 100644 --- a/src/extensions/authbasic.ml +++ b/src/extensions/authbasic.ml @@ -111,4 +111,7 @@ let () = () (** Instruction for static linking without config file: *) -let run ~realm ~auth () _ _ _ = gen ~realm ~auth +let instruction ~realm ~auth () _ _ _ = gen ~realm ~auth + +let run ?site ~realm ~auth () = + Ocsigen_server.Site.register ?site (instruction ~realm ~auth ()) diff --git a/src/extensions/authbasic.mli b/src/extensions/authbasic.mli index 134d0250d..118fb5970 100644 --- a/src/extensions/authbasic.mli +++ b/src/extensions/authbasic.mli @@ -59,7 +59,12 @@ val register_basic_authentication_method : (Xml.xml -> auth) -> unit from the point of view of plugin developers and is totally transparent to the plugin. *) -val run : realm:string -> auth:auth -> unit -> Ocsigen_server.Site.instruction +val run : + ?site:Ocsigen_server.Site.t + -> realm:string + -> auth:auth + -> unit + -> unit (** [run ~realm ~auth ()] makes it possible to use this extension without configuration file. *) diff --git a/src/extensions/cors.ml b/src/extensions/cors.ml index 273f2a059..2de2e5d28 100644 --- a/src/extensions/cors.ml +++ b/src/extensions/cors.ml @@ -156,7 +156,11 @@ let () = ~fun_site:(fun _ _ _ -> parse_config) () -let run ?credentials ?max_age ?exposed_headers ?methods () _ _ _ = +let instruction ?credentials ?max_age ?exposed_headers ?methods () _ _ _ = let credentials = Ocsigen_lib.Option.get' false credentials in let exposed_headers = Ocsigen_lib.Option.get' [] exposed_headers in main {credentials; methods; max_age; exposed_headers} + +let run ?site ?credentials ?max_age ?exposed_headers ?methods () = + Ocsigen_server.Site.register ?site + (instruction ?credentials ?max_age ?exposed_headers ?methods ()) diff --git a/src/extensions/cors.mli b/src/extensions/cors.mli index 2b873adf8..a604b50e3 100644 --- a/src/extensions/cors.mli +++ b/src/extensions/cors.mli @@ -1,7 +1,8 @@ val run : - ?credentials:bool + ?site:Ocsigen_server.Site.t + -> ?credentials:bool -> ?max_age:int -> ?exposed_headers:string list -> ?methods:Cohttp.Code.meth list -> unit - -> Ocsigen_server.Site.instruction + -> unit diff --git a/src/extensions/deflatemod.ml b/src/extensions/deflatemod.ml index 76fe927ba..ed7ce96e3 100644 --- a/src/extensions/deflatemod.ml +++ b/src/extensions/deflatemod.ml @@ -366,4 +366,7 @@ let () = ~fun_site:(fun _ _ _ _ _ _ -> parse_config) ~init_fun:parse_global_config () -let run ~mode () _ _ _ = filter mode +let instruction ~mode () _ _ _ = filter mode + +let run ?site ~mode () = + Ocsigen_server.Site.register ?site (instruction ~mode ()) diff --git a/src/extensions/deflatemod.mli b/src/extensions/deflatemod.mli index abeb5785f..b9e3a7db7 100644 --- a/src/extensions/deflatemod.mli +++ b/src/extensions/deflatemod.mli @@ -7,6 +7,7 @@ val set_buffer_size : int -> unit type filter = [`Type of string option * string option | `Extension of string] val run : - mode:[`All_but of filter list | `Only of filter list] + ?site:Ocsigen_server.Site.t + -> mode:[`All_but of filter list | `Only of filter list] + -> unit -> unit - -> Ocsigen_server.Site.instruction diff --git a/src/extensions/outputfilter.ml b/src/extensions/outputfilter.ml index 08167bb0d..30cc1c506 100644 --- a/src/extensions/outputfilter.ml +++ b/src/extensions/outputfilter.ml @@ -116,5 +116,8 @@ let () = ~fun_site:(fun _ _ _ _ _ _ -> parse_config) () -let run ~mode () _ _ _ = +let instruction ~mode () _ _ _ = match mode with `Code c -> gen_code c | #header_filter as f -> gen f + +let run ?site ~mode () = + Ocsigen_server.Site.register ?site (instruction ~mode ()) diff --git a/src/extensions/outputfilter.mli b/src/extensions/outputfilter.mli index d33c9d07b..f1d4ffa40 100644 --- a/src/extensions/outputfilter.mli +++ b/src/extensions/outputfilter.mli @@ -1,7 +1,8 @@ val run : - mode: - [ `Rewrite of Ocsigen_header.Name.t * Re.Pcre.regexp * string - | `Add of Ocsigen_header.Name.t * string * bool option - | `Code of Cohttp.Code.status ] + ?site:Ocsigen_server.Site.t + -> mode: + [ `Rewrite of Ocsigen_header.Name.t * Re.Pcre.regexp * string + | `Add of Ocsigen_header.Name.t * string * bool option + | `Code of Cohttp.Code.status ] + -> unit -> unit - -> Ocsigen_server.Site.instruction diff --git a/src/extensions/redirectmod.ml b/src/extensions/redirectmod.ml index 1c65647fd..9912d61e5 100644 --- a/src/extensions/redirectmod.ml +++ b/src/extensions/redirectmod.ml @@ -112,4 +112,7 @@ let () = ~fun_site:(fun _ _ _ _ _ _ -> parse_config) () -let run ~redirection () _ _ _ = gen redirection +let instruction ~redirection () _ _ _ = gen redirection + +let run ?site ~redirection () = + Ocsigen_server.Site.register ?site (instruction ~redirection ()) diff --git a/src/extensions/redirectmod.mli b/src/extensions/redirectmod.mli index e0f0ecb2d..4c4b15ce9 100644 --- a/src/extensions/redirectmod.mli +++ b/src/extensions/redirectmod.mli @@ -10,4 +10,4 @@ val create_redirection : -> string -> redirection -val run : redirection:redirection -> unit -> Ocsigen_server.Site.instruction +val run : ?site:Ocsigen_server.Site.t -> redirection:redirection -> unit -> unit diff --git a/src/extensions/revproxy.ml b/src/extensions/revproxy.ml index 3143bccd2..79c5d3b43 100644 --- a/src/extensions/revproxy.ml +++ b/src/extensions/revproxy.ml @@ -197,4 +197,7 @@ let () = when sending to extensions! *) () -let run ~redirection () _ _ _ = gen redirection +let instruction ~redirection () _ _ _ = gen redirection + +let run ?site ~redirection () = + Ocsigen_server.Site.register ?site (instruction ~redirection ()) diff --git a/src/extensions/revproxy.mli b/src/extensions/revproxy.mli index 2f9c86a67..7e2e5949b 100644 --- a/src/extensions/revproxy.mli +++ b/src/extensions/revproxy.mli @@ -11,4 +11,4 @@ val create_redirection : -> string -> redirection -val run : redirection:redirection -> unit -> Ocsigen_server.Site.instruction +val run : ?site:Ocsigen_server.Site.t -> redirection:redirection -> unit -> unit diff --git a/src/extensions/rewritemod.ml b/src/extensions/rewritemod.ml index a8e272f82..073cdd36a 100644 --- a/src/extensions/rewritemod.ml +++ b/src/extensions/rewritemod.ml @@ -128,10 +128,16 @@ let () = ~fun_site:(fun _ _ _ _ _ _ -> parse_config) () -let run ?(continue = false) ?(full_rewrite = false) ~regexp dest () _ _ _ = +let instruction ?(continue = false) ?(full_rewrite = false) ~regexp dest () _ _ + _ + = gen (Regexp ( Ocsigen_lib.Netstring_pcre.regexp ("^" ^ regexp ^ "$") , dest , full_rewrite )) continue + +let run ?site ?continue ?full_rewrite ~regexp dest () = + Ocsigen_server.Site.register ?site + (instruction ?continue ?full_rewrite ~regexp dest ()) diff --git a/src/extensions/rewritemod.mli b/src/extensions/rewritemod.mli index f8cec5173..ba60ae605 100644 --- a/src/extensions/rewritemod.mli +++ b/src/extensions/rewritemod.mli @@ -2,9 +2,10 @@ val section : Lwt_log_core.section (** use Lwt_log.Section.set_level in order to debug *) val run : - ?continue:bool + ?site:Ocsigen_server.Site.t + -> ?continue:bool -> ?full_rewrite:bool -> regexp:string -> string -> unit - -> Ocsigen_server.Site.instruction + -> unit diff --git a/src/extensions/staticmod.ml b/src/extensions/staticmod.ml index a6af87930..a9bd94ef9 100644 --- a/src/extensions/staticmod.ml +++ b/src/extensions/staticmod.ml @@ -281,7 +281,7 @@ let () = (* Registration for static linking: *) let preprocess s = "^" ^ s ^ "$" -let run ?dir ?regexp ?dest ?code ?cache ?root () = +let instruction ?dir ?regexp ?dest ?code ?cache ?root () = let kind = kind dir (Ocsigen_lib.Option.map (fun x -> Pcre.regexp (preprocess x)) regexp) @@ -296,3 +296,7 @@ let run ?dir ?regexp ?dest ?code ?cache ?root () = root) in fun _ _ _ -> gen ~usermode:None ?cache kind + +let run ?site ?dir ?regexp ?dest ?code ?cache ?root () = + Ocsigen_server.Site.register ?site + (instruction ?dir ?regexp ?dest ?code ?cache ?root ()) diff --git a/src/extensions/staticmod.mli b/src/extensions/staticmod.mli index dff1c1d7e..ac33141f0 100644 --- a/src/extensions/staticmod.mli +++ b/src/extensions/staticmod.mli @@ -1,15 +1,15 @@ val section : Lwt_log_core.section (** use Lwt_log.Section.set_level in order to debug *) -(** Use the following config key to set options - for a statically linked executable without configuration file: *) - val run : - ?dir:string + ?site:Ocsigen_server.Site.t + -> ?dir:string -> ?regexp:string -> ?dest:string -> ?code:string -> ?cache:int -> ?root:string -> unit - -> Ocsigen_server.Site.instruction + -> unit +(** Run static mod on a specific directory. + Call this if you want to run Ocsigen Server without configuration file. *) diff --git a/src/server/ocsigen_server.ml b/src/server/ocsigen_server.ml index 7c96bcfda..8e5983d0a 100644 --- a/src/server/ocsigen_server.ml +++ b/src/server/ocsigen_server.ml @@ -151,13 +151,8 @@ module Site = struct let path, hosts = path_and_hosts s in path @ path', hosts - let register ({s_config_info; s_children_l; _} as s) f = - let path, hosts = path_and_hosts s in - s.s_children_l <- `Instruction (f hosts s_config_info path) :: s_children_l - let create ?(config_info = Ocsigen_extensions.default_config_info ()) - ?(id = `Host (default_re_string, None)) ?charset - () + ?(id = `Host (default_re_string, None)) ?charset () = let s_id = match id with @@ -170,10 +165,7 @@ module Site = struct `Attach (parent, Ocsigen_extensions.preprocess_site_path path) in let s = - { s_id - ; s_charset = charset - ; s_config_info = config_info - ; s_children_l = [] } + {s_id; s_charset = charset; s_config_info = config_info; s_children_l = []} in (match s_id with | `Host _ -> l := s :: !l @@ -181,6 +173,14 @@ module Site = struct parent.s_children_l <- `Child s :: parent.s_children_l); s + let default_host = create () + + let register ?(site = default_host) f = + let {s_config_info; s_children_l; _} = site in + let path, hosts = path_and_hosts site in + site.s_children_l <- + `Instruction (f hosts s_config_info path) :: s_children_l + let rec dump_host path {s_children_l; _} = let f = function | `Instruction f -> f diff --git a/src/server/ocsigen_server.mli b/src/server/ocsigen_server.mli index fff04bfcc..89ae13806 100644 --- a/src/server/ocsigen_server.mli +++ b/src/server/ocsigen_server.mli @@ -45,6 +45,10 @@ module Site : sig This is equivalent to the [] or [] config file options. *) + val default_host : t + (** Defaut host. Any hostname, any port. + Will be used if you don not specify [?site]. *) + type instruction = Ocsigen_extensions.virtual_hosts -> Ocsigen_extensions.config_info @@ -53,6 +57,7 @@ module Site : sig (** Instructions are defined by extensions, and correspond to the configuration file options defined by extensions ( ...)*) - val register : t -> instruction -> unit - (** [register t s e] registers instruction [e] to be run inside site [s] *) + val register : ?site:t -> instruction -> unit + (** [register t s e] registers instruction [e] to be run inside site [s]. + Use this if you want to create an extension yourself. *) end