All derivative keys comes from PLAYER credentials. So, every TW (salt/pepper) will make the same Wishes Keys

This commit is contained in:
fred 2023-03-04 16:42:01 +01:00
parent 9095333b5c
commit c9d16af39c
8 changed files with 51 additions and 221 deletions

View File

@ -24,7 +24,6 @@ start=`date +%s`
PORT=$1 THAT=$2 AND=$3 THIS=$4 APPNAME=$5 WHAT=$6 OBJ=$7 VAL=$8 MOATS=$9
### transfer variables according to script
QRCODE=$THAT
URL=$THIS
TYPE=$WHAT
## GET TW
@ -61,13 +60,39 @@ $MY_PATH/../tools/jaklis/jaklis.py -n $myGCHANGE -k $MYPLAYERKEY send -d "${QRCO
$MY_PATH/../tools/jaklis/jaklis.py -n $myCESIUM -k $MYPLAYERKEY send -d "${QRCODE}" -t "COUCOU" -m "Rendez vous sur https://astroport.copylaradio.com/"
###################################################################################################
# THAT=$2 AND=$3 THIS=$4 APPNAME=$5 WHAT=$6 OBJ=$7 VAL=$8
### amzqr "$myASTROPORT/?qrcode=$G1PUB&sslpassdunikeysec=$PASsec&askpass=$HPass&tw=$ASTRONAUTENS" \
### amzqr "$myASTROPORT/?qrcode=$WISHKEY&sslpassdunikeysec=$PASsec&asksalt=$HPass&flux=$VOEUNS&tw=$ASTRONAUTENS" \
###
if [[ $AND == "sslpassdunikeysec" ]]; then
echo "♥BOX♥BOX♥BOX♥BOX♥BOX"
echo "MAGIC WORLD ASTRONAUT & WISHES"
if [[ $APPNAME == "askpass" ]]; then
echo ">> ASTRONAUT QRCODE $APPNAME"
ENDCODED="$THIS"
HPASS="$WHAT"
TW="/ipns/$VAL"
fi
if [[ $APPNAME == "asksalt" ]]; then
echo ">> WISH QRCODE $APPNAME"
ENDCODED="$THIS"
HSALT="$WHAT"
FLUX="/ipns/$VAL"
fi
fi
## TODO MAGIC QRCODE RX / TX
###################################################################################################
# API TWO : ?qrcode=G1PUB&url=____&type=____
if [[ $AND == "url" ]]; then
URL=$THIS
if [[ $URL ]]; then
## Astroport.ONE local use QRCODE Contains ${WHAT} G1PUB
g1pubpath=$(grep $QRCODE ~/.zen/game/players/*/.g1pub | cut -d ':' -f 1 2>/dev/null)
@ -80,7 +105,6 @@ $MY_PATH/../tools/jaklis/jaklis.py -n $myCESIUM -k $MYPLAYERKEY send -d "${QRCOD
&& exit 1
## Demande de copie d'une URL reçue.
if [[ $URL ]]; then
[[ ${TYPE} ]] && CHOICE="${TYPE}" || CHOICE="Youtube"
## CREATION TIDDLER "G1Voeu" G1CopierYoutube
@ -107,4 +131,4 @@ $MY_PATH/../tools/jaklis/jaklis.py -n $myCESIUM -k $MYPLAYERKEY send -d "${QRCOD
(echo "$HTTPCORS ERROR - ${AND} - ${THIS} UNKNOWN" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1
fi
fi

View File

@ -167,7 +167,7 @@ PEPPER=$THIS
# CREATE PLAYER : ?salt=PHRASE%20UNE&pepper=PHRASE%20DEUX&g1pub=on&email=EMAIL&pseudo=PROFILENAME
# WHAT can contain urlencoded FullURL
EMAIL="${VAL}"
EMAIL="${VAL,,}" # lowercase
[[ ! ${EMAIL} ]] && (echo "$HTTPCORS ERROR - MISSING ${EMAIL} FOR ${WHAT} CONTACT" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "(☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && exit 0

View File

@ -23,6 +23,7 @@ PSEUDO=$(cat ~/.zen/game/players/$PLAYER/.pseudo 2>/dev/null)
[[ $G1PUB == "" ]] && echo "Troisième paramètre G1PUB manquant" && exit 1
[[ ! $INDEX ]] && INDEX="$HOME/.zen/game/players/$PLAYER/ipfs/moa/index.html"
echo $INDEX
[[ ! -s $INDEX ]] && echo "TW $PLAYER manquant" && exit 1
echo "Working on $INDEX"
@ -51,7 +52,7 @@ mkdir -p ~/.zen/tmp/$MOATS
PEPPER=$(echo "$TITRE" | sed -r 's/\<./\U&/g' | sed 's/ //g') # CapitalGluedWords
echo "$PEPPER" && [[ ! $PEPPER ]] && echo "EMPTY PEPPER - ERROR" && exit 1
echo "## keygen CLEF DE VOEUX"
echo "## keygen CLEF DE VOEUX from PLAYER : pepper + G1Voeu derivation"
${MY_PATH}/../tools/keygen -t duniter -o ~/.zen/tmp/qrtw.dunikey "$SALT" "$PEPPER"
WISHKEY=$(cat ~/.zen/tmp/qrtw.dunikey | grep "pub:" | cut -d ' ' -f 2)
echo "WISHKEY (G1PUB) = $WISHKEY"

View File

@ -156,7 +156,7 @@ select fav in "${choices[@]}"; do
"CREER UN VOEU")
echo "QRCode à coller sur les lieux ou objets portant une Gvaleur"
cp ~/.zen/game/players/$PLAYER/ipfs/moa/index.html ~/.zen/tmp/$PLAYER.html
${MY_PATH}/ASTROBOT/G1Voeu.sh "" "$PLAYER" "~/.zen/tmp/$PLAYER.html"
${MY_PATH}/ASTROBOT/G1Voeu.sh "" "$PLAYER" "$HOME/.zen/tmp/$PLAYER.html"
DIFF=$(diff ~/.zen/game/players/$PLAYER/ipfs/moa/index.html ~/.zen/tmp/$PLAYER.html)
if [[ $DIFF ]]; then
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")

View File

@ -1,212 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>_PLAYER_ : TW : _G1VOEU_</title>
<meta charset="UTF-8">
<link rel="icon" type="image/x-icon" href="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/favicon.ico">
<link rel="stylesheet" href="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/jquery-ui.min.css">
<script type="text/javascript" src="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/requestanimationframe.polyfill.js"></script>
<script type="text/javascript" src="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/instascan.min.js"></script>
<script type="text/javascript" src="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/html5-qrcode.min.js"></script>
<script type="text/javascript" src="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/jquery-ui.0.min.js"></script>
<script type="text/javascript" src="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/sphere-hacked.js"></script>
<script type="text/javascript" src="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/jquery.earth-3d.js"></script>
<script type="text/javascript" src="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/demo.js"></script>
<script type="text/javascript">
examples['simple_mars'] = function() {
$('#sphere').earth3d({
texture: '/ipfs/QmNNSAJyzVSF2m16dReYgmqmiRkKa5HMKvFUgwhbRzTYto/mars1024x1024.jpg', // texture used by G1Wish planet
dragElement: $('#locations') // where do we catch the mouse drag
});
};
</script>
<style>
body {
padding: 0;
margin: 0;
font-family: sans-serif;
}
.slidecontainer {
width: 80%;
margin: 0 auto;
text-align: center;
}
.gif-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.gif-container img {
margin: 10px;
max-width: 200px;
}
.slider {
width: 100%;
text-align: center;
}
.slider #prev {
float: left;
font-size: 40px;
}
.slider #next {
float: right;
font-size: 40px;
}
#glow-shadows.earth {
background: url(/ipfs/QmTVspfoaNL1BK2CR1vVNrEnwo4PfUjwdQxEt57mGJjsLX/earth-glow-shadows.png);
}
#glow-shadows.mars {
background: url(/ipfs/QmTVspfoaNL1BK2CR1vVNrEnwo4PfUjwdQxEt57mGJjsLX/mars-glow-shadows.png);
}
.flight {
position: absolute;
width: 24px;
height: 25px;
left: 10px;
top: 10px;
background: url(/ipfs/QmTVspfoaNL1BK2CR1vVNrEnwo4PfUjwdQxEt57mGJjsLX/plain.png);
background-size: 100% 100%;
margin-left: -12px;
margin-top: -12.5px;
cursor: pointer;
}
</style>
<link rel="stylesheet" href="/ipfs/QmWbZm4dkxTQbayPLPNUKxdpMt9wjkkU3u5V2JQiCui979/index_fichiers/demo.css">
</head>
<body>
<div class="slidecontainer">
<h1>G1_G1VOEU_</h1>
<div class="gif-container">
<!-- gifs -->
</div>
<div class="slider">
<a href="#" id="prev">&lt;</a>
<a href="#" id="next">&gt;</a>
</div>
</div>
<script>
const gifContainer = document.querySelector('.gif-container');
const prevBtn = document.querySelector('#prev');
const nextBtn = document.querySelector('#next');
const pageSize = 12;
let pageNumber = 0;
let gifs = [];
let urls = [];
let titles = [];
let durees = [];
// Récupérer les données
fetch('_LIBRA__VOEUNS_/__PLAYER_.tiddlers.json')
.then(res => res.json())
.then(data => {
// Extraire les gifanime
gifs = data.map(tiddler => tiddler.gifanime);
urls = data.map(tiddler => tiddler.ipfs);
titles = data.map(tiddler => tiddler.title);
durees = data.map(tiddler => tiddler.duree);
// Afficher les gifs
showGifs();
});
// Afficher les images
function showGifs() {
let start = pageNumber * pageSize;
let end = start + pageSize;
let pageGifs = gifs.slice(start, end);
let pageUrls = urls.slice(start, end);
let pageTitles = titles.slice(start, end);
let pageDurees = durees.slice(start, end);
let output = '';
// Générer le HTML
pageGifs.forEach((gif, i) => {
output += `
<a href="_LIBRA_${pageUrls[i]}">
<img src="_LIBRA_${gif}" title="${pageDurees[i]} - ${pageTitles[i]}" />
</a>
`;
});
// Ajouter le HTML
gifContainer.innerHTML = output;
}
// Écouter les évènements
prevBtn.addEventListener('click', () => {
pageNumber--;
showGifs();
});
nextBtn.addEventListener('click', () => {
pageNumber++;
showGifs();
});
</script>
<a target=_blank href="https://astroport.copylaradio.com"><img style="position: absolute; top: 0; right: 0; border: 0;" src="l0g0.png" alt="Entrez par le Le Claude"></a>
<h1><a target=_blank href="http://astroport.localhost:1234">Astroport Ŋ1</a></h1>
<div class="subtitle">Une Planète à Vous<br>Un Internet entre Nous !</div>
<div id="demo">
<div id="description">
<h2>Un DON ? Flashez le QRCode !</h2>
Visitez TW "_PLAYER_"
<p><a href="https://ipfs.copylaradio.com/ipns/_ASTRONAUTENS_">
<img src="/ipfs/QmWUpjGFuF7NhpXgkrCmx8Tbu4xjcFpKhE7Bsvt6HeKYxu/g1ticket_qrcode.png" width=65%></p>
</a>
<h3>Installez <a href="https://cesium.app">Cesium</a>. Indiquez en commentaire vos "G1Talents" et les emails de vos amis qui partage(ront) votre dons.</h3>
<p>/ <a href="https://opencollective.com/monnaie-libre/projects/stiits">LaSTI</a> / G1Services by U + La♥BOX</p>
<br>
</div>
<div id="showoff">
<div id="container">
<h2>ONE WORLD</h2>
<canvas id="sphere" width="400" height="400"></canvas>
<div id="glow-shadows" class="earth"></div>
<canvas id="flights" width="400" height="400"></canvas>
<div id="locations"></div>
</div>
<p><a href="https://opencollective.com/monnaie-libre/projects/coeurbox">La♥BOX</a>, sauvegarde, diffuse et partage vos DATA 👍 à l'abris dans "Le Claude"</p>
<p>Powered by <a href="https://github.com/papiche/Astroport.ONE">Astroport.ONE</a></p>
<div class="choose_example">
Choose example: <select id="example">
<option value="simple">Simple earth</option>
<option value="simple_tilted">Simple tilted earth</option>
<option value="simple_mars">Simple mars</option>
<option value="locations">Earth with locations</option>
<option value="flights" selected>Earth with locations and flights</option>
</select>
</div>
<div class="code">
<a href="#" onclick="$('#example_code').show(); $(this).hide().siblings('a').show(); return false;">Show code</a>
<a href="#" style="display: none;" onclick="$('#example_code').hide(); $(this).hide().siblings('a').show(); return false;">Hide code</a>
<textarea id="example_code" onclick="this.focus();this.select();"></textarea>
</div>
</div>
</body>
</html>

View File

@ -202,7 +202,7 @@ DISCO="https://astroport.$(myHostName)/?salt=${SALT}&pepper=${PEPPER}&logout=${P
rm -f ~/.zen/tmp/${MOATS}/${PSEUDO}.sec
ASTROQR=$(ipfs add -q $HOME/.zen/game/players/${PLAYER}/logoastro_qrcode.png | tail -n 1)
ASTROQR=$(ipfs add -q $HOME/.zen/game/players/${PLAYER}/G1WorldMap_qrcode.png | tail -n 1)
### INITALISATION WIKI dans leurs répertoires de publication IPFS
@ -260,6 +260,7 @@ DISCO="https://astroport.$(myHostName)/?salt=${SALT}&pepper=${PEPPER}&logout=${P
tiddlywiki --load ~/.zen/game/players/${PLAYER}/ipfs/moa/index.html --output ~/.zen/tmp/${MOATS} --render '.' 'MadeInZion.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'MadeInZion'
cat ~/.zen/tmp/${MOATS}/MadeInZion.json | jq -r ".[].secret" | base16 -d > ~/.zen/tmp/${MOATS}/crypto.$G1PUB.enc.2
$MY_PATH/natools.py decrypt -f pubsec -k $HOME/.zen/game/players/${PLAYER}/secret.dunikey -i $HOME/.zen/tmp/${MOATS}/crypto.$G1PUB.enc.2 -o $HOME/.zen/tmp/${MOATS}/crypto.2
echo "DEBUG : $(cat $HOME/.zen/tmp/${MOATS}/crypto.2)"
###########
## CRYPTO PROCESS VALIDATED
[[ -s ~/.zen/tmp/${MOATS}/crypto.2 ]] && echo "NATOOLS LOADED" \
@ -272,13 +273,22 @@ DISCO="https://astroport.$(myHostName)/?salt=${SALT}&pepper=${PEPPER}&logout=${P
cat ~/.zen/Astroport.ONE/templates/data/local.gw.json | sed "s~_NID_~${NID}~g" > ~/.zen/tmp/${MOATS}/local.gw.json
# Create"${PLAYER}_feed" Key
FEEDNS=$(ipfs key gen "${PLAYER}_feed")
${MY_PATH}/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/feed.ipfskey "$SALT" "$G1PUB"
ipfs key import "${PLAYER}_feed" -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/feed.ipfskey
FEEDNS=$(ipfs key list -l | grep -w "${PLAYER}_feed" | cut -d ' ' -f 1 )
## MAKE LightBeam Plugin Tiddler ${PLAYER}_feed
# $:/plugins/astroport/lightbeams/saver/ipns/lightbeam-key
echo '[{"title":"$:/plugins/astroport/lightbeams/saver/ipns/lightbeam-name","text":"'${PLAYER}_feed'","tags":""}]' > ~/.zen/tmp/${MOATS}/lightbeam-name.json
echo '[{"title":"$:/plugins/astroport/lightbeams/saver/ipns/lightbeam-key","text":"'${FEEDNS}'","tags":""}]' > ~/.zen/tmp/${MOATS}/lightbeam-key.json
## NATOOLS ENCRYPT
echo "# NATOOLS ENCODING feed.ipfskey "
$MY_PATH/../tools/natools.py encrypt -p $G1PUB -i $HOME/.zen/tmp/${MOATS}/feed.ipfskey -o $HOME/.zen/tmp/${MOATS}/feed.ipfskey.$G1PUB.enc
ENCODING=$(cat $HOME/.zen/tmp/${MOATS}/feed.ipfskey.$G1PUB.enc | base16)
echo $ENCODING
echo '[{"title":"$:/plugins/astroport/lightbeams/saver/g1/lightbeam-natools-feed","text":"'${ENCODING}'","tags":""}]' > ~/.zen/tmp/${MOATS}/lightbeam-natools.json
echo "TW IPFS GATEWAY : $NID"
# cat ~/.zen/tmp/${MOATS}/local.gw.json | jq -r
echo "TW IPFS API : $WID"

View File

@ -28,6 +28,9 @@ awk -i inplace -v rmv="PATH" '!index($0,rmv)' /tmp/mycron
crontest=$(cat /tmp/mycron | grep -F '20h12.process.sh')
## TODO check for Station geoposition in ~/.zen/GPS and calibrate 20H12
cat ~/.zen/GPS 2>/dev/null && echo " TODO calibrate 20H12 with GPS"
if [[ ! $crontest ]]; then
## HEADER
[[ $1 == "OFF" ]] && exit 0
@ -38,7 +41,9 @@ if [[ ! $crontest ]]; then
echo "12 20 * * * /bin/bash $MY_PATH/../20h12.process.sh > /tmp/20h12.log 2>&1" >> /tmp/newcron
crontab /tmp/newcron
sudo systemctl enable ipfs
sudo systemctl enable astroport
sudo systemctl start ipfs
sudo systemctl start astroport
echo "ASTROPORT is ON"
else
@ -51,6 +56,8 @@ else
crontab /tmp/newcron
sudo systemctl stop ipfs
sudo systemctl disable ipfs
sudo systemctl stop astroport
sudo systemctl disable astroport
echo "ASTROPORT is OFF"
fi

View File

@ -40,7 +40,7 @@ ipfs config --json Swarm.ConnMgr.LowWater 20
ipfs config --json Swarm.ConnMgr.HighWater 40
[[ ! $isLAN ]] && ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://'$myIP':8080", "http://ipfs.localhost:8080", "http://127.0.0.1:8080", "http://127.0.1.1:8080", "https://ipfs.'$(hostname)'.copylaradio.com" ]' \
|| ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://'$(hostname)'.local:8080","http://'$(hostname)':8080", "http://127.0.0.1:8080", "http://ipfs.localhost:8080", "http://127.0.1.1:8080" ]'
|| ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://'$myIP':8080", "http://'$(hostname)'.local:8080","http://'$(hostname)':8080", "http://127.0.0.1:8080", "http://ipfs.localhost:8080", "http://127.0.1.1:8080" ]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'