diff --git a/src/database.ml b/src/database.ml deleted file mode 100644 index 2bc209bc..00000000 --- a/src/database.ml +++ /dev/null @@ -1,32 +0,0 @@ -(* TODO - - GNU Taler db-events? - it seems caqti/pgx does not support it *) - -let on_ok req () = - let open Vif.Response.Syntax in - let* () = - Vif.Response.add ~field:"content-type" "text/plain; charset= utf-8" - in - let* () = - Vif.Response.with_string req (Fmt.str "activate_signing_key done~~@.") - in - Vif.Response.respond `OK - -let on_error req err = - (* TODO be sure to not leak private data in error messages *) - let open Vif.Response.Syntax in - let str = Fmt.str "Database error: %a." Caqti_error.pp err in - Logs.err (fun m -> m "%s" str); - let* () = Vif.Response.with_string req str in - Vif.Response.respond `Internal_server_error - -(* TODO master_sig *) -let dummy_master_sig = - Option.some @@ Crypto.EddsaSignature.of_octets (String.make 64 '\x00') - -let test_activate req server _ = - let db_conn = Vif.Server.device Devices.db_connection server in - let secmod_signkey = Vif.Server.device Devices.secmod_signkey server in - let sm_key = Secmod_signkey.get_sm_key secmod_signkey in - let res = Pg.activate_signing_key db_conn sm_key in - Result.fold ~ok:(on_ok req) ~error:(on_error req) res diff --git a/src/pg.ml b/src/pg.ml index 86225798..1295ad25 100644 --- a/src/pg.ml +++ b/src/pg.ml @@ -1,7 +1,11 @@ (* TODO + how to fix postgres/caqti tuple type? try something with OID? - need to add boilerplate in each query for amounts *) + need to add boilerplate in each query for amounts + + GNU Taler db-events? + it seems caqti/pgx does not support it *) open Crypto @@ -101,10 +105,18 @@ let activate_signing_key = expire_legal, master_sig) VALUES ($1, $2, $3, $4, $5)" in fun (module Conn : CONN) - Signkey.{ pub; priv= _; stamp_start; stamp_expire; stamp_end; master_sig } + ~master_sig + Signkey. + { + pub; + priv= _; + stamp_start; + stamp_expire; + stamp_end; + master_sig= master_sig_opt; + } -> - (* TODO master_sig *) - let master_sig = master_sig |> Option.get in + assert (master_sig_opt = Some master_sig); Conn.exec insert_signkey (pub, stamp_start, stamp_expire, stamp_end, master_sig) @@ -136,6 +148,7 @@ let add_denomination_key = ($16,$17), $18)" in fun (module Conn : CONN) + ~master_sig Denomination. { pub; @@ -152,11 +165,10 @@ let add_denomination_key = fee_refund; age_mask; h_pub; - master_sig; + master_sig= master_sig_opt; } -> - (* TODO master_sig *) - let master_sig = master_sig |> Option.get in + assert (master_sig_opt = Some master_sig); Conn.exec denomination_insert ( h_pub, pub, diff --git a/src/secmod_denom.ml b/src/secmod_denom.ml index 3de76e66..f4fc2ac6 100644 --- a/src/secmod_denom.ml +++ b/src/secmod_denom.ml @@ -20,7 +20,9 @@ let add_master_signatures conn t l = | None -> Error "secmod_denom failure: denomination hash not found." | Some denom -> let denom = { denom with master_sig= Some master_sig } in - let* () = Pg.add_denomination_key conn denom |> unwrap_err_caqti in + let* () = + Pg.add_denomination_key conn ~master_sig denom |> unwrap_err_caqti + in Hashtbl.replace t.denom_ht h_denom_pub denom; Ok ()) l diff --git a/src/secmod_signkey.ml b/src/secmod_signkey.ml index ccff6894..356212f0 100644 --- a/src/secmod_signkey.ml +++ b/src/secmod_signkey.ml @@ -24,7 +24,9 @@ let add_master_signatures conn t l = | None -> Error "secmod_signkey failure: public key not found." | Some signkey -> let signkey = { signkey with master_sig= Some master_sig } in - let* () = Pg.activate_signing_key conn signkey |> unwrap_err_caqti in + let* () = + Pg.activate_signing_key conn ~master_sig signkey |> unwrap_err_caqti + in Hashtbl.replace t.signkey_ht pub signkey; Ok ()) l