matitaEngine.mli \
matitaExcPp.mli \
matitaInit.mli \
- matitaAuthentication.mli \
matitaFilesystem.mli \
+ matitaAuthentication.mli \
$(NULL)
MAINCMLI = \
matitaclean.mli \
matitaScriptLexer.cmo: SYNTAXOPTIONS = -pp "camlp5o -I $(UTF8DIR) -I $(ULEXDIR) pa_extend.cmo pa_ulex.cma pa_unicode_macro.cma -loc loc"
-matitaAuthentication.cmi: matitaAuthentication.mli
+matitaFilesystem.cmi: matitaFilesystem.mli
$(H)echo " OCAMLC $<"
$(H)$(OCAMLC) $(WPKGS) -c $<
-matitaAuthentication.cmo: matitaAuthentication.ml
+matitaFilesystem.cmo: matitaFilesystem.ml
$(H)echo " OCAMLC $<"
$(H)$(OCAMLC) $(WPKGS) -c $<
-matitaFilesystem.cmi: matitaFilesystem.mli
+matitaAuthentication.cmi: matitaAuthentication.mli
$(H)echo " OCAMLC $<"
$(H)$(OCAMLC) $(WPKGS) -c $<
-matitaFilesystem.cmo: matitaFilesystem.ml
+matitaAuthentication.cmo: matitaAuthentication.ml
$(H)echo " OCAMLC $<"
$(H)$(OCAMLC) $(WPKGS) -c $<
let _ = lookup_user uid in
raise (UsernameCollision uid)
with Not_found ->
+ MatitaFilesystem.checkout uid;
user_tbl := (uid,(pw,None))::!user_tbl;
serialize ()
;;
* http://helm.cs.unibo.it/
*)
+exception SvnError of string;;
+
let exec_process cmd =
let (stdout, stdin, stderr) as chs = Unix.open_process_full cmd [||] in
let outlines = ref [] in
let rt_dir = Helm_registry.get "matita.rt_base_dir" in
let repo = Helm_registry.get "matita.weblib" in
- let errno, outstr =
- exec_process ("svn co " ^ repo ^ " " ^ rt_dir ^ "/" ^ user ^ "/scripts")
+ let errno, outstr = exec_process
+ ("svn co " ^ repo ^ " " ^ rt_dir ^ "/users/" ^ user ^ "/scripts")
+ in
+ if errno = 0 then ()
+ else raise (SvnError outstr)
+
+let html_of_library uid =
+ let i = ref 0 in
+ let newid () = incr i; ("node" ^ string_of_int !i) in
+
+ let branch text acc =
+ let id = newid () in
+ "<span class=\"trigger\" onClick=\"showBranch(" ^ id ^ ")\">\n" ^
+ "<img src=\"treeview/closed.gif\" id=\"I" ^ id ^ "\"/>\n" ^
+ text ^ "<br/></span>\n" ^
+ "<span class=\"branch\" id=\"" ^ id ^ "\">\n" ^
+ acc ^ "\n</span>"
in
- if errno = 0 then "checkout successful!"
- else "checkout error!\n\n" ^ outstr
+ let leaf text link =
+ "<img src=\"treeview/doc.gif\"/>\n" ^
+ "<a href=\"" ^ link ^ "\">" ^ text ^ "</a><br/>"
+ in
+
+ let rec aux path =
+ let dirlist = Array.to_list (Sys.readdir path) in
+ let subdirs = List.filter Sys.is_directory dirlist in
+ let scripts =
+ List.filter (fun x ->
+ try
+ let i = String.rindex x '.' in
+ not (Sys.is_directory x) && (String.sub x i 3 = ".ma")
+ with Not_found | Invalid_argument _ -> false) dirlist in
+ let subdirtags =
+ String.concat "\n" (List.map (fun x -> aux (path ^ "/" ^ x)) subdirs) in
+ let scripttags =
+ String.concat "\n"
+ (List.map (fun x -> leaf x (path ^ "/" ^ x)) scripts)
+ in
+ branch (Filename.basename path) (subdirtags ^ "\n" ^ scripttags)
+ in
+
+ let basedir = (Helm_registry.get "matita.rt_base_dir") ^ "/lib/" ^ uid ^ "/" in
+ let res = aux basedir in
+ prerr_endline "BEGIN TREE";prerr_endline res;prerr_endline "END TREE";
+ res
+;;
-val checkout : string -> string
+exception SvnError of string;;
+
+val checkout : string -> unit
+
+val html_of_library : string -> string
(try
MatitaAuthentication.add_user uid userpw;
env#set_output_header_field "Location" "/index.html"
- with MatitaAuthentication.UsernameCollision _ ->
- cgi#set_header
- ~cache:`No_cache
- ~content_type:"text/html; charset=\"utf-8\""
- ();
- cgi#out_channel#output_string
- "<html><head></head><body>Error: User id collision!</body></html>");
+ with
+ | MatitaAuthentication.UsernameCollision _ ->
+ cgi#set_header
+ ~cache:`No_cache
+ ~content_type:"text/html; charset=\"utf-8\""
+ ();
+ cgi#out_channel#output_string
+ "<html><head></head><body>Error: User id collision!</body></html>"
+ | MatitaFilesystem.SvnError msg ->
+ cgi#set_header
+ ~cache:`No_cache
+ ~content_type:"text/html; charset=\"utf-8\""
+ ();
+ cgi#out_channel#output_string
+ ("<html><head></head><body><p>Error: Svn checkout failed!<p><p><textarea>"
+ ^ msg ^ "</textarea></p></body></html>"));
cgi#out_channel#commit_work()
;;
let cgi = Netcgi1_compat.Netcgi_types.of_compat_activation cgi in
let env = cgi#environment in
- prerr_endline "1";
assert (cgi#arguments <> []);
let uid = cgi#argument_value "userid" in
let userpw = cgi#argument_value "password" in
- prerr_endline ("2: user = " ^ uid);
let pw,_ = MatitaAuthentication.lookup_user uid in
- prerr_endline "3";
if pw = userpw then
begin
- prerr_endline "4";
+ let _ = MatitaFilesystem.html_of_library uid in
let sid = MatitaAuthentication.create_session uid in
(* let cookie = Netcgi.Cookie.make "session" (Uuidm.to_string sid) in
cgi#set_header ~set_cookies:[cookie] (); *)
end
else
begin
+ prerr_endline ("ERROR: received " ^ userpw ^ "but the password is " ^ pw);
cgi#set_header
~cache:`No_cache
~content_type:"text/html; charset=\"utf-8\""
; "logout", do_logout ]
() in
MatitaInit.initialize_all ();
- prerr_endline (MatitaFilesystem.checkout "ricciott");
MatitaAuthentication.deserialize ();
Netplex_main.startup
parallelizer