package ocsigenserver
A full-featured and extensible Web server
Install
Dune Dependency
Authors
Maintainers
Sources
5.0.0.tar.gz
md5=ac7f9fcf1aced530061ceb4c76efe475
sha512=5691d1cc53725466bf0548fdaa8b4b624b9ac20aa41152f61020da05696a2d0e3cd010d9d72aa60d55216ca4b1b3938573e00c7d922e034d1080508ec46b47dd
doc/src/redirectmod/redirectmod.ml.html
Source file redirectmod.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
(* Ocsigen * http://www.ocsigen.org * Module redirectmod.ml * Copyright (C) 2007 Vincent Balat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, with linking exception; * either version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) (* Define page redirections in the configuration file *) let section = Lwt_log.Section.make "ocsigen:ext:redirectmod" (* The table of redirections for each virtual server *) type redirection = { r_regexp : Pcre.regexp ; r_dest : string ; r_full : [`Yes | `No | `Maybe] ; r_temp : bool } let create_redirection ?(full = `Yes) ?(temporary = false) ~regexp r_dest = let r_regexp = Pcre.regexp ("^" ^ regexp ^ "$") in { r_regexp ; r_dest ; r_full = full ; r_temp = temporary } let attempt_redir { r_regexp ; r_dest ; r_full ; r_temp } _err ri () = Lwt_log.ign_info ~section "Is it a redirection?"; let redir = let find full = Ocsigen_extensions.find_redirection r_regexp full r_dest ri in match r_full with | `Yes -> find true | `No -> find false | `Maybe -> try find false with Ocsigen_extensions.Not_concerned -> find true in Lwt_log.ign_info_f ~section "YES! %s redirection to: %s" (if r_temp then "Temporary " else "Permanent ") redir; Lwt.return @@ Ocsigen_extensions.Ext_found (fun () -> Lwt.return @@ Ocsigen_response.make @@ let headers = Cohttp.Header.(init_with "Location" redir) and status = if r_temp then `Found else `Moved_permanently in Cohttp.Response.make ~status ~headers ()) (** The function that will generate the pages from the request *) let gen dir = function | Ocsigen_extensions.Req_found _ -> Lwt.return Ocsigen_extensions.Ext_do_nothing | Ocsigen_extensions.Req_not_found (err, {Ocsigen_extensions.request_info; _}) -> Lwt.catch (attempt_redir dir err request_info) @@ function | Ocsigen_extensions.Not_concerned -> Lwt.return (Ocsigen_extensions.Ext_next err) | e -> Lwt.fail e let parse_config config_elem = let regexp = ref None and dest = ref "" and mode = ref `Yes and temporary = ref false in Ocsigen_extensions.( Configuration.process_element ~in_tag:"host" ~other_elements:(fun t _ _ -> raise (Bad_config_tag_for_extension t)) ~elements:[ Configuration.element ~name:"redirect" ~attributes:[ Configuration.attribute ~name:"regexp" (fun s -> regexp := Some ("^" ^ s ^ "$"); mode := `Maybe); Configuration.attribute ~name:"fullurl" (fun s -> regexp := Some s; mode := `Yes); Configuration.attribute ~name:"suburl" (fun s -> regexp := Some s; mode := `No); Configuration.attribute ~name:"dest" ~obligatory:true (fun s -> dest := s); Configuration.attribute ~name:"temporary" (function "temporary" -> temporary := true | _ -> ()); ] ()] config_elem ); match !regexp with | None -> Ocsigen_extensions.badconfig "Missing attribute regexp for <redirect>" | Some regexp -> gen (create_redirection ~full:!mode ~regexp ~temporary:!temporary !dest) let () = Ocsigen_extensions.register ~name:"redirectmod" ~fun_site:(fun _ _ _ _ _ _ -> parse_config) () let redirection = Ocsigen_server.Site.Config.key () let extension = Ocsigen_server.Site.create_extension (fun {Ocsigen_server.Site.Config.accessor} -> match accessor redirection with | Some redirection -> gen redirection | None -> failwith "Redirectmod.redirection not set")
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>