X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matitaB%2Fmatita%2FmatitaAuthentication.ml;h=1b9a91b7160024d8debd958a1b70ee6dcd094cac;hb=d8ae533d041cb600993ab2957111c105b6ded21d;hp=06e7d9451b719144ecb7ca613da3650b6bcf40a6;hpb=13935d33cc0899b9555648a4d49586e17274c748;p=helm.git diff --git a/matitaB/matita/matitaAuthentication.ml b/matitaB/matita/matitaAuthentication.ml index 06e7d9451..1b9a91b71 100644 --- a/matitaB/matita/matitaAuthentication.ml +++ b/matitaB/matita/matitaAuthentication.ml @@ -31,7 +31,7 @@ type user = string * (string * session_id option) let user_tbl = (ref [] : user list ref) (* session table: (user id, session id), matita status *) -type session = (string * session_id) * MatitaEngine.status +type session = session_id * (MatitaEngine.status * MatitaEngine.status list) let session_tbl = (ref [] : session list ref) @@ -39,24 +39,40 @@ exception UsernameCollision of string let lookup_user uid = List.assoc uid !user_tbl -let create_session uid status = +let create_session uid = + let status = new MatitaEngine.status (Some uid) "cic:/matita" in + let history = [status] in let pw,sid = List.assoc uid !user_tbl in let clean_utbl = List.remove_assoc uid !user_tbl in let new_session = Uuidm.create `V4 in user_tbl := (uid,(pw,Some new_session))::clean_utbl; let clean_stbl = match sid with | Some sid' -> - List.remove_assoc (uid,sid') !session_tbl + List.remove_assoc sid' !session_tbl | _ -> !session_tbl - in session_tbl := ((uid,new_session),status)::clean_stbl + in + session_tbl := (new_session,(status,history))::clean_stbl; + new_session ;; +let get_status sid = fst (List.assoc sid !session_tbl) + +let get_history sid = snd (List.assoc sid !session_tbl) + +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 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 (uid,sid) !session_tbl + session_tbl := List.remove_assoc sid !session_tbl ;; let remove_user uid =