./ct_report/coverage/mod_keystore_mnesia.COVER.html

1 -module(mod_keystore_mnesia).
2 -behaviour(mod_keystore_backend).
3
4 -export([init/2,
5 init_ram_key/1,
6 get_key/1]).
7
8 -ignore_xref([get_key/1, init/2, init_ram_key/1]).
9
10 -include("mod_keystore.hrl").
11
12 -spec init(mongooseim:host_type(), gen_mod:module_opts()) -> ok.
13 init(_HostType, _Opts) ->
14
:-(
mnesia:create_table(key,
15 [{ram_copies, [node()]},
16 {type, set},
17 {attributes, record_info(fields, key)}]),
18
:-(
mnesia:add_table_copy(key, node(), ram_copies),
19
:-(
ok.
20
21 -spec init_ram_key(ProposedKey) -> Result when
22 ProposedKey :: mod_keystore:key(),
23 Result :: {ok, ActualKey} | {error, any()},
24 ActualKey :: mod_keystore:key().
25 init_ram_key(ProposedKey) ->
26
:-(
case mnesia:transaction(fun init_ram_key_transaction/1, [ProposedKey]) of
27
:-(
{aborted, Reason} -> {error, Reason};
28
:-(
{atomic, Key} -> {ok, Key}
29 end.
30
31 init_ram_key_transaction(#key{id = KeyID} = ProposedKey) ->
32
:-(
case mnesia:wread({key, KeyID}) of
33 [#key{} = ActualKey] ->
34
:-(
ActualKey;
35 [] ->
36
:-(
mnesia:write(ProposedKey),
37
:-(
ProposedKey
38 end.
39
40 -spec get_key(ID :: mod_keystore:key_id()) -> mod_keystore:key_list().
41 get_key(ID) ->
42
:-(
case mnesia:transaction(fun mnesia:read/1, [{key, ID}]) of
43
:-(
{aborted, Reason} -> error(Reason, [ID]);
44
:-(
{atomic, []} -> [];
45
:-(
{atomic, [#key{id = ID, key = Key}]} -> [{ID, Key}]
46 end.
Line Hits Source