]> matita.cs.unibo.it Git - helm.git/commitdiff
Logout (partial work) (multi-user matita)
authorWilmer Ricciotti <ricciott@cs.unibo.it>
Wed, 15 Jun 2011 14:13:24 +0000 (14:13 +0000)
committerWilmer Ricciotti <ricciott@cs.unibo.it>
Wed, 15 Jun 2011 14:13:24 +0000 (14:13 +0000)
matitaB/matita/matitaAuthentication.ml
matitaB/matita/matitaAuthentication.mli
matitaB/matita/matitadaemon.ml
matitaB/matita/matitaweb.js
matitaB/matita/netplex.conf

index 1b9a91b7160024d8debd958a1b70ee6dcd094cac..7d6471df5b4848bade59340b548e2431e7cd4269 100644 (file)
@@ -30,8 +30,8 @@ type user = string * (string * session_id option)
 
 let user_tbl = (ref [] : user list ref)
 
-(* session table: (user id, session id), matita status *)
-type session = session_id * (MatitaEngine.status * MatitaEngine.status list)
+(* session table: session id, (user id, matita status, matita history *)
+type session = session_id * (string * MatitaEngine.status * MatitaEngine.status list)
 
 let session_tbl = (ref [] : session list ref)
 
@@ -51,28 +51,35 @@ let create_session uid =
        List.remove_assoc sid' !session_tbl
     | _ -> !session_tbl
   in 
-  session_tbl := (new_session,(status,history))::clean_stbl;
+  session_tbl := (new_session,(uid,status,history))::clean_stbl;
   new_session
 ;;
 
-let get_status sid = fst (List.assoc sid !session_tbl)
+let get_session_owner sid =
+  let uid,_,_ = List.assoc sid !session_tbl
+  in uid
 
-let get_history sid = snd (List.assoc sid !session_tbl)
+let get_status sid =
+  let _,st,_ = List.assoc sid !session_tbl
+  in st
+
+let get_history sid = 
+  let _,_,hist = List.assoc sid !session_tbl
+  in hist
 
 let set_status sid st =
-  let oldst, hist = List.assoc sid !session_tbl in
-  session_tbl := (sid,(st,hist))::(List.remove_assoc sid !session_tbl)
+  let uid, oldst, hist = List.assoc sid !session_tbl in
+  session_tbl := (sid,(uid,st,hist))::(List.remove_assoc sid !session_tbl)
    
 let set_history sid hist =
-  let st, oldhist = List.assoc sid !session_tbl in
-  session_tbl := (sid,(st,hist))::(List.remove_assoc sid !session_tbl)
-
-let logout_user uid =
-  match List.assoc uid !user_tbl with
-  | _,None -> ()
-  | pw, Some sid ->
-     user_tbl := (uid,(pw,None))::List.remove_assoc uid !user_tbl;
-     session_tbl := List.remove_assoc sid !session_tbl
+  let uid, st, oldhist = List.assoc sid !session_tbl in
+  session_tbl := (sid,(uid,st,hist))::(List.remove_assoc sid !session_tbl)
+
+let logout_user sid =
+  let uid,st,hist = List.assoc sid !session_tbl in
+  let pw,_ = List.assoc uid !user_tbl in
+  user_tbl := (uid,(pw,None))::List.remove_assoc uid !user_tbl;
+  session_tbl := List.remove_assoc sid !session_tbl
 ;;
 
 let remove_user uid =
index c1c2cf48976bb550807ff675bfeda048c7ae60f5..3bd1bc0aa7217b5eb074ec9769bacd32340f7e3a 100644 (file)
@@ -31,6 +31,8 @@ val lookup_user : string -> (string * session_id option)
 
 val create_session : string -> session_id
 
+val get_session_owner : session_id -> string
+
 val get_status : session_id -> MatitaEngine.status
 
 val get_history : session_id -> MatitaEngine.status list
@@ -39,7 +41,7 @@ val set_status : session_id -> MatitaEngine.status -> unit
 
 val set_history : session_id -> MatitaEngine.status list -> unit
 
-val logout_user : string -> unit
+val logout_user : session_id -> unit
 
 val remove_user : string -> unit
 
index 664a7301c1b727ae26816d9d7f7cb8581a87aaa4..07b03207a7ec4b7774af7bd19ad889b7019bb0ab 100644 (file)
@@ -3,6 +3,8 @@ open Http_types;;
 
 module Stack = Continuationals.Stack
 
+let rt_path () = Helm_registry.get "matita.rt_base_dir" 
+
 let utf8_length = Netconversion.ustring_length `Enc_utf8
 
 let utf8_parsed_text s floc =
@@ -251,6 +253,29 @@ let login (cgi : Netcgi1_compat.Netcgi_types.cgi_activation) =
   
 ;;
 
+let logout (cgi : Netcgi1_compat.Netcgi_types.cgi_activation) =
+  let cgi = Netcgi1_compat.Netcgi_types.of_compat_activation cgi in
+  let env = cgi#environment in
+  (try 
+    let sid = Uuidm.of_string (Netcgi.Cookie.value (env#cookie "session")) in
+    let sid = HExtlib.unopt sid in
+    MatitaAuthentication.logout_user sid;
+    cgi # set_header 
+      ~cache:`No_cache 
+      ~content_type:"text/html; charset=\"utf-8\""
+      ();
+    let text = read_file (rt_path () ^ "/logout.html") in
+    cgi#out_channel#output_string text
+  with
+  | Not_found _ -> 
+    cgi # set_header
+      ~status:`Internal_server_error
+      ~cache:`No_cache 
+      ~content_type:"text/xml; charset=\"utf-8\""
+      ());
+  cgi#out_channel#commit_work()
+;;
+
 (* returns the length of the executed text and an html representation of the
  * current metasenv*)
 let advance (cgi : Netcgi1_compat.Netcgi_types.cgi_activation) =
