95 lines
2.5 KiB
OCaml
95 lines
2.5 KiB
OCaml
module App_id = struct
|
|
let qualifier = "org"
|
|
|
|
let organization = "Dromloc"
|
|
|
|
let application = "dromloc"
|
|
end
|
|
|
|
module Project_dirs = Directories.Project_dirs (App_id)
|
|
|
|
let data_dir =
|
|
match Project_dirs.data_dir with
|
|
| None -> failwith "can't compute data directory"
|
|
| Some data_dir -> data_dir
|
|
|
|
let config_dir =
|
|
match Project_dirs.config_dir with
|
|
| None -> failwith "can't compute configuration directory"
|
|
| Some config_dir -> config_dir
|
|
|
|
let config =
|
|
let filename = Filename.concat config_dir "config.scfg" in
|
|
if not @@ Sys.file_exists filename then
|
|
failwith
|
|
@@ Format.sprintf "configuration file `%s` does not exist, please create it"
|
|
filename;
|
|
Dream.log "config file: %s" filename;
|
|
match Scfg.Parse.from_file filename with
|
|
| Error e -> failwith e
|
|
| Ok config -> config
|
|
|
|
let open_registration =
|
|
match Scfg.Query.get_dir "open_registration" config with
|
|
| None -> true
|
|
| Some open_registration -> (
|
|
match Scfg.Query.get_param 0 open_registration with
|
|
| Error e -> failwith e
|
|
| Ok "true" -> true
|
|
| Ok "false" -> false
|
|
| Ok _unknown ->
|
|
failwith "invalid `open_registration` value in configuration file" )
|
|
|
|
let () = Dream.log "open_registration: %b" open_registration
|
|
|
|
let port =
|
|
match Scfg.Query.get_dir "port" config with
|
|
| None -> 8080
|
|
| Some port -> (
|
|
match Scfg.Query.get_param 0 port with
|
|
| Error e -> failwith e
|
|
| Ok n -> (
|
|
try
|
|
let n = int_of_string n in
|
|
if n < 0 then raise (Invalid_argument "negative port number");
|
|
n
|
|
with Invalid_argument _msg ->
|
|
failwith "invalid `port` value in configuration file" ) )
|
|
|
|
let () = Dream.log "port: %d" port
|
|
|
|
let hostname =
|
|
match Scfg.Query.get_dir "hostname" config with
|
|
| None -> Format.sprintf "localhost:%d" port
|
|
| Some hostname ->
|
|
Result.fold ~error:failwith ~ok:Fun.id (Scfg.Query.get_param 0 hostname)
|
|
|
|
let () = Dream.log "hostname: %s" hostname
|
|
|
|
let log =
|
|
match Scfg.Query.get_dir "log" config with
|
|
| None -> true
|
|
| Some log -> (
|
|
match Scfg.Query.get_param 0 log with
|
|
| Error e -> failwith e
|
|
| Ok "true" -> true
|
|
| Ok "false" -> false
|
|
| Ok _unknown -> failwith "invalid `log` value in configuration file" )
|
|
|
|
let () = Dream.log "log: %b" log
|
|
|
|
let get_dirs name =
|
|
let dirs = Scfg.Query.get_dirs name config in
|
|
List.map
|
|
(fun dir ->
|
|
Result.fold ~error:failwith ~ok:Fun.id (Scfg.Query.get_param 0 dir) )
|
|
dirs
|
|
|
|
let random_state = Random.State.make_self_init ()
|
|
|
|
let () = Random.set_state random_state
|
|
|
|
let about =
|
|
(* TODO read from about.txt *)
|
|
"This is dromloc"
|