WIP: Grand shakeout awaits!
This commit is contained in:
parent
a7a8ad72f2
commit
1fde98932c
@ -1,4 +1,7 @@
|
|||||||
{realm, "otpr"}.
|
{realm, "otpr"}.
|
||||||
{prime, {"zomp.psychobitch.party",11311}}.
|
{prime, {"zomp.psychobitch.party",11311}}.
|
||||||
{sysop, "zxq9"}.
|
{sysop, {"zxq9", "Craig Everett", [{"email", "zxq9@zxq9.com"}]}}.
|
||||||
{key, "zxq9-root"}.
|
{key, <<38,103,252,11,212,145,139,235,72,17,254,18,49,212,225,154,251,31,136,0,11,
|
||||||
|
230,252,220,118,33,116,200,63,200,8,166,213,29,94,176,113,70,228,47,37,54,90,
|
||||||
|
124,151,66,121,221,136,7,5,112,114,74,165,205,88,29,138,226,27,104,84,250>>}.
|
||||||
|
{timestamp, {{2019, 12, 16}, {13, 01, 21}}}.
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@ -842,10 +842,10 @@ handle_call({takeover, Realm}, _, State = #s{conf = Conf}) ->
|
|||||||
{Result, NewConf} = do_takeover(Realm, Conf),
|
{Result, NewConf} = do_takeover(Realm, Conf),
|
||||||
NewState = eval_queue(State#s{conf = NewConf}),
|
NewState = eval_queue(State#s{conf = NewConf}),
|
||||||
{reply, Result, NewState};
|
{reply, Result, NewState};
|
||||||
handle_call({drop_realm, Realm}, _, State = #s{conf = Conf}) ->
|
handle_call({drop_realm, Realm}, _, State) ->
|
||||||
{Result, NewConf} = do_drop_realm(Realm, Conf),
|
NextState = do_drop_realm(Realm, State),
|
||||||
NewState = eval_queue(State#s{conf = NewConf}),
|
NewState = eval_queue(NextState),
|
||||||
{reply, Result, NewState};
|
{reply, ok, NewState};
|
||||||
handle_call(hosts, _, State = #s{cx = CX}) ->
|
handle_call(hosts, _, State = #s{cx = CX}) ->
|
||||||
Result = cx_mirrors(CX),
|
Result = cx_mirrors(CX),
|
||||||
{reply, Result, State};
|
{reply, Result, State};
|
||||||
@ -1868,24 +1868,24 @@ do_takeover(Realm, C = #conf{realms = Realms, managed = Managed}) ->
|
|||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
-spec do_abdicate(Realm, Conf) -> {Result, NewConf}
|
-spec do_abdicate(Realm, State) -> {Result, NewState}
|
||||||
when Realm :: zx:realm(),
|
when Realm :: zx:realm(),
|
||||||
Conf :: conf(),
|
State :: state(),
|
||||||
Result :: ok
|
Result :: ok
|
||||||
| {error, unmanaged},
|
| {error, unmanaged},
|
||||||
NewConf :: conf().
|
NewState :: state().
|
||||||
|
|
||||||
do_abdicate(Realm, C = #conf{managed = Managed}) ->
|
do_abdicate(Realm, State = #s{conf = C = #conf{managed = Managed}}) ->
|
||||||
case sets:is_element(Realm, Managed) of
|
case sets:is_element(Realm, Managed) of
|
||||||
true ->
|
true ->
|
||||||
NewManaged = sets:del_element(Realm, Managed),
|
NewManaged = sets:del_element(Realm, Managed),
|
||||||
NewC = C#conf{managed = NewManaged},
|
NewC = C#conf{managed = NewManaged},
|
||||||
ok = save_conf(NewC),
|
ok = save_conf(NewC),
|
||||||
ok = log(info, "No longer managing realm: ~160tp", [Realm]),
|
ok = log(info, "No longer managing realm: ~160tp", [Realm]),
|
||||||
{ok, NewC};
|
{ok, State#s{conf = NewC}};
|
||||||
false ->
|
false ->
|
||||||
ok = log(error, "Cannot abdicate an unmanaged realm."),
|
ok = tell(error, "Cannot abdicate an unmanaged realm."),
|
||||||
{{error, unmanaged}, C}
|
{{error, unmanaged}, State}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
@ -2121,25 +2121,27 @@ do_list_keys(private, Realm, {RK, _, _}) ->
|
|||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
-spec do_drop_realm(Realm, State) -> {ok, NewState}
|
-spec do_drop_realm(Realm, State) -> NewState
|
||||||
when Realm :: zx:realm(),
|
when Realm :: zx:realm(),
|
||||||
State :: state(),
|
State :: state(),
|
||||||
NewState :: state().
|
NewState :: state().
|
||||||
|
|
||||||
do_drop_realm(Realm, State = #s{kx = {RealmIndex, Pairs}}) ->
|
do_drop_realm(Realm, State = #s{kx = {RealmIndex, Pairs, Owners}}) ->
|
||||||
NewKX =
|
NewKX =
|
||||||
case maps:take(Realm, RealmIndex) of
|
case maps:take(Realm, RealmIndex) of
|
||||||
{KeyIndex, NextRealmIndex} ->
|
{KeyIndex, NextRealmIndex} ->
|
||||||
NewPairs = scrub_pairs(maps:values(KeyIndex), Pairs),
|
NewPairs = scrub_pairs(maps:values(KeyIndex), Pairs),
|
||||||
{NextRealmIndex, NewPairs};
|
Screen = fun({{R, _}, _}) -> R == Realm end,
|
||||||
|
NewOwners = maps:filter(Screen, Owners),
|
||||||
|
{NextRealmIndex, NewPairs, NewOwners};
|
||||||
error ->
|
error ->
|
||||||
{RealmIndex, Pairs}
|
{RealmIndex, Pairs, Owners}
|
||||||
end,
|
end,
|
||||||
Dirs = [etc, var, tmp, log, key, zsp, lib],
|
Dirs = [etc, var, tmp, log, key, zsp, lib],
|
||||||
RM = fun(D) -> ok = zx_lib:rm_rf(zx_lib:path(D, Realm)) end,
|
RM = fun(D) -> ok = zx_lib:rm_rf(zx_lib:path(D, Realm)) end,
|
||||||
ok = lists:foreach(RM, Dirs),
|
ok = lists:foreach(RM, Dirs),
|
||||||
NewState = do_abdicate(Realm, State),
|
{_, NewState} = do_abdicate(Realm, State),
|
||||||
{ok, NewState#s{kx = NewKX}}.
|
NewState#s{kx = NewKX}.
|
||||||
|
|
||||||
scrub_pairs([#key{pubhash = PubHash, keyhash = KeyHash} | Rest], Pairs) ->
|
scrub_pairs([#key{pubhash = PubHash, keyhash = KeyHash} | Rest], Pairs) ->
|
||||||
scrub_pairs(Rest, maps:without([PubHash, KeyHash], Pairs));
|
scrub_pairs(Rest, maps:without([PubHash, KeyHash], Pairs));
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
-spec path(public | private, zx:key_id()) -> file:filename().
|
-spec path(public | private, zx:key_id()) -> file:filename().
|
||||||
|
|
||||||
path(Type, {Realm, KeyHash}) when is_binary(KeyHash) ->
|
path(Type, {Realm, KeyHash}) ->
|
||||||
Size = byte_size(KeyHash) * 8,
|
Size = byte_size(KeyHash) * 8,
|
||||||
<<N:Size>> = KeyHash,
|
<<N:Size>> = KeyHash,
|
||||||
String = integer_to_list(N, 36),
|
String = integer_to_list(N, 36),
|
||||||
@ -33,9 +33,7 @@ path(Type, {Realm, KeyHash}) when is_binary(KeyHash) ->
|
|||||||
public -> String ++ ".pub.der";
|
public -> String ++ ".pub.der";
|
||||||
private -> String ++ ".key.der"
|
private -> String ++ ".key.der"
|
||||||
end,
|
end,
|
||||||
zx_lib:path(key, Realm, Name);
|
zx_lib:path(key, Realm, Name).
|
||||||
path(Type, {Realm, KeyName}) ->
|
|
||||||
zx_lib:path(key, Realm, KeyName).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -82,12 +80,10 @@ generate_rsa2(Owner, PemFile, KeyFile, PubFile) ->
|
|||||||
true ->
|
true ->
|
||||||
ok = tell(info, "~ts and ~ts agree", [KeyFile, PubFile]),
|
ok = tell(info, "~ts and ~ts agree", [KeyFile, PubFile]),
|
||||||
PubHash = crypto:hash(sha512, PubBin),
|
PubHash = crypto:hash(sha512, PubBin),
|
||||||
KeyHash = crypto:hash(sha512, KeyBin),
|
KeyData = {PubHash, {none, PubBin}, {none, KeyBin}},
|
||||||
PairHash = crypto:hash(sha512, <<PubHash/binary, KeyHash/binary>>),
|
|
||||||
KeyData = {PairHash, {none, PubBin}, {none, KeyBin}},
|
|
||||||
ok = zx_daemon:register_key(Owner, KeyData),
|
ok = zx_daemon:register_key(Owner, KeyData),
|
||||||
ok = zx_lib:rm_rf(filename:dirname(KeyFile)),
|
ok = zx_lib:rm_rf(filename:dirname(KeyFile)),
|
||||||
{ok, PairHash};
|
{ok, PubHash};
|
||||||
false ->
|
false ->
|
||||||
ok = lists:foreach(fun file:delete/1, [PemFile, KeyFile, PubFile]),
|
ok = lists:foreach(fun file:delete/1, [PemFile, KeyFile, PubFile]),
|
||||||
ok = tell(error, "Something has gone wrong."),
|
ok = tell(error, "Something has gone wrong."),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user