Fixed to match ChriS's API changes to mod_caml.
[cocanwiki.git] / scripts / lib / cocanwiki.ml
index 553c03a..33eb3b5 100644 (file)
@@ -1,7 +1,7 @@
 (* COCANWIKI - a wiki written in Objective CAML.
  * Written by Richard W.M. Jones <rich@merjis.com>.
  * Copyright (C) 2004 Merjis Ltd.
- * $Id: cocanwiki.ml,v 1.2 2004/10/30 10:16:10 rich Exp $
+ * $Id: cocanwiki.ml,v 1.5 2005/03/31 14:24:04 rich Exp $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -53,7 +53,6 @@ type permissions_t = CanView | CanEdit | CanManageUsers | CanManageContacts
 type prefs_t = {
   email : string option;               (* Email address. *)
   email_notify : bool;                 (* Email notification. *)
-  diff_sidebyside : bool;              (* Shows diffs side-by-side. *)
 }
 
 (* The "user object". *)
@@ -105,7 +104,13 @@ let register_script ?(restrict = []) ?(anonymous = true) run =
        *)
        let hostid, hostname, canonical_hostname, edit_anon, view_anon =
         let hostname = try Request.hostname r
-        with Not_found -> failwith "No ``Host:'' header in request" in
+        with Not_found ->
+          error ~back_button:true
+            ~title:"Browser problem" q
+            ("Your browser didn't send a \"Host\" header as part of " ^
+             "the HTTP request.  Unfortunately this web server cannot " ^
+             "handle HTTP requests without a \"Host\" header.");
+          return () in
         let hostname = String.lowercase hostname in
 
         let sth =
@@ -123,8 +128,13 @@ let register_script ?(restrict = []) ?(anonymous = true) run =
              | _ -> assert false)
         with
             Not_found ->
-              failwith ("Hostname ``" ^ hostname ^ "'' not found in " ^
-                        "the hosts/hostnames tables in the database.") in
+              error ~back_button:true
+                ~title:"Unknown website" q
+                ("No website called \"" ^ hostname ^ "\" can be found.  " ^
+                 "If you are the administrator of this site, check that " ^
+                 "the hostname is listed in the \"hostnames\" table " ^
+                 "in the database.");
+              return () in
 
        (* Create the host object. *)
        let host = { hostname = hostname;
@@ -144,8 +154,8 @@ let register_script ?(restrict = []) ?(anonymous = true) run =
              *)
             if q#param_exists "cookie" then (
               let value = q#param "cookie" in
-              let cookie = Cookie.cookie ~name:"auth" ~value ~path:"/" () in
-              Table.set (Request.headers_out r) "Set-Cookie" cookie#as_string;
+              let cookie = Cookie.cookie "auth" value ~path:"/" in
+              Table.set (Request.headers_out r) "Set-Cookie" cookie#to_string;
               value
             ) else (
               (* Normal cookie, from the headers. *)
@@ -161,7 +171,7 @@ let register_script ?(restrict = []) ?(anonymous = true) run =
               "select u.id, u.name, u.can_edit, u.can_manage_users,
                        u.can_manage_contacts, u.can_manage_site,
                        u.can_edit_global_css, u.can_import_mail,
-                       u.email, u.email_notify, u.diff_sidebyside
+                       u.email, u.email_notify
                   from usercookies uc, users u
                  where uc.cookie = ? and uc.userid = u.id and u.hostid = ?" in
           sth#execute [`String cookie; `Int hostid];
@@ -170,8 +180,7 @@ let register_script ?(restrict = []) ?(anonymous = true) run =
                  `Bool can_edit; `Bool can_manage_users;
                  `Bool can_manage_contacts; `Bool can_manage_site;
                  `Bool can_edit_global_css; `Bool can_import_mail;
-                 (`Null | `String _) as email; `Bool email_notify;
-                 `Bool diff_sidebyside ] ->
+                 (`Null | `String _) as email; `Bool email_notify ] ->
                  (* Every logged in user can view. *)
                  let perms = [CanView] in
                  let perms =
@@ -198,8 +207,7 @@ let register_script ?(restrict = []) ?(anonymous = true) run =
                        `Null -> None
                      | `String email -> Some email in
                  let prefs = { email = email;
-                               email_notify = email_notify;
-                               diff_sidebyside = diff_sidebyside } in
+                               email_notify = email_notify; } in
                  User (userid, name, perms, prefs)
              | _ -> assert false)
         with