From 39f6332eee8057dc5ae5f7975e86f3652f603e6b Mon Sep 17 00:00:00 2001 From: kaotisk Date: Tue, 22 Jul 2025 05:43:28 +0300 Subject: [ns] -ra flag to resolve all reachable keys * Deprecates IPNS * Changed the way IPNS keys are resolved * Changed the way IPNS keys are published * Changed the way configuration publishing is happening --- lib/_ak_config | 2 ++ lib/_ak_ipfs | 17 +++++++++++++--- lib/_ak_ns | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/_ak_config b/lib/_ak_config index e032a72..085d79f 100755 --- a/lib/_ak_config +++ b/lib/_ak_config @@ -19,6 +19,7 @@ ### source $AK_LIBDIR/_ak_lib_load _ak_lib_load _ak_node +_ak_lib_load _ak_fs function _ak_config_show(){ # We will be using our public key also to put it in the block later @@ -48,6 +49,7 @@ function _ak_config_show(){ function _ak_config_publish(){ _ak_config_show | jq -c -M > tmpfile + akfs_map_v3="$(_ak_fs_import tmpfile)" ipfs_hash="$(_ak_ipfs_add tmpfile)" _ak_ipfs_config_publish $ipfs_hash if [ $? != 0 ] diff --git a/lib/_ak_ipfs b/lib/_ak_ipfs index 07595ae..aa2f96c 100755 --- a/lib/_ak_ipfs +++ b/lib/_ak_ipfs @@ -22,10 +22,15 @@ _ak_lib_load _ak_log AK_IPFS_REPO="$AK_WORKDIR/ipfsrepo" AK_IPFS_ARTIFACTS="$AK_WORKDIR/ipfs_artifacts" +AK_IPNS_ARTIFACTS="$AK_WORKDIR/ipns_artifacts" if [ ! -d $AK_IPFS_ARTIFACTS ] then mkdir -p $AK_IPFS_ARTIFACTS fi +if [ ! -d $AK_IPNS_ARTIFACTS ] +then + mkdir -p $AK_IPNS_ARTIFACTS +fi function _ak_ipfs(){ export IPFS_PATH=$AK_IPFS_REPO; kubo $* @@ -316,12 +321,17 @@ function _ak_ipfs_name_publish(){ _ak_log_error "No argument given" exit 1 fi - _ak_ipfs name publish --key="$1" "$2" + key="$(_ak_ipfs key list -l | grep $1 | cut -d ' ' -f 1)" if [ $? -ne 0 ] then _ak_log_error "Failed to get $1" exit 1 fi + if [ -f "$AK_IPNS_ARTIFACTS/$key" ] + then + cat $AK_IPNS_ARTIFACTS/$key >> $AK_IPNS_ARTIFACTS/$key.history + fi + echo $2 > $AK_IPNS_ARTIFACTS/$key } function _ak_ipfs_config_publish(){ @@ -340,12 +350,13 @@ function _ak_ipfs_name_resolve(){ _ak_log_error "No argument given" exit 1 fi - _ak_ipfs name resolve "$1" - if [ $? -ne 0 ] + + if [ ! -d $AK_IPNS_ARTIFACTS/$1 ] then _ak_log_error "Failed to resolve $1" exit 1 fi + cat $AK_IPNS_ARTIFACTS/$1 } function _ak_ipfs_swarm_peers(){ diff --git a/lib/_ak_ns b/lib/_ak_ns index 3499232..476ea1c 100755 --- a/lib/_ak_ns +++ b/lib/_ak_ns @@ -284,4 +284,66 @@ function _ak_ns_publish_config(){ > ${AK_NS_DIR}/${zconfig_key}.map } +function _ak_ns_resolve_all_keys(){ + tmpdir="$(_ak_make_temp_directory)" + cd $tmpdir + ip a | grep inet6 | sed 's/ *inet6 //g' | cut -d '/' -f 1 > ip_list + # cat /dev/null > ip_list + ak network -p 2>/dev/null| jq -r '.[].incoming.ip' | while read ip ; do if [ $ip != null ]; then echo $ip ;fi;done > peer_list + cat ip_list | while read ip ; do sed -i 's/^'$ip'$//g' peer_list; done + # cat peer_list | while read ip ; do ak network -p | jq --arg ip "$ip" '.[] | select(.incoming.ip == $ip )' | jq -r '.node_info.keys.[]'> key_list.$ip; done + cat peer_list | while read ip ; do ak network -p | jq --arg ip "$ip" '.[] | select(.incoming.ip == $ip )' | jq '.node_info.keymaps.[]'> keymaps_list.$ip; done + # cat peer_list | while read ip + # do + # cat key_list.$ip | while read key + # do + # ak fs --net-cat-from-map $key > $key && ak fs --import $key + # done + # done + # cat peer_list | while read ip + # do + # proof="$(cat keymaps_list.$ip | jq -r '.')" + # while read key + # do + # ak fs --net-cat-from-map $key > $key && ak fs --import $key + # done + # done + cat peer_list | while read ip + do + cat keymaps_list.$ip | jq -r '.fingerprint' | while read key + do + map="$(cat keymaps | jq -r 'select(.fingerprint == "'$key'")|.map')" + ak fs --net-cat-from-map $map > $key + ak fs --import $key + curl -s http://[$ip]:8610/v0/ns_get/$key > $key.reply + proof="$(cat $key.reply | jq -r '.proof')" + resolved="$(cat $key.reply | jq -r '.resolved')" + key="$(cat $key.reply | jq -r '.key')" + ak fs --net-cat-from-map $proof > $key.proof + _ak_gpg_verify_clear_signature $key.proof + if [ $? -ne 0 ] + then + _ak_log_error "Couldn't verify" + exit 1 + fi + if [ -f ${AK_NS_DIR}/${key} ] + then + _ak_gpg_verify_clear_signature ${AK_NS_DIR}/${key} >> ${AK_NS_DIR}/${key}.history + fi + signed_akfs_map=$(_ak_fs_import ${key}.proof) + if [ -f ${AK_NS_DIR}/${key}.map ] + then + printf '%s %s\n' "$(echo -n $signed_akfs_map)" \ + "$(_ak_gpg_verify_clear_signature ${AK_NS_DIR}/${key})" \ + >> ${AK_NS_DIR}/${key}.history_map + + fi + mv ${key}.proof ${AK_NS_DIR}/${key} + printf '%s %s\n' "$(echo -n $proof)" \ + "$(_ak_gpg_verify_clear_signature ${AK_NS_DIR}/${key})" \ + > ${AK_NS_DIR}/${key}.map + done + done +} + _ak_log_debug "_ak_ns loaded $(caller)" -- cgit v1.2.3