Fix passphrase save/recover problem

This commit is contained in:
Craig Everett 2024-11-21 13:24:50 +09:00
parent f05c86894d
commit fd85edd4f3
12 changed files with 37 additions and 31 deletions

View File

@ -3,7 +3,7 @@
{registered,[]}, {registered,[]},
{included_applications,[]}, {included_applications,[]},
{applications,[stdlib,kernel]}, {applications,[stdlib,kernel]},
{vsn,"0.1.3"}, {vsn,"0.1.4"},
{modules,[clutch,gmc_con,gmc_grids,gmc_gui,gmc_jt, {modules,[clutch,gmc_con,gmc_grids,gmc_gui,gmc_jt,
gmc_key_master,gmc_sup,gmc_v,gmc_v_netman, gmc_key_master,gmc_sup,gmc_v,gmc_v_netman,
gmc_v_wallman]}, gmc_v_wallman]},

View File

@ -3,7 +3,7 @@
%%% @end %%% @end
-module(clutch). -module(clutch).
-vsn("0.1.3"). -vsn("0.1.4").
-behavior(application). -behavior(application).
-author("Craig Everett <craigeverett@qpq.swiss>"). -author("Craig Everett <craigeverett@qpq.swiss>").
-copyright("QPQ AG <info@qpq.swiss>"). -copyright("QPQ AG <info@qpq.swiss>").

View File