@@ -420,6 +445,13 @@ let start() =
       dyn_translator = (fun _ -> ""); (* not needed *)
       dyn_accept_all_conditionals = false;
     } in
+  (*let do_logout =
+    { Nethttpd_services.dyn_handler = (fun _ -> logout);
+      dyn_activation = Nethttpd_services.std_activation `Std_activation_buffered;
+      dyn_uri = None;                 (* not needed *)
+      dyn_translator = (fun _ -> ""); (* not needed *)
+      dyn_accept_all_conditionals = false;
+    } in *)
   
   let nethttpd_factory = 
     Nethttpd_plex.nethttpd_factory
@@ -427,7 +459,8 @@ let start() =
                 ; "retract", do_retract
                 ; "bottom", goto_bottom
                 ; "open", retrieve 
-                ; "login", do_login ]
+                ; "login", do_login 
+                (*; "logout", do_logout *)]
       () in
   MatitaInit.initialize_all ();
   (* test begin *)
index 0c661623bc148fe1f8614b3bb8c63b0401ae6059..423eda674bbd1ed06c54d379dd65e56b5fb78f24 100644 (file)
@@ -514,3 +514,15 @@ function readCookie(name) {
        }
        return null;
 }
+
+function delete_cookie ( cookie_name )
+{
+  var cookie_date = new Date();  // current date & time
+  cookie_date.setTime ( cookie_date.getTime() - 1 );
+  document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
+}
+
+function delete_session()
+{
+       delete_cookie("session");
+}
index a42f4c35940b1b091128e5e8d194a5cc2f569933..0728b01ca526a58bd542b73b580cd995d71e73db 100644 (file)
@@ -12,7 +12,7 @@ netplex {
       name = "http";
       address {
         type = "internet";
-        bind = "0.0.0.0:9999";  (* Port 80 on all interfaces *)
+        bind = "0.0.0.0:9999";  (* Port 9999 on all interfaces *)
       };
     };
     processor {
@@ -67,6 +67,13 @@ netplex {
             handler = "login";
           }
         };
+        (* uri {
+          path = "/logout";
+          service {
+            type = "dynamic";
+            handler = "logout";
+          }
+        };*)
       };
     };
     workload_manager {