diff --git a/zomp/lib/otpr/zx/0.2.1/src/zx.erl b/zomp/lib/otpr/zx/0.2.1/src/zx.erl index 52f07d5..32f19e1 100644 --- a/zomp/lib/otpr/zx/0.2.1/src/zx.erl +++ b/zomp/lib/otpr/zx/0.2.1/src/zx.erl @@ -42,7 +42,7 @@ key_data/0, key_bin/0, key_id/0, key_name/0, user_id/0, user_name/0, contact_info/0, user_data/0, lower0_9/0, label/0, - package_meta/0, ss_tag/0, search_tag/0, description/0, package_type/0, + ss_tag/0, search_tag/0, description/0, package_type/0, outcome/0]). -include("zx_logger.hrl"). @@ -77,20 +77,7 @@ -type contact_info() :: {Type :: string(), Data :: string()}. -type lower0_9() :: [$a..$z | $0..$9 | $_]. -type label() :: [$a..$z | $0..$9 | $_ | $- | $.]. --type package_meta() :: #{package_id := package_id(), - name := string(), - desc := string(), - author := string(), - a_email := string(), - copyright := string(), - c_email := string(), - ws_url := string(), - repo_url := string(), - prefix := string(), - tags := [search_tag()], - deps := [package_id()], - type := package_type()}. --type ss_tag() :: {serial(), calendar:timestamp()}. +-type ss_tag() :: {serial(), erlang:timestamp()}. -type search_tag() :: string(). -type description() :: {description, @@ -793,7 +780,7 @@ fetch2(ID) -> -spec execute(Type, PackageID, Meta, Dir, RunArgs) -> no_return() when Type :: app | cli | gui | lib, PackageID :: package_id(), - Meta :: package_meta(), + Meta :: zx_zsp:meta(), Dir :: file:filename(), RunArgs :: [string()]. %% @private diff --git a/zomp/lib/otpr/zx/0.2.1/src/zx_auth.erl b/zomp/lib/otpr/zx/0.2.1/src/zx_auth.erl index 2e217c0..0c0f5f2 100644 --- a/zomp/lib/otpr/zx/0.2.1/src/zx_auth.erl +++ b/zomp/lib/otpr/zx/0.2.1/src/zx_auth.erl @@ -118,7 +118,7 @@ submit2(ZspBin) -> end. submit3(ZspBin) -> - {ok, {{Realm, Name, Version}, KeyName, _, _, _}} = zx_zsp:meta(ZspBin), + {ok, #{project_id := {Realm, Name, Version}, key_name := KeyName}} = zx_zsp:meta(ZspBin), UserName = select_auth(Realm), case zx_daemon:get_key(private, {Realm, KeyName}) of {ok, DKey} -> @@ -187,9 +187,9 @@ review4(PackageID, Socket) -> review5(PackageID, ZspBin) -> {ok, Requested} = zx_lib:package_string(PackageID), case zx_zsp:meta(ZspBin) of - {ok, {PackageID, _, _, _, _}} -> + {ok, #{package_id := PackageID}} -> zx_zsp:extract(ZspBin, cwd); - {ok, {UnexpectedID, _, _, _, _}} -> + {ok, #{package_id := UnexpectedID}} -> {ok, Unexpected} = zx_lib:package_string(UnexpectedID), Message = "Requested ~ts, but inside was ~ts! Aborting.", ok = log(warning, Message, [Requested, Unexpected]), @@ -218,14 +218,13 @@ accept2(ZspBin) -> error -> {error, bad_package} end. -accept3(ZspBin, Meta) -> - Realm = element(1, element(1, Meta)), +accept3(ZspBin, Meta = #{package_id := {Realm, _, _}}) -> case connect_auth(Realm) of {ok, AuthConn} -> accept4(ZspBin, Meta, AuthConn); Error -> Error end. -accept4(ZspBin, Meta = {_, KeyName, _, _, _}, AuthConn = {_, KeyName, Key, _, _}) -> +accept4(ZspBin, Meta = #{key_name := KeyName}, AuthConn = {_, KeyName, Key, _, _}) -> case zx_zsp:verify(ZspBin, Key) of true -> accept5(ZspBin, Meta, AuthConn); @@ -237,7 +236,7 @@ accept4(ZspBin, Meta = {_, KeyName, _, _, _}, AuthConn = {_, KeyName, Key, _, _} ok = io:format(Message), {error, bad_sig} end; -accept4(_, {_, PackageKey, _, _, _}, {_, UserKey, _, _, _}) -> +accept4(_, #{key_name := PackageKey}, {_, UserKey, _, _, _}) -> Message = "~nERROR: BAD KEY~n" "The package signature key and your auth key do not match.~n" @@ -529,8 +528,8 @@ connect_auth3(Realm, RealmConf, UserData) -> connect_auth4(Socket, Realm, UD = {UserName, KeyName, Key}) -> Null = 0, - Timestamp = calendar:universal_time(), - Payload = {Realm, Timestamp, UserName, KeyName}, + Now = os:timestamp(), + Payload = {Realm, Now, UserName, KeyName}, NullRequest = pack_and_sign(Null, Payload, Key), ok = gen_tcp:send(Socket, <<"ZOMP AUTH 1:", NullRequest/binary>>), receive diff --git a/zomp/lib/otpr/zx/0.2.1/src/zx_lib.erl b/zomp/lib/otpr/zx/0.2.1/src/zx_lib.erl index 9191542..73c8c05 100644 --- a/zomp/lib/otpr/zx/0.2.1/src/zx_lib.erl +++ b/zomp/lib/otpr/zx/0.2.1/src/zx_lib.erl @@ -231,7 +231,7 @@ realm_meta(Realm) -> -spec read_project_meta() -> Result - when Result :: {ok, zx:package_meta()} + when Result :: {ok, zx_zsp:meta()} | {error, file:posix()}. %% @private %% @equiv read_meta(".") diff --git a/zomp/lib/otpr/zx/0.2.1/src/zx_zsp.erl b/zomp/lib/otpr/zx/0.2.1/src/zx_zsp.erl index c4b643b..f1e8f37 100644 --- a/zomp/lib/otpr/zx/0.2.1/src/zx_zsp.erl +++ b/zomp/lib/otpr/zx/0.2.1/src/zx_zsp.erl @@ -12,7 +12,8 @@ -copyright("Craig Everett "). -license("GPL-3.0"). --export([pack/2, +-export([new_meta/0, + pack/2, unpack/1, blithely_unpack/1, extract/2, blithely_extract/2, verify/1, verify/2, @@ -24,17 +25,41 @@ -include("zx_logger.hrl"). --type meta() :: {PackageID :: zx:package_id(), - KeyName :: zx:key_name(), - DisplayName :: string(), - Desc :: string(), - Author :: string(), - AEmail :: string(), - WebURL :: string(), - RepoURL :: string(), - Tags :: [string()], - Deps :: [zx:package_id()], - Modules :: [string()]}. +-type meta() :: #{package_id := undefined | zx:package_id(), + name := string(), + desc := string(), + author := string(), + a_email := string(), + copyright := string(), + c_email := string(), + ws_url := string(), + repo_url := string(), + prefix := string(), + tags := [string()], + deps := [zx:package_id()], + modules := [string()], + type := undefined | zx:package_type(), + key_name := none | zx:key_name()}. + + +-spec new_meta() -> meta(). + +new_meta() -> + #{package_id => undefined, + name => "", + desc => "", + author => "", + a_email => "", + copyright => "", + c_email => "", + ws_url => "", + repo_url => "", + prefix => "", + tags => [], + deps => [], + modules => [], + type => undefined, + key_name => none}. -spec pack(TargetDir, Key) -> Result @@ -77,23 +102,11 @@ pack3(TargetDir, PackageID, Meta, {KeyName, Key}, ZspFile) -> ok = erl_tar:create(TarGzPath, Targets, [compressed]), {ok, TgzBin} = file:read_file(TarGzPath), ok = file:delete(TarGzPath), - MetaData = - {PackageID, - KeyName, - maps:get(name, Meta, Name), - maps:get(type, Meta), - maps:get(desc, Meta, ""), - maps:get(author, Meta, ""), - maps:get(a_email, Meta, ""), - maps:get(ws_url, Meta, ""), - maps:get(repo_url, Meta, ""), - maps:get(tags, Meta, []), - maps:get(deps, Meta, []), - Modules}, + MetaData = Meta#{key_name := KeyName, modules := Modules}, MetaBin = term_to_binary(MetaData), MetaSize = byte_size(MetaBin), SignMe = <>, - Sig = public_key:sign(SignMe, sha512, Key), + Sig = zx_key:sign(SignMe, Key), SigSize = byte_size(Sig), ZspData = <>, ok = file:set_cwd(CWD), @@ -119,20 +132,6 @@ unpack(ZspFile) -> end. --spec blithely_unpack(ZspFile) -> Outcome - when ZspFile :: file:filename(), - Outcome :: ok - | {error, Reason}, - Reason :: bad_zsp - | file:posix(). - -blithely_unpack(ZspFile) -> - case file:read_file(ZspFile) of - {ok, ZspBin} -> blithely_extract(ZspBin, cwd); - Error -> Error - end. - - -spec extract(ZspBin, Location) -> Outcome when ZspBin :: binary(), Location :: cwd @@ -150,13 +149,28 @@ extract(ZspBin, Location) -> end. +-spec blithely_unpack(ZspFile) -> Outcome + when ZspFile :: file:filename(), + Outcome :: ok + | {error, Reason}, + Reason :: bad_zsp + | file:posix(). + +blithely_unpack(ZspFile) -> + case file:read_file(ZspFile) of + {ok, ZspBin} -> blithely_extract(ZspBin, cwd); + Error -> Error + end. + + blithely_extract(ZspBin, cwd) -> {ok, Meta} = meta(ZspBin), - {ok, PackageString} = zx_lib:package_string(element(1, Meta)), + PackageID = maps:get(package_id, Meta), + {ok, PackageString} = zx_lib:package_string(PackageID), install(ZspBin, PackageString); blithely_extract(ZspBin, lib) -> {ok, Meta} = meta(ZspBin), - PackageID = element(1, Meta), + PackageID = maps:get(package_id, Meta), Path = zx_lib:ppath(lib, PackageID), install(ZspBin, Path). @@ -221,16 +235,18 @@ verify(<>, PubKey) -> meta(<>) -> case zx_lib:b_to_ts(MetaBin) of - {ok, Meta = {_, _, _, _, _}} -> {ok, Meta}; - _ -> {error, bad_zsp} - end. + {ok, Meta} -> {ok, Meta}; + _ -> {error, bad_zsp} + end; +meta(_) -> + {error, bad_zsp}. -spec package_id(binary()) -> {ok, zx:package_id()} | {error, bad_zsp}. package_id(Bin) -> case meta(Bin) of - {ok, Meta} -> {ok, element(1, Meta)}; + {ok, Meta} -> {ok, maps:get(package_id, Meta)}; Error -> Error end. @@ -275,16 +291,17 @@ resign(_, _, _) -> resign2(Realm, KeyName, Key, MetaBin, TarGZ) -> case zx_lib:b_to_ts(MetaBin) of - {ok, Meta = {{Realm, _, _}, _, _, _, _}} -> resign3(KeyName, Key, Meta, TarGZ); - {ok, _} -> {error, bad_realm}; - error -> {error, bad_zsp} + {ok, Meta} -> resign3(Realm, KeyName, Key, Meta, TarGZ); + {ok, _} -> {error, bad_realm}; + error -> {error, bad_zsp} end. -resign3(KeyName, Key, Meta, TarGZ) -> - MetaBin = term_to_binary(setelement(2, Meta, KeyName)), +resign3(Realm, KeyName, Key, Meta = #{package_id = {_, Name, Version}}, TarGZ) -> + NewMeta = Meta#{package_id := {Realm, Name, Version}, key_name := KeyName}, + MetaBin = term_to_binary(NewMeta), MetaSize = byte_size(MetaBin), SignMe = <>, - Sig = public_key:sign(SignMe, sha512, Key), + Sig = zx_key:sign(SignMe, Key), SigSize = byte_size(Sig), ZspBin = <>, {ok, ZspBin}.