@ -5,7 +5,7 @@
%%% @end %%% @end
-module(gmc_con). -module(gmc_con).
-vsn("0.1.3"). -vsn("0.1.4").
-author("Craig Everett <craigeverett@qpq.swiss>"). -author("Craig Everett <craigeverett@qpq.swiss>").
-copyright("QPQ AG <info@qpq.swiss>"). -copyright("QPQ AG <info@qpq.swiss>").
-license("GPL-3.0-or-later"). -license("GPL-3.0-or-later").
@ -63,12 +63,12 @@ show_ui(Name) ->
gen_server:cast(?MODULE, {show_ui, Name}). gen_server:cast(?MODULE, {show_ui, Name}).
-spec open_wallet(Path, Password) -> ok -spec open_wallet(Path, Phrase) -> ok
when Path :: file:filename(), when Path :: file:filename(),
Password :: string(). Phrase :: string().
open_wallet(Path, Password) -> open_wallet(Path, Phrase) ->
gen_server:cast(?MODULE, {open_wallet, Path, Password}). gen_server:cast(?MODULE, {open_wallet, Path, Phrase}).
-spec close_wallet() -> ok. -spec close_wallet() -> ok.
@ -787,17 +787,20 @@ do_make_key(Name, Seed, base58, Transform, State) ->
end. end.
do_make_key2(Name, Bin, Transform, State = #s{wallet = W}) -> do_make_key2(Name, Bin, Transform,
#wallet{poas = POAs, keys = Keys} = W, State = #s{wallet = Current, wallets = Wallets, pass = Pass}) ->
#wallet{name = WalletName, poas = POAs, keys = Keys} = Current,
T = transform(Transform), T = transform(Transform),
Seed = T(Bin), Seed = T(Bin),
Key = #key{name = KeyName, id = ID} = gmc_key_master:make_key(Name, Seed), Key = #key{name = KeyName, id = ID} = gmc_key_master:make_key(Name, Seed),
POA = #poa{name = KeyName, id = ID}, POA = #poa{name = KeyName, id = ID},
NewKeys = [Key | Keys], NewKeys = [Key | Keys],
NewPOAs = [POA | POAs], NewPOAs = [POA | POAs],
NewWallet = W#wallet{poas = NewPOAs, keys = NewKeys}, Updated = Current#wallet{poas = NewPOAs, keys = NewKeys},
RW = lists:keyfind(WalletName, #wr.name, Wallets),
ok = save_wallet(RW, Pass, Updated),
ok = gmc_gui:show(NewPOAs), ok = gmc_gui:show(NewPOAs),
State#s{wallet = NewWallet}. State#s{wallet = Updated}.
base64_decode(String) -> base64_decode(String) ->
@ -836,17 +839,19 @@ do_recover_key(Mnemonic, State) ->
State State
end. end.
do_recover_key2(Seed, State = #s{wallet = W}) -> do_recover_key2(Seed, State = #s{wallet = Current, wallets = Wallets, pass = Pass}) ->
#wallet{keys = Keys, poas = POAs} = W, #wallet{name = WalletName, keys = Keys, poas = POAs} = Current,
Recovered = #key{id = ID, name = Name} = gmc_key_master:make_key("", Seed), Recovered = #key{id = ID, name = AccName} = gmc_key_master:make_key("", Seed),
case lists:keymember(ID, #key.id, Keys) of case lists:keymember(ID, #key.id, Keys) of
false -> false ->
NewKeys = [Recovered | Keys], NewKeys = [Recovered | Keys],
POA = #poa{name = Name, id = ID}, POA = #poa{name = AccName, id = ID},
NewPOAs = [POA | POAs], NewPOAs = [POA | POAs],
ok = gmc_gui:show(NewPOAs), ok = gmc_gui:show(NewPOAs),
NewWallet = W#wallet{poas = NewPOAs, keys = NewKeys}, Updated = Current#wallet{poas = NewPOAs, keys = NewKeys},
State#s{wallet = NewWallet}; RW = lists:keyfind(WalletName, #wr.name, Wallets),
ok = save_wallet(RW, Pass, Updated),
State#s{wallet = Updated};
true -> true ->
State State
end. end.
@ -893,7 +898,7 @@ do_open_wallet(Path, Phrase, State) ->
{ok, ChainID} -> gmc_gui:chain(ChainID, Node); {ok, ChainID} -> gmc_gui:chain(ChainID, Node);
Error -> gmc_gui:trouble(Error) Error -> gmc_gui:trouble(Error)
end, end,
State#s{wallet = Recovered}; State#s{pass = Pass, wallet = Recovered};
Error -> Error ->
ok = gmc_gui:trouble(Error), ok = gmc_gui:trouble(Error),
New = default_wallet(), New = default_wallet(),

View File

@ -37,7 +37,7 @@
%%% @end %%% @end
-module(gmc_grids). -module(gmc_grids).
-vsn("0.1.3"). -vsn("0.1.4").
-author("Craig Everett <craigeverett@qpq.swiss>"). -author("Craig Everett <craigeverett@qpq.swiss>").
-copyright("QPQ AG <info@qpq.swiss>"). -copyright("QPQ AG <info@qpq.swiss>").
-license("GPL-3.0-or-later"). -license("GPL-3.0-or-later").

View File

@ -7,7 +7,7 @@
%%% @end %%% @end
-module(gmc_gui). -module(gmc_gui).
-vsn("0.1.3"). -vsn("0.1.4").
-author("Craig Everett <craigeverett@qpq.swiss>"). -author("Craig Everett <craigeverett@qpq.swiss>").
-copyright("QPQ AG <info@qpq.swiss>"). -copyright("QPQ AG <info@qpq.swiss>").
-license("GPL-3.0-or-later"). -license("GPL-3.0-or-later").

View File

@ -15,7 +15,7 @@
%%% translation library is retained). %%% translation library is retained).
-module(gmc_jt). -module(gmc_jt).
-vsn("0.1.3"). -vsn("0.1.4").
-export([read_translations/1, j/2, oneshot_j/2]). -export([read_translations/1, j/2, oneshot_j/2]).

View File

@ -8,7 +8,7 @@
%%% @end %%% @end
-module(gmc_key_master). -module(gmc_key_master).
-vsn("0.1.3"). -vsn("0.1.4").
-export([make_key/2, encode/1, decode/1]). -export([make_key/2, encode/1, decode/1]).

View File

@ -12,7 +12,7 @@
%%% @end %%% @end
-module(gmc_sup). -module(gmc_sup).
-vsn("0.1.3"). -vsn("0.1.4").
-behaviour(supervisor). -behaviour(supervisor).
-author("Craig Everett <craigeverett@qpq.swiss>"). -author("Craig Everett <craigeverett@qpq.swiss>").
-copyright("QPQ AG <info@qpq.swiss>"). -copyright("QPQ AG <info@qpq.swiss>").

View File

@ -1,5 +1,5 @@
-module(gmc_v). -module(gmc_v).
-vsn("0.1.3"). -vsn("0.1.4").
-author("Craig Everett <craigeverett@qpq.swiss>"). -author("Craig Everett <craigeverett@qpq.swiss>").
-copyright("QPQ AG <info@qpq.swiss>"). -copyright("QPQ AG <info@qpq.swiss>").
-license("GPL-3.0-or-later"). -license("GPL-3.0-or-later").

View File

@ -1,5 +1,5 @@
-module(gmc_v_netman). -module(gmc_v_netman).
-vsn("0.1.3"). -vsn("0.1.4").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("QPQ AG <info@qpq.swiss>"). -copyright("QPQ AG <info@qpq.swiss>").
-license("GPL-3.0-or-later"). -license("GPL-3.0-or-later").

View File

@ -1,5 +1,5 @@
-module(gmc_v_wallman). -module(gmc_v_wallman).
-vsn("0.1.3"). -vsn("0.1.4").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("QPQ AG <info@qpq.swiss>"). -copyright("QPQ AG <info@qpq.swiss>").
-license("GPL-3.0-or-later"). -license("GPL-3.0-or-later").
@ -221,9 +221,10 @@ do_open3(Path, State = #s{frame = Frame, j = J}) ->
Affirm = wxButton:new(Dialog, ?wxID_OK), Affirm = wxButton:new(Dialog, ?wxID_OK),
_ = wxBoxSizer:add(ButtSz, Affirm, zxw:flags(wide)), _ = wxBoxSizer:add(ButtSz, Affirm, zxw:flags(wide)),
_ = wxBoxSizer:add(Sizer, PassSz, zxw:flags(base)), _ = wxBoxSizer:add(Sizer, PassSz, zxw:flags(base)),
_ = wxBoxSizer:add(Sizer, ButtSz, zxw:flags(base)), _ = wxBoxSizer:add(Sizer, ButtSz, zxw:flags(wide)),
ok = wxDialog:setSizer(Dialog, Sizer), ok = wxDialog:setSizer(Dialog, Sizer),
ok = wxBoxSizer:layout(Sizer), ok = wxBoxSizer:layout(Sizer),
ok = wxDialog:setSize(Dialog, {500, 130}),
ok = wxFrame:center(Dialog), ok = wxFrame:center(Dialog),
ok = wxStyledTextCtrl:setFocus(PassTx), ok = wxStyledTextCtrl:setFocus(PassTx),
case wxDialog:showModal(Dialog) of case wxDialog:showModal(Dialog) of
@ -232,9 +233,9 @@ do_open3(Path, State = #s{frame = Frame, j = J}) ->
"" -> "" ->
ok = wxDialog:destroy(Dialog), ok = wxDialog:destroy(Dialog),
State; State;
Password -> Phrase ->
ok = wxDialog:destroy(Dialog), ok = wxDialog:destroy(Dialog),
ok = gmc_con:open_wallet(Path, Password), ok = gmc_con:open_wallet(Path, Phrase),
ok = do_close(State), ok = do_close(State),
State State
end; end;

View File

@ -4,7 +4,7 @@
{prefix,"gmc"}. {prefix,"gmc"}.
{desc,"A desktop client for the Gajumaru network of blockchain networks"}. {desc,"A desktop client for the Gajumaru network of blockchain networks"}.
{author,"Craig Everett"}. {author,"Craig Everett"}.
{package_id,{"otpr","clutch",{0,1,3}}}. {package_id,{"otpr","clutch",{0,1,4}}}.
{deps,[{"otpr","hakuzaru",{0,2,0}}, {deps,[{"otpr","hakuzaru",{0,2,0}},
{"otpr","aesophia",{8,0,1}}, {"otpr","aesophia",{8,0,1}},
{"otpr","aeserialization",{0,1,2}}, {"otpr","aeserialization",{0,1,2}},