b
This commit is contained in:
commit
6fd066773f
37 changed files with 1537 additions and 0 deletions
94
src/app.ml
Normal file
94
src/app.ml
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
module App_id = struct
|
||||
let qualifier = "org"
|
||||
|
||||
let organization = "pellest"
|
||||
|
||||
let application = "pellest"
|
||||
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 pellest"
|
||||
Loading…
Add table
Add a link
Reference in a new issue