geochan/src/db.ml

41 lines
1.2 KiB
OCaml
Raw Normal View History

let db_root = App.data_dir
let () =
match Bos.OS.Dir.create (Fpath.v db_root) with
| Ok true -> Dream.log "created %s" db_root
| Ok false -> Dream.log "%s already exists" db_root
| Error (`Msg _) ->
Dream.warning (fun log -> log "error when creating %s" db_root)
let db = Filename.concat db_root "permap.db"
2022-02-18 03:24:23 +01:00
let db_uri = Format.sprintf "sqlite3://%s" db
2021-12-22 11:27:53 +01:00
let random_state = Random.State.make_self_init ()
module Db =
2022-02-18 03:24:23 +01:00
(val Caqti_blocking.connect (Uri.of_string db_uri) |> Caqti_blocking.or_fail)
2021-12-22 11:27:53 +01:00
2022-02-21 12:17:16 +01:00
let () =
let set_foreign_keys_on =
Caqti_request.exec Caqti_type.unit "PRAGMA foreign_keys = ON;"
in
if Result.is_error (Db.exec set_foreign_keys_on ()) then
Dream.error (fun log -> log "can't et foreign_keys on")
2021-12-22 11:27:53 +01:00
(* TODO do image validation: length and MIME types with conan*)
(* TODO do the same for text input: check length, forbidden chars and have a forbidden words filter*)
let is_valid_image _content = true
2022-02-18 03:24:23 +01:00
let () =
let query =
Caqti_request.exec Caqti_type.unit
"CREATE TABLE IF NOT EXISTS dream_session (id TEXT PRIMARY KEY, label \
TEXT NOT NULL, expires_at REAL NOT NULL, payload TEXT NOT NULL);"
in
match Db.exec query () with
| Ok () -> ()
| Error _e ->
Format.eprintf "db error@\n";
exit 1