diff --git a/.gitignore b/.gitignore index ff4cf51..4547f18 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ history.* .install/log .install/.OS .profile +deps/g1bot/ +mesms/ diff --git a/.install/1-install_requirements.sh b/.install/1-install_requirements.sh index 514cf3f..d896165 100755 --- a/.install/1-install_requirements.sh +++ b/.install/1-install_requirements.sh @@ -2,9 +2,8 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile || echo -e "${c_red}Le .profile n'existe pas$c_" && exit 1 -OS=$(head -n1 $MY_PATH/.OS) -isARM=$(cat $MY_PATH/.OS | grep YES) unset err # Basics @@ -26,7 +25,7 @@ silkaj() { ipfs() { echo -e "${c_yellow}Installation d'IPFS...$c_" [[ -f /usr/local/bin/ipfs ]] && sudo service ipfs stop - if [[ $isARM ]]; then + if [[ $ARM == "yes" ]]; then wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-arm.tar.gz -O $MY_PATH/ipfs-update.tar.gz || err+="Download ipfs-update" else wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-amd64.tar.gz -O $MY_PATH/ipfs-update.tar.gz || err+="Download ipfs-update" diff --git a/.install/2b-configure_gammu.sh b/.install/2b-configure_gammu.sh index c4ce55c..5e84ddc 100755 --- a/.install/2b-configure_gammu.sh +++ b/.install/2b-configure_gammu.sh @@ -2,10 +2,9 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -source $MY_PATH/../.install/.GPATH ## Récupère les données du profile -[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile +[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile || echo -e "${c_red}Le .profile n'existe pas$c_" && exit 1 ## Désactive les processus écoutant le tty1 [[ $(sudo systemctl status getty@tty1.service | grep "loaded" 2>/dev/null) ]] && sudo systemctl stop getty@tty1.service && sudo systemctl disable getty@tty1.service @@ -31,6 +30,12 @@ fi ## Configure rc.local +if [[ ! -f /etc/rc.local ]]; then + sudo cp $MY_PATH/template/rc.local /etc/ +else + [[ ! $(grep "exit 0" /etc/rc.local) ]] && echo "exit 0" | tee -a /etc/rc.local +fi +sudo sed -i "/exit 0/i $GPATH/debug/GSM_powerkey.sh\ngammu-smsd-inject TEXT \"0647683646\" -text \"G1sms Plus démarré.\"" /etc/rc.local exit 0 diff --git a/.install/3-install_copylaradio.sh b/.install/3-install_copylaradio.sh index 4d6ba10..97ca305 100755 --- a/.install/3-install_copylaradio.sh +++ b/.install/3-install_copylaradio.sh @@ -2,9 +2,9 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -templates="$MY_PATH/templates/3" +source $MY_PATH/../.profile -isARM=$(cat $MY_PATH/.OS | grep YES) +templates="$MY_PATH/templates/3" ################################## ## INSTALL TOOLS @@ -27,7 +27,7 @@ sudo apt-get install ca-certificates git-core binutils rsync alsa-utils bc libid wget http://launchpadlibrarian.net/339874908/libav-tools_3.3.4-2_all.deb -O $MY_PATH/libav-tools.deb wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico-data_1.0+git20130326-3_all.deb -O $MY_PATH/libttspico-data.deb -if [[ $isARM ]]; then +if [[ $ARM == "yes" ]]; then wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico0_1.0+git20130326-3_armhf.deb -O $MY_PATH/libttspico0.deb wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico-utils_1.0+git20130326-3_armhf.deb -O $MY_PATH/libttspico-utils.deb else diff --git a/.install/4a-install_kalkun.sh b/.install/4a-install_kalkun.sh index e35ffce..292785d 100755 --- a/.install/4a-install_kalkun.sh +++ b/.install/4a-install_kalkun.sh @@ -3,13 +3,12 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile +[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile || echo -e "${c_red}Le .profile n'existe pas$c_" && exit 1 unset err args=$@ [[ $args =~ noask ]] && noask=o && askSSL=o -OS=$(head -n1 $MY_PATH/.OS) IP=$(ifconfig | grep "inet " | grep -v "127.0.0.1" | awk '{ print $2 }') if [[ -z $KSMS_DOMAIN ]]; then echo -e "${c_yellow}Choisissez un nom de domaine pour KALKUN (Sinon $IP sera choisi): $c_" && read KSMS_DOMAIN diff --git a/.install/4b-install_playsms.sh b/.install/4b-install_playsms.sh index 594d638..6e5db09 100755 --- a/.install/4b-install_playsms.sh +++ b/.install/4b-install_playsms.sh @@ -54,7 +54,7 @@ sudo /usr/local/bin/playsmsd start if [[ -f /etc/rc.local ]]; then [[ ! $(grep playsmsd /etc/rc.local) ]] && sudo sed -i '/^exit 0.*/i /usr/local/bin/playsmsd start' /etc/rc.local else - echo "/usr/local/bin/playsmsd start" | sudo tee /etc/rc.local + echo "/usr/local/bin/playsmsd start" | sudo tee -a /etc/rc.local fi ## Tests diff --git a/.install/5-install_rompr.sh b/.install/5-install_rompr.sh index 987c507..fcb3020 100755 --- a/.install/5-install_rompr.sh +++ b/.install/5-install_rompr.sh @@ -1,7 +1,7 @@ #!/bin/bash MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -source $MY_PATH/../.install/.GPATH +[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile || echo -e "${c_red}Le .profile n'existe pas$c_" && exit 1 GPATHS=$(echo $GPATH | sed 's./.\\/.g') diff --git a/.install/6-install-bbot.sh b/.install/6-install-bbot.sh new file mode 100755 index 0000000..a8918d7 --- /dev/null +++ b/.install/6-install-bbot.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized + +[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile || echo -e "${c_red}Le .profile n'existe pas$c_" && exit 1 + +## Install node 13 via NVM +if [[ -z $(which node) ]]; then + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash + nvm install 13 + nvm use 13 +fi + +## install pm2 for deamoning +[[ -z $(which pm2) ]] && npm install pm2 -g + +## Install g1bot +[[ ! -d $GPATH/deps ]] && mkdir $GPATH/deps +cd $GPATH/deps/ +[[ -d g1bot ]] && echo "g1bot est déjà installé" && exit 1 +git clone https://git.p2p.legal/axiom-team/g1bot.git g1bot && cd g1bot || exit 1 +npm install +cp .env.example .env +echo "Now edit url and password in .env in 3 seconds ..." && sleep 3 +nano .env + +export NODE_PATH=$GPATH/deps/g1bot/node_modules:$NODE_PATH +[[ -z $(grep "NODE_PATH=" ~/.bashrc) ]] && echo "export NODE_PATH=$GPATH/deps/g1bot/node_modules:$NODE_PATH" >> ~/.bashrc +pm2 kill && sleep 1 +pm2 start bbot.js && echo "${c_green}BBOT a été correctement installé et a pu démarrer$c_" || echo "$c{c_gree,}BBOT n'a pas pu démarrer$c_" + +exit 0 diff --git a/.install/templates/.profile b/.install/templates/.profile index c32b4b1..d683433 100644 --- a/.install/templates/.profile +++ b/.install/templates/.profile @@ -1,6 +1,15 @@ +### PROFILE ### + ADMINPSEUDO=_ADMINPSEUDO ADMINPHONE=_ADMINPHONE MASTERPHONE=_MASTERPHONE ADRESSE="_ADRESSE" PIN=_PIN KSMS_DOMAIN= + +### SYSTEME ### + +GPATH=_GPATH +OS=_OS +ARM=_ARM + diff --git a/.install/templates/1/ipfs.service b/.install/templates/1/ipfs.service index 20602e5..9804e8c 100644 --- a/.install/templates/1/ipfs.service +++ b/.install/templates/1/ipfs.service @@ -4,7 +4,7 @@ After=network.target [Service] User=_USER -ExecStart=/usr/local/bin/ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub --routing=dhtclient --enable-gc +ExecStart=/usr/local/bin/ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub --enable-gc Restart=on-failure [Install] diff --git a/.install/templates/4a/kalkun.conf b/.install/templates/4a/kalkun.conf index 779ecd2..e958873 100644 --- a/.install/templates/4a/kalkun.conf +++ b/.install/templates/4a/kalkun.conf @@ -2,7 +2,7 @@ server { listen 80; listen 443; listen [::]:443 ssl; - server_name _DOMAIN; + server_name _DOMAIN 127.0.0.1 localhost; #add_header Content-Security-Policy upgrade-insecure-requests; #if ($http_x_forwarded_proto = "http") { return 301 https://$server_name$request_uri; } diff --git a/.install/templates/init.sh b/.install/templates/init.sh index 8a17973..2740646 100755 --- a/.install/templates/init.sh +++ b/.install/templates/init.sh @@ -7,19 +7,25 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -if [[ -f $MY_PATH/.install/.GPATH ]]; then source $MY_PATH/.install/.GPATH; fi -if [[ -f $MY_PATH/../.install/.GPATH ]]; then source $MY_PATH/../.install/.GPATH; fi +if [[ -f $MY_PATH/.profile ]]; then + source $MY_PATH/.profile +elif [[ -f $MY_PATH/../.profile ]]; then + source $MY_PATH/../.profile +else + echo -e "${c_red}Le .profile n'existe pas$c_" + exit 1 +fi +source /home/pi/.bash_aliases # Adapter les valeurs au contexte spatio-temporel du NODE G1SMS function log () { # log ($1=text) - if [ "$DOLOG" == "YES" ] - then - echo "$PHONE:$1" >> /tmp/g1sms.log - fi + if [ "$DOLOG" == "YES" ] + then + echo -e "$PHONE: $1" >> $logfile + fi } - ################################################################################################################################### fn_exists() { # appended double quote is an ugly trick to make sure we do get a string -- if $1 is not a known command, type does not output anything @@ -29,13 +35,12 @@ fn_exists() { if ! fn_exists gammu-smsd-inject; then log ":p) DESACTIVATION ENVOI DE SMS .............." function gammu-smsd-inject () { - log "$PHONE: >>> SENDING SMS $4 TO $2 " + log "$PHONE: >>> SENDING SMS $4 TO $2 " } else export G1SMS="YES" fi - export YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1); cd $GPATH ################################################################## diff --git a/.install/templates/rc.local b/.install/templates/rc.local new file mode 100644 index 0000000..7d39ed7 --- /dev/null +++ b/.install/templates/rc.local @@ -0,0 +1,20 @@ +#!/bin/sh -e +# +# rc.local +# +# This script is executed at the end of each multiuser runlevel. +# Make sure that the script will "exit 0" on success or any other +# value on error. +# +# In order to enable or disable this script just change the execution +# bits. +# +# By default this script does nothing. + +# Print the IP address +_IP=$(hostname -I) || true +if [ "$_IP" ]; then + printf "My IP address is %s\n" "$_IP" +fi + +exit 0 diff --git a/Dos_G1Billets.odt b/Dos_G1Billets.odt old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/_CopyLaRadio/copy.sh b/_CopyLaRadio/copy.sh index c94b441..216e45c 100755 --- a/_CopyLaRadio/copy.sh +++ b/_CopyLaRadio/copy.sh @@ -2,7 +2,14 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -source $MY_PATH/../.install/.GPATH +if [[ -f $MY_PATH/.profile ]]; then + source $MY_PATH/.profile +elif [[ -f $MY_PATH/../.profile ]]; then + source $MY_PATH/../.profile +else + echo -e "${c_red}Le .profile n'existe pas$c_" + exit 1 +fi # Clean /tmp/ytdl.list #echo > /tmp/ytdl.list diff --git a/_chain b/_chain new file mode 100755 index 0000000..a1c8920 --- /dev/null +++ b/_chain @@ -0,0 +1 @@ +QmWEyZDyn7XMM3pDFCBkDqC6XPAraTSLHbVD3h7geunNWy diff --git a/_comments b/_comments index 9293c49..28f1d77 100755 --- a/_comments +++ b/_comments @@ -178,6 +178,7 @@ OK 2019-12-20: NOW 2019-12-21: Various 2019-12-24: +<<<<<<< HEAD 2020-01-02: Noel merge code 2020-01-02: g1sms.preoni 2020-01-04: BACKUP @@ -185,3 +186,8 @@ OK 2020-01-06: silkaj TX init bad keys 2020-01-07: 2020-01-07: g1.presles.fr +======= +2019-12-26: SWARMKEY +2019-12-26: ipfs p2p listen /x/$YOU /ip4/127.0.0.1/tcp/80 +2019-12-26: ./wallets/sha256sum(PHONE) +>>>>>>> dev-multicanal diff --git a/_nanodate b/_nanodate new file mode 100755 index 0000000..95fdd35 --- /dev/null +++ b/_nanodate @@ -0,0 +1 @@ +1577378596986046001 diff --git a/bb_scripts/admins-chan.txt b/bb_scripts/admins-chan.txt new file mode 100644 index 0000000..710b2a3 --- /dev/null +++ b/bb_scripts/admins-chan.txt @@ -0,0 +1 @@ +biz-bot-admin diff --git a/bb_scripts/aide.js b/bb_scripts/aide.js new file mode 100644 index 0000000..d7bcd1c --- /dev/null +++ b/bb_scripts/aide.js @@ -0,0 +1,19 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; +const fs = require('fs'); +const util = require('util') + +bot.global.text({ + contains: ['biz aide','biz help'] +}, (b) => { + membres = exec("src/shell/aide.sh text", function(err, stdout, stderr) { + if (err) { + b.respond("Une erreur est survenue ...") + } else { + b.respond(stdout) + } + }); +}, { + id: 'biz-aide' +}); + diff --git a/bb_scripts/axiom.js b/bb_scripts/axiom.js new file mode 100644 index 0000000..7c4f85a --- /dev/null +++ b/bb_scripts/axiom.js @@ -0,0 +1,50 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; + +//ADMINS +//var adminRooms = exec("cat admins-chan.txt"); //cat admins-chan.txt"); + +bot.global.text({ + contains: ['axiom adhérent','axiom adhérents','axiom adherent','axiom adherents'] +}, (b) => { +// cmd = b.message.text + + if (b.message.user.room.type == "p") { + roomName = b.message.user.room.name + } else { + roomName = b.message.user.name + } + +// if (adminRooms.indexOf(roomName) == -1) { + if (['biz-bot-admin', 'poka', 'brad.pi', '_pole_financements', '_axiom_business_plan', 'compta-axiom', 'communication', '_recrutement'].includes(roomName)) { + cmd = "adherents" + process.env.hb_cmd = cmd + } else { + b.respond("Réservé aux administrateurs de l'association.") + } + + pubkey = exec("src/shell/helloasso.sh $hb_cmd", function(err, stdout, stderr) { + if (err) { + b.respond("Une erreur est survenue ...") + } else { + b.respond(stdout) + } + }); +}, { + id: 'axiom-adherents' +}); + +bot.global.text({ + contains: ['axiom cagnotte'] +}, (b) => { + membres = exec("src/shell/helloasso.sh cagnotte", function(err, stdout, stderr) { + if (err) { + b.respond("Une erreur est survenue ...") + } else { + b.respond(stdout) + } + }); +}, { + id: 'axiom-cagnotte' +}); + diff --git a/bb_scripts/debug.js b/bb_scripts/debug.js new file mode 100644 index 0000000..3fba54d --- /dev/null +++ b/bb_scripts/debug.js @@ -0,0 +1,17 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; +const util = require('util'); + +bot.global.text({ + contains: ['debug user'] +}, (b) => { + username = b.message +// const userId = res.message.user.id +// username = robot.adapter.api.get('users.info', { userId }) +// process.env.hb_username = username + b.reply("```" + util.inspect(username, {showHidden: false, depth: null}) + "```") + + +}, { + id: 'debug' +}); diff --git a/bb_scripts/disabled/examples.js b/bb_scripts/disabled/examples.js new file mode 100644 index 0000000..7866938 --- /dev/null +++ b/bb_scripts/disabled/examples.js @@ -0,0 +1,201 @@ +const bot = require('bbot') + +/** + * All branch examples start from the "global" conversation scope. + * We are working on features to provide branching within a conversational + * context, but as those methods are changing in the beta, they aren't included + * as examples to follow just yet. + */ + +/** + * Branch types are declared from their scope, see all available types here: + * http://bbot.chat/docs/path#builtforbranching + * + * `text` branches take the following arguments: + * - matcher: expression, semantic conditions object, or array of conditions + * - callback: to fire on successful match, given the state object (b) + * - [options]: object with `id` (string) and/or `force` (boolean) attributes + * + * Test with "Hello bots!" +*/ +bot.global.text(/(hi|hello).*bots?/, (b) => b.respond('Hello :wave:'), { + id: 'hello-bots' +}) + +/** + * `direct` branch type requires the bot to be explicitly addressed. + * + * `reply` instead of `respond` prepends messages with user's name. + * + * In Rocket.Chat all messages to a bot in a direct room have the name prepended + * by the Rocket.Chat SDK before it's processed by the bot framework. + * + * Test with "@brocket Hello" or just "Hello" in a DM. +*/ +bot.global.direct(/hi|hello/i, (b) => b.reply('Hey there.'), { + id: 'hello-direct' +}) + +/** + * `respondVia` allows using custom platform methods to dispatch response. + * + * Matcher conditions allow semantic attributes with a string or array of + * optional values to match against, possibly capturing content. + * Accepted atts: is, starts, ends, contains, excludes, after, before, range + * + * Test with "Hello anyone?" +*/ +bot.global.text({ + contains: ['hi', 'hello'] +}, (b) => b.respondVia('react', ':wave:'), { + id: 'hello-react' +}) + +/** + * Branch callbacks allow asynchronous responding, if they return a promise. + * State (b) includes branch matching attributes, see bbot.chat/docs/thought. + * + * Test with "@brocket ping back in 5 seconds" +*/ +bot.global.direct(/ping back in (\d*)/i, async (b) => { + const ms = parseInt(b.match[1]) * 1000 + await new Promise((resolve) => setTimeout(resolve, ms)) + return b.respond('Ping :ping_pong:') +}, { + id: 'ping-delay' +}) + +/** + * The `respond` method can accept attachment objects as well as strings. + * Rendering support depends on the message platform and adapter. In shell, + * it will display the fallback text. + * + * Test with "bot attach image" + */ +bot.global.text(/attach image/i, (b) => { + return b.respond({ + fallback: `See: https://www.wikiwand.com/en/Three_Laws_of_Robotics`, + image: `https://upload.wikimedia.org/wikipedia/en/8/8e/I_Robot_-_Runaround.jpg`, + title: { + text: `Asimov's Three Laws of Robotics`, + link: `https://www.wikiwand.com/en/Three_Laws_of_Robotics` + } + }) +}, { id: 'attach-image' }) + +/** + * The `envelope` provides helpers for adding rich-message payloads before + * responding. Preparing envelopes before dispatch also allows changing the + * user/room the envelope is addressed to or dispatching multiple envelopes. + * + * Test with "I want a prize" + */ +bot.global.text({ + contains: 'prize' +}, (b) => { + b.envelope.write('Choose your fate! 🚪... 🎁 ') + b.envelope.attach({ color: '#f4426e' }) + b.envelope.payload + .quickReply({ text: 'Door number 1' }) + .quickReply({ text: 'Door number 2' }) + .quickReply({ text: 'Door number 3' }) + return b.respond().catch((err) => console.error(err)) +}, { id: 'door-prize-intro' }) + +/** + * The `conditions` attribute contains results of semantic condition matching + * and capture groups. Each condition can be given a key for easy reference. + * + * Test with "what's behind door number 2" + */ +bot.global.text({ + door: { after: 'door', range: '1-3' } +}, (b) => { + switch (b.conditions.captured.door) { + case '1': return b.respond(`You win nothing 💔`) + case '2': return b.respond(`You win a monkey 🐒`) + case '3': return b.respond(`It's a new car!! 🚗`) + } +}, { id: 'door-prize-award' }) + +/** + * Branch callbacks can be async functions, to awaiting one or more processes + * before responding. This example uses API requests to fill a dynamic array + * of actions, using the url property to provide link action buttons. + * + * Test with "@brocket plan meeting" in a public or private room. + */ +bot.global.direct({ + is: 'plan meeting' +}, async (b) => { + if (bot.adapters.message.name !== 'rocketchat-message-adapter') return + b.envelope.write('Please review time zones in the room...') + const { id, type } = b.message.user.room + let room + const q = { roomId: id } + if (type === 'c') { + room = await bot.adapters.message.api.get('channels.members', q, true) + } else if (type === 'p') { + room = await bot.adapters.message.api.get('groups.members', q, true) + } else { + return b.respond('Sorry, that only works in channels and private groups.') + } + const offsets = room.members + .map((member) => member.utcOffset || undefined) + .filter((offset) => !!offset) + for (let utc of offsets) { + b.envelope.payload.quickReply({ + text: `🌐 UTC ${utc}`, + url: `https://www.timeanddate.com/worldclock/timezone/utc${utc}` + }) + } + b.respond() +}) + +/** + * @todo This example requires PR #11811 to be merged. Room names are undefined. +*/ +bot.global.text(/where am i/i, (b) => { + const { name, type } = b.message.user.room + switch (type) { + case 'c': return b.respond(`You're in the #${name} public channel.`) + case 'p': return b.respond(`You're in a private group called **${name}**.`) + case 'l': return b.respond(`You're in a livechat channel.`) + case 'd': return b.respond(`You're in a DM with me :hugging:`) + } +}, { + id: 'location-check' +}) + +/** + * Custom options can be added to the bot, with the full config utility of bBot, + * allowing them to be defined as environment variables, command line args or + * package.json attributes. Extend settings with a yargs option format. + * + * Try any of the following: + * - `node index.js --avatar ` + * - BOT_AVATAR= in .env + * - `{ "bot": { "avatar": "" } }` in package.json + */ +bot.settings.extend({ + avatar: { + 'type': 'string', + 'description': 'Set a custom avatar for your bot account profile' + } +}) + +/** + * The bot can access lower level methods of the Rocket.Chat SDK through the + * message adapter, once it's connected. This example sets an avatar on login. + * + * Try replacing the avatar configured in package.json with your own. + */ +bot.events.on('started', () => { + if (bot.adapters.message.name !== 'rocketchat-message-adapter') return + if (bot.settings.get('avatar')) { + bot.logger.info('Setting bot avatar') + bot.adapters.message.api.post('users.setAvatar', { + avatarUrl: bot.settings.get('avatar') + }) + } +}) diff --git a/bb_scripts/disabled/tpl.js b/bb_scripts/disabled/tpl.js new file mode 100644 index 0000000..5334b17 --- /dev/null +++ b/bb_scripts/disabled/tpl.js @@ -0,0 +1,33 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; +const fs = require('fs'); +const util = require('util') + +bot.global.text({ contains: [''] }, (b) => b.respond(""), { + id: 'id-tpl' +}) + +// -------- + +bot.global.text({ contains: [''] }, (b) => { + b.respond("") +}, { + id: 'id-tpl-2' +}); + +// -------- + +bot.global.text({ + contains: [''] +}, (b) => { + membres = exec("src/shell/.sh", function(err, stdout, stderr) { + if (err) { + b.respond("Une erreur est survenue ...") + } else { + b.respond(stdout) + } + }); +}, { + id: 'id-tpl-3' +}); + diff --git a/bb_scripts/disabled/url_metadata.js b/bb_scripts/disabled/url_metadata.js new file mode 100644 index 0000000..c74391b --- /dev/null +++ b/bb_scripts/disabled/url_metadata.js @@ -0,0 +1,57 @@ + +const bot = require('bbot'); +const request = require('request'); +const decodeEntities = require('decode-entities'); +//var decode = require('unescape'); + +var request_options = { + headers: { + 'User-Agent': 'crabot retrieving url metadata (https://wiki.crapaud-fou.org/crabot)' + } +}; + + + +bot.global.text(/(https?:\/\/[^ ,\)"\n]*)/ig, async (b) => { + // console.log(JSON.stringify(b.match, null, 2)); + for (url of b.match) { + // console.log(JSON.stringify(url, null, 2)); + if (!/(coa|pad)\.crapaud-fou\.org/.test(url)) { + request_options.url = url; + request(request_options, (err, res, body) => { + // console.log(JSON.stringify(res, null, 2)); + if (!err && res.statusCode === 200) { + var re = /]*>([^<]*)<\/title>/gi; + var match = re.exec(body); + if (match && match[1]) { + var extra = ""; + var link = res.request.uri.href; + link = link.replace(/[\?&]fbclid=.+/gi, ""); + link = link.replace(/[\?&]ncid=.+/gi, ""); +//kopa match[1] = match[1].replace("'", "'"); + if (/youtube.com/.test(link)) { + if (t = /[?&]v=([^&]+)/.exec(link)) { + link = "https://www.youtube.com/watch?v=" + t[1]; + extra += " - [no-cookie](https://www.youtube-nocookie.com/embed/" + t[1] + ")"; + extra += " - [invidious](https://invidio.us/watch?v=" + t[1] + ")"; + } + } + b.respond(decodeEntities("[>>>](" + link + ") _" + match[1].replace(/\n/g, " ").trim() + "_" + extra)); +// b.respond("\>\>\>\> _" + match[1].replace(/\n/g, " ").trim() + "_" + extra); + } + } else { + console.log('-----------------------------------'); + console.log('URL: ' + url); + console.log('ERR - - - - - - - - - - - - - - - -'); + console.log(JSON.stringify(err, null, 2)); + console.log('RES - - - - - - - - - - - - - - - -'); + console.log(JSON.stringify(res, null, 2)); + console.log('-----------------------------------'); + } + }); + } + await new Promise((resolve) => setTimeout(resolve, 1000)); + } +}, { + id: 'get-url-metadata' +}); diff --git a/bb_scripts/g1-info.js b/bb_scripts/g1-info.js new file mode 100644 index 0000000..c9048a1 --- /dev/null +++ b/bb_scripts/g1-info.js @@ -0,0 +1,35 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; + +bot.global.text({ + starts: ['pubkey','rib','brocket rib', 'brocket pubkey'] +}, (b) => { + username = b.message.user.name + cmd = b.message.text + process.env.hb_username = username + process.env.hb_cmd = cmd + pubkey = exec("src/shell/g1-infos.sh pubkey $hb_username \"$hb_cmd\"", function(err, stdout, stderr) { + if (err) { + b.respond("Une erreur est survenue ...") + } else { + b.respond(stdout) + } + }); +}, { + id: 'g1-pubkey' +}); + +bot.global.text({ + contains: ['membres g1','g1 membre','g1 membres'] +}, (b) => { + membres = exec("src/shell/g1-infos.sh membres", function(err, stdout, stderr) { + if (err) { + b.respond("Une erreur est survenue ...") + } else { + b.respond(stdout) + } + }); +}, { + id: 'g1-membres' +}); + diff --git a/bb_scripts/g1sms.js b/bb_scripts/g1sms.js new file mode 100644 index 0000000..e28bf24 --- /dev/null +++ b/bb_scripts/g1sms.js @@ -0,0 +1,20 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; +const fs = require('fs'); +const util = require('util') + +bot.global.text({ + contains: ['TEST BSMS'] +}, async (b) => { + await b.respond("Test de G1SMS ...") + const username = b.message.user.id + membres = exec("g1sms/test.sh chat", function(err, stdout, stderr) { + if (err) { + b.respond("Une erreur est survenue ...") + } else { + b.respond(stdout) + } + }); +}, { + id: 'sms-test' +}); diff --git a/bb_scripts/inc/aide.txt b/bb_scripts/inc/aide.txt new file mode 100644 index 0000000..c2f6770 --- /dev/null +++ b/bb_scripts/inc/aide.txt @@ -0,0 +1,11 @@ +*Voici ce que je sais faire ...* + +``` +- biz aide: Affiche cette aide +- biz liens: Donne des liens utiles +- index pads: Donne le lien vers l'index de nos pads +- membres: Affiche le nombre de membres actuelles de la Ğ1 +- pubkey [pseudo]: Affiche sa propre clé publique Ğ1 si [pseudo] n'est pas renseigné, ou bien celle du pseudo indiqué +- axiom adhérents: Affiche les adhérents de l'association +- axiom cagnotte: Affiche le status de la cagnotte de l'association +``` diff --git a/bb_scripts/inc/liens.txt b/bb_scripts/inc/liens.txt new file mode 100644 index 0000000..82ada1b --- /dev/null +++ b/bb_scripts/inc/liens.txt @@ -0,0 +1,6 @@ +index pad !! https://pad.p2p.legal/axiom_index-pads +Site officiel de l'association Axiom-Team !! https://axiom-team.fr/ +Forum de l'asso axiom-team !! https://forum.axiom-team.fr/ +Cloud publique axiom - Ressources Agora !! https://cloud.p2p.legal/s/DDbKi2pqdEmixS9 +Cloud interne axiom _(Nécessite un accès)_ !! https://cloud.p2p.legal/f/204193` + diff --git a/bb_scripts/inc/need-certif.txt b/bb_scripts/inc/need-certif.txt new file mode 100644 index 0000000..0dfbf1b --- /dev/null +++ b/bb_scripts/inc/need-certif.txt @@ -0,0 +1,9 @@ + +5 personnes membres vous connaissent-elles bien ? Peuvent-elles vous contacter ? Contacter votre entourage ? Avez-vous sauvegardé votre document de révocation ? Avez-vous installé un client local sur votre ordinateur/smartphone comme Cesium ? + +Si oui -> vous connaissez certainement ces personnes vous aussi, et pouvez leur demander. +Si non -> il va vous falloir créer des liens avec des membres, conformément à la **[licence](https://duniter.org/fr/wiki/licence-g1/)** que vous devez lire, comprendre et accepter. + +Je vous invite également à lire le **[guide du débutant](https://forum.monnaie-libre.fr/t/00-intro-guide-du-debutant-en-monnaie-libre-g1-june/2777)**, et surtout à vous renseigner sur les rencontres de présentation de la monnaie libre autour de chez vous, pour créer des relations humaines réelles. + +Bienvenue, et bonnes découvertes ! diff --git a/bb_scripts/inc/repliques-mlc.txt b/bb_scripts/inc/repliques-mlc.txt new file mode 100644 index 0000000..925b7a6 --- /dev/null +++ b/bb_scripts/inc/repliques-mlc.txt @@ -0,0 +1,6 @@ +OBSCURANTISTE! +MENTEUR! +Toute mlc ne sert qu'à nuire à l’eveil de conscience sur la création monétaire. +Avez vous déjà vérifié les arguments (fallacieux) servis par les rabatteurs de mlc? +Les mlc coutent un bras au profit des banques et de quelques « chiens de garde» de leur salaire en unl qui en découle (rabatteurs). +La plus grosse mlc de l’histoire j’ai analysé: La mlc argentine en 2001. Elle a permis l’emergence de Monsanto compagny en 2002. N’hésitez pas à vérifier. diff --git a/bb_scripts/jokes.js b/bb_scripts/jokes.js new file mode 100644 index 0000000..8e16f10 --- /dev/null +++ b/bb_scripts/jokes.js @@ -0,0 +1,23 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; +const fs = require('fs'); + +bot.global.text({ contains: ['vtfn','si tes pas content','si t\'es pas content'] }, (b) => b.respond(":arrow_right: https://vatefairecuireunnem.com/"), { + id: 'joke-vtfn' +}) + +bot.global.text({ contains: ['biz présente toi'] }, (b) => b.respond(":arrow_right: https://matiou.biz"), { + id: 'joke-presente' +}) + +// L'infernal matiou sur les MLC ... +let bizbi = fs.readFileSync('./src/inc/repliques-mlc.txt', 'utf8'); +bizbi = bizbi.split('\n') +function randomize(toRand) { + resultRand = toRand[Math.floor(Math.random()*toRand.length)] + return resultRand; +} +bot.global.text({ contains: ['mlc'] }, (b) => b.respond(randomize(bizbi)), { + id: 'joke-presente' +}) + diff --git a/bb_scripts/liens.js b/bb_scripts/liens.js new file mode 100644 index 0000000..d05c269 --- /dev/null +++ b/bb_scripts/liens.js @@ -0,0 +1,21 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; +const fs = require('fs'); +const util = require('util') + +bot.global.text({ + contains: ['biz lien','biz liens'] +}, (b) => { + cmd = b.message.text + process.env.hb_cmd = cmd + membres = exec("src/shell/liens.sh $hb_cmd", function(err, stdout, stderr) { + if (err) { + b.respond("Une erreur est survenue ...") + } else { + b.respond(stdout) + } + }); +}, { + id: 'biz-liens' +}); + diff --git a/bb_scripts/reactions.js b/bb_scripts/reactions.js new file mode 100644 index 0000000..ee7b58e --- /dev/null +++ b/bb_scripts/reactions.js @@ -0,0 +1,23 @@ + +const bot = require('bbot'); +const globe_delay = 60000; // 1 minute +var globe_said = {}; + +bot.global.text({ + contains: ['facebook', 'google', 'amazon', 'apple', 'microsoft', 'youtube'] +}, (b) => { + b.respondVia('react', ':hear_no_evil:'); +}, { + id: 'gafam-react' +}); + +bot.global.text( + /pe?tit? globe/i +, (b) => { + if (!globe_said[b.message.user.room] || new Date().getTime() > globe_said[b.message.user.room] + globe_delay) { + b.respond('![pti globe](https://crapaud-fou.org/images/chat-ptiglobe.png)'); + globe_said[b.message.user.room] = new Date().getTime(); + } +}, { + id: 'ptiglobe-direct' +}) diff --git a/bb_scripts/reload.js b/bb_scripts/reload.js new file mode 100644 index 0000000..a80b34b --- /dev/null +++ b/bb_scripts/reload.js @@ -0,0 +1,22 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; + +bot.global.text({ + is: ['biz reload'] +}, (b) => { + function reload() { + pubkey = exec("pm2 reload bbot --force", function(err, stdout, stderr) { + if (err) { + b.respond("Une erreur est survenue: " + " - " + stderr) + } else { + b.respond("Biz a été rechargé") + } + }); + }; + + b.respond("Biz redémarre ... OK dans 5 secondes") + setTimeout(reload, 10); + +}, { + id: 'reload-scripts' +}); diff --git a/bb_scripts/repondeur.js b/bb_scripts/repondeur.js new file mode 100644 index 0000000..6e3b5a2 --- /dev/null +++ b/bb_scripts/repondeur.js @@ -0,0 +1,12 @@ +const bot = require('bbot'); +const exec = require('child_process').exec; +const fs = require('fs'); +const util = require('util') + +bot.global.text({ contains: ['me certifier','me faire certifier','je cherche une certification','je cherche des certifications'] }, (b) => { + // Lisez la licence Ḡ1 ... + let newml = fs.readFileSync('./src/inc/need-certif.txt', 'utf8'); + b.respond("Bonjour, et bienvenue @" + b.message.user.name + " ! =)" + newml) +}, { + id: 'rep-certif' +}); diff --git a/bb_scripts/shell/aide.sh b/bb_scripts/shell/aide.sh new file mode 100755 index 0000000..6e4ea10 --- /dev/null +++ b/bb_scripts/shell/aide.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +auto() { + echo "*Je suis l'aide auto*" + cd src + + #cmds=$(grep "^bot\." *.js -A3 | grep -E "\['|aide = ") + cmds=$(grep "\['" *.js | awk -F "[" '{ print $2 }' | awk -F "]" '{ print $1 }') + IFS=$'\n' + for i in $cmds; do + echo "$i" | awk -F "'" '{ print $2 }' + done +} + +text() { + cat src/inc/aide.txt +} + +$@ + +exit 0 diff --git a/bb_scripts/shell/g1-infos.sh b/bb_scripts/shell/g1-infos.sh new file mode 100755 index 0000000..d403868 --- /dev/null +++ b/bb_scripts/shell/g1-infos.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +node="https://duniter-g1.p2p.legal" + +pubkey() { + url="$node/wot/members" + if [[ "$@" =~ "brocket" ]]; then + [[ $4 ]] && username=$4 || username=$1 + else + [[ $3 ]] && username=$3 || username=$1 + fi + username=$(echo $username | tr -d '@') + local pubkey=$(curl -m 5 -s $url | grep -w -i -B 1 $username | grep "pubkey" | awk -F '"' '{ print $4 }') + # TODO: local pubkey=$(curl -m 5 -s $url | jq -r --arg username "$username" '.results[] | select(.uid=="$username") | .pubkey') + [[ $pubkey ]] && echo "@$username Ta clé publique Ğ1 est: $pubkey" || echo "@$username n'est pas pseudo membre de la Ḡ1" +} + + +membres() { + url="$node/blockchain/current" + local nbr_membres=$(curl -m 5 -s $url | jq '.membersCount') + [[ $nbr_membres ]] && echo "Il y a actuellement $nbr_membres membres de la Ğ1 !" || echo "Service en maintenance, réessayez dans un instant :coffee:" +} + + +$@ + +exit 0 diff --git a/bb_scripts/shell/helloasso.sh b/bb_scripts/shell/helloasso.sh new file mode 100755 index 0000000..9de454d --- /dev/null +++ b/bb_scripts/shell/helloasso.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +source ~/.adm/helloasso/ids +ha="https://api.helloasso.com/v3" + +adherents() { + url="$ha/campaigns/000001053192/actions.json?type" + list=$(curl -m 5 --user $ids -s $url | jq -r '.resources[] | .date + " , " + .first_name + " " + .last_name + " - " + .email' | sed 's/T.*,//') + + echo "$list" | awk '!seen[$3]++' + + nbrAdherents=$(echo "$list" | awk '!seen[$3]++' | wc -l) + + echo "---" + echo -e "\n Il y a actuellement **$nbrAdherents adhérents** de l'association Axiom-Team." + +} + +adherentsSoft() { + url="$ha/campaigns/000001053192/actions.json?type" + curl -m 5 --user $ids -s $url | jq -r '.resources[] | .date + " , " + .first_name + " " + .last_name' | sed 's/T.*,//' +} + + +cagnotte() { + url="$ha/campaigns/000001053192.json" + list=$(curl -m 5 --user $ids -s $url | jq -r '.name, {"Donnateurs": .supporters},{"Fonds":.funding},.url' | tr -d '{|}') +# list=$(curl -m 5 --user $ids -s $url | jq -r '{"Donnateurs": .supporters},{"Fonds":.funding},.url' | tr -d '{|}') + + name=$(echo "$list" | head -n1) + url=$(echo "$list" | tail -n1) + donnateurs=$(echo "$list" | grep "Donnateurs" | awk '{ print $2 }') + fonds=$(echo "$list" | grep "Fonds" | awk '{ print $2 }') + + echo "Il y a **${fonds}€** pour **$donnateurs donnateurs** sur la cagnotte **\"$name\"**" + +} + + +$@ + +exit 0 diff --git a/bb_scripts/shell/liens.sh b/bb_scripts/shell/liens.sh new file mode 100755 index 0000000..3412421 --- /dev/null +++ b/bb_scripts/shell/liens.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +if [[ -z $3 ]]; then + res=$(sed 's/!!/:arrow_right:/g' src/inc/liens.txt) +else + shift 2 + res=$(sed 's/!!/:arrow_right:/g' src/inc/liens.txt | grep -i "$@") +fi + +[[ $res ]] && echo "$res" || echo "Aucun lien trouvé avec **$@**" + +exit 0 diff --git a/debug/GSM_powerkey.sh b/debug/GSM_powerkey.sh index 5526df2..9a4e357 100755 --- a/debug/GSM_powerkey.sh +++ b/debug/GSM_powerkey.sh @@ -9,6 +9,8 @@ if [ ! -e /sys/class/gpio/gpio4 ]; then fi echo "out" > /sys/class/gpio/gpio4/direction +echo "0" > /sys/class/gpio/gpio4/value +sleep 3 echo "1" > /sys/class/gpio/gpio4/value sleep 3 && $MY_PATH/gammu-restart.sh diff --git a/install.sh b/install.sh index e44d8bb..52cc832 100755 --- a/install.sh +++ b/install.sh @@ -7,8 +7,6 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -echo "GPATH=$MY_PATH" > $MY_PATH/.install/.GPATH -source $MY_PATH/.install/.GPATH init_loc="$MY_PATH/shell/init.sh" now=$(date +%Y-%m-%d) @@ -17,19 +15,36 @@ unset err ## Récupère les données du profile [[ -f $MY_PATH/.profile ]] && source $MY_PATH/.profile +help() { + clear + echo -e "${c_light}Bienvenue à bord de Ḡ1Bot !$c_ +Laissez vous guider par cet installeur, ou bien renseignez lui en argument: + - all : Répond oui à tous sans poser de questions + - noptions : Ne propose d'installer aucune options, juste le minimum + - force : Met à jour les dépendances + - noask : Ne demande pas de confirmations aux questions + +Si vous souhaitez installer un composant précis, vous pouvez executer directement les scripts présents dans le dossier \".install/\" +" + exit 0 +} + ## Récupère les arguments args="$@" [[ $args =~ all ]] && repOption=o [[ $args =~ noptions ]] && repOption=n [[ $args =~ force ]] && force_req=o [[ $args =~ noask ]] && noask=o +[[ $args =~ ^(help|-h|--help|aide)$ ]] && help ## Vérifie le type de système -[[ $(uname -a | grep arm) ]] && isARM=YES || unset isARM +[[ $(uname -a | grep arm) ]] && ARM=yes || unset isARM if [[ $(grep -E 'stretch|18.|19.' /etc/os-release) ]]; then OS=stretch; elif [[ $(grep buster /etc/os-release) ]]; then OS=buster; else echo "${c_red}Votre OS n'est pas supporté$c_"; exit 1; fi -echo -e "$OS\n$isARM" > .install/.OS +sed -i 's/_OS/$OS/g' $MY_PATH/.profile +sed -i 's/_ARM/$ARM/g' $MY_PATH/.profile +sed -i 's/_GPATH/$MY_PATH/g' $MY_PATH/.profile unset err @@ -79,18 +94,21 @@ if [[ -f $MY_PATH/.install/templates/init.sh ]]; then [[ -f shell/init.sh ]] && mv shell/init.sh shell/init.sh.old cp $MY_PATH/.install/templates/init.sh shell/init.sh || err+=1 - sed -i s/_MASTERPHONE/$MASTERPHONE/g $init_loc - sed -i s/_ADRESSE/$ADRESSE/g $init_loc - sed -i s/_ADMINPHONE/$ADMINPHONE/g $init_loc - sed -i s/_ADMINPSEUDO/$ADMINPSEUDO/g $init_loc + sed -i "s/_MASTERPHONE/$MASTERPHONE/g" $init_loc + sed -i "s/_ADRESSE/$ADRESSE/g" $init_loc + sed -i "s/_ADMINPHONE/$ADMINPHONE/g" $init_loc + sed -i "s/_ADMINPSEUDO/$ADMINPSEUDO/g" $init_loc if [[ ! -f $MY_PATH/.profile ]]; then cp $MY_PATH/.install/templates/.profile $MY_PATH/ - sed -i s/_MASTERPHONE/$MASTERPHONE/g $MY_PATH/.profile - sed -i s/_ADRESSE/$ADRESSE/g $MY_PATH/.profile - sed -i s/_ADMINPHONE/$ADMINPHONE/g $MY_PATH/.profile - sed -i s/_ADMINPSEUDO/$ADMINPSEUDO/g $MY_PATH/.profile - sed -i s/_PIN/$PIN/g $MY_PATH/.profile + sed -i "s/_MASTERPHONE/$MASTERPHONE/g" $MY_PATH/.profile + sed -i "s/_ADRESSE/$ADRESSE/g" $MY_PATH/.profile + sed -i "s/_ADMINPHONE/$ADMINPHONE/g" $MY_PATH/.profile + sed -i "s/_ADMINPSEUDO/$ADMINPSEUDO/g" $MY_PATH/.profile + sed -i "s/_PIN/$PIN/g" $MY_PATH/.profile + sed -i "s/_OS/$OS/g" $MY_PATH/.profile + sed -i "s/_ARM/$ARM/g" $MY_PATH/.profile + sed -i "s/_GPATH/$MY_PATH/g" $MY_PATH/.profile fi else @@ -111,6 +129,8 @@ if [[ $repOption =~ ^(o|1|yes|options|a|all)$ ]]; then $MY_PATH/.install/3-insta if [[ $repOption =~ ^(o|1|yes|options|a|all)$ ]]; then isKalkun=1; $MY_PATH/.install/4a-install_kalkun.sh || err+=1; fi; repOption=$repOld [[ -z $repOption && -z $isKalkun ]] && echo -e "${c_yellow}Voulez-vous installer l'interface web playSMS ? (o/n)$c_" && read repOption if [[ $repOption =~ ^(o|1|yes|options|a|all)$ ]]; then $MY_PATH/.install/4b-install_playsms.sh || err+=1; fi; repOption=$repOld +[[ -z $repOption ]] && echo -e "${c_yellow}Voulez-vous installer BBOT ? (o/n)$c_" && read repOption +if [[ $repOption =~ ^(o|1|yes|options|a|all)$ ]]; then $MY_PATH/.install/6-install-bbot.sh || err+=1; fi; repOption=$repOld if [[ $err ]]; then echo -e "---\n${c_red}L'installation générale n'est mal déroulé =($c_" diff --git a/shell/G1Anar.png b/shell/G1Anar.png old mode 100644 new mode 100755 diff --git a/shell/G1Billet_LOVE.png b/shell/G1Billet_LOVE.png old mode 100644 new mode 100755 diff --git a/shell/Oeuro.jpg b/shell/Oeuro.jpg old mode 100644 new mode 100755 diff --git a/shell/OneLove.jpg b/shell/OneLove.jpg old mode 100644 new mode 100755 diff --git a/shell/TAG_fond.jpg b/shell/TAG_fond.jpg old mode 100644 new mode 100755 diff --git a/shell/TAG_fond_G1Tx.jpg b/shell/TAG_fond_G1Tx.jpg old mode 100644 new mode 100755 diff --git a/shell/cron_CODE.backup.sh b/shell/cron_CODE.backup.sh index a62825c..683e972 100755 --- a/shell/cron_CODE.backup.sh +++ b/shell/cron_CODE.backup.sh @@ -3,7 +3,7 @@ # Author: Fred (support@qo-op.com) # Version: 0.1 # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) -# BACKUP G1sms+ current Devlt code and push it with SWARM_CODE_MASTER to IPFS +# BACKUP G1sms+ current Devlt code and push it with NODE_G1AUTHFILE encryption to IPFS ################################################################################ source ./shell/init.sh source ./shell/functions.sh diff --git a/shell/cron_IPFS_open_SSH.sh b/shell/cron_IPFS_open_SSH.sh index 849e4c4..c4a3dc8 100755 --- a/shell/cron_IPFS_open_SSH.sh +++ b/shell/cron_IPFS_open_SSH.sh @@ -7,17 +7,32 @@ # Activate SUPPORT MODE: open ssh over IPFS MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -if [[ -f $MY_PATH/.install/.GPATH ]]; then source $MY_PATH/.install/.GPATH; fi -if [[ -f $MY_PATH/../.install/.GPATH ]]; then source $MY_PATH/../.install/.GPATH; fi - -YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) -if [[ "$USER" != "root" ]]; then echo "Hey, $USER you must at least be admin of your system (sudo $0)"; exit; fi -if [[ "$YOU" == "" || "$YOU" == "root" ]]; then echo "BAD IPFS. Aucune installation IPFS satisfaisante ici... Ciao $YOU !"; exit; fi -IPFSNODEID=$(su $YOU -c "ipfs id -f='\n'") +if [[ -f $MY_PATH/.profile ]]; then + source $MY_PATH/.profile +elif [[ -f $MY_PATH/../.profile ]]; then + source $MY_PATH/../.profile +else + echo -e "${c_red}Le .profile n'existe pas$c_" + exit 1 +fi cd $GPATH +if [[ "$USER" != "root" ]]; then echo "Hey, $USER you must at least be admin of your system (sudo $0)"; exit; fi +YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) + su $YOU -c "ipfs p2p close --all" su $YOU -c "ipfs p2p listen /x/ssh /ip4/127.0.0.1/tcp/22" su $YOU -c "ipfs p2p listen /x/http /ip4/127.0.0.1/tcp/80" su $YOU -c "ipfs p2p listen /x/https /ip4/127.0.0.1/tcp/443" -su $YOU -c "ipfs p2p ls" \ No newline at end of file +$(su $YOU -c "ipfs p2p ls") + +su $YOU -c "ipfs p2p close --all" +su $YOU -c "ipfs p2p listen /x/ssh /ip4/127.0.0.1/tcp/22" +su $YOU -c "ipfs p2p listen /x/http /ip4/127.0.0.1/tcp/80" +su $YOU -c "ipfs p2p listen /x/https /ip4/127.0.0.1/tcp/443" +su $YOU -c "ipfs p2p ls" +echo "================================== +CONNECT TO XPORT = ssh, http, https +XPORT=ssh +LOCALPORT=$((10000 + RANDOM % 64000)) +ipfs p2p forward /x/$XPORT /ip4/127.0.0.1/tcp/$LOCALPORT /ipfs/$IPFSNODEID" diff --git a/shell/cron_MINUTE.sh b/shell/cron_MINUTE.sh index a07be58..7c67728 100755 --- a/shell/cron_MINUTE.sh +++ b/shell/cron_MINUTE.sh @@ -10,8 +10,14 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -if [[ -f $MY_PATH/.install/.GPATH ]]; then source $MY_PATH/.install/.GPATH; fi -if [[ -f $MY_PATH/../.install/.GPATH ]]; then source $MY_PATH/../.install/.GPATH; fi +if [[ -f $MY_PATH/.profile ]]; then + source $MY_PATH/.profile +elif [[ -f $MY_PATH/../.profile ]]; then + source $MY_PATH/../.profile +else + echo -e "${c_red}Le .profile n'existe pas$c_" + exit 1 +fi YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) #if [[ "$USER" != "root" ]]; then echo "Hey, $USER you must at least be admin of your system (sudo $0)"; exit; fi # BUG because cron USER="" diff --git a/shell/cron_VIR.recurrent.sh b/shell/cron_VIR.recurrent.sh index 74723f0..0ee2286 100755 --- a/shell/cron_VIR.recurrent.sh +++ b/shell/cron_VIR.recurrent.sh @@ -42,7 +42,7 @@ while read line sms_INIT_ACCOUNT "$PHONE" "NOSMS" # echo -salt="$PHONE" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] VIR $REF / $NB" - PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] VIR $REF / $NB" -y) + PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$UIDNA" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] VIR $REF / $NB" -y) if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" ]]; then new=$(./shell/checknodes.sh "BAN") sms_ERROR "$PHONE" "Il est survenu un problème avec votre virement. Retour silkaj: $PAY ... $new"; diff --git a/shell/diceware-wordlist.txt b/shell/diceware-wordlist.txt old mode 100644 new mode 100755 diff --git a/shell/functions.sh b/shell/functions.sh index f28c4ec..a2345c2 100755 --- a/shell/functions.sh +++ b/shell/functions.sh @@ -17,23 +17,33 @@ MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized function sms_SEND () { # sms_SEND ($1=phone, $2=message) local dest="$1" + local dhash=$(echo -n $dest | sha256sum | cut -d ' ' -f 1) local mess="$2" + + # IF $dest looks like a phone number if [[ ${#dest} -eq 10 || ${#dest} -eq 12 ]]; then - if [[ -d ./wallets/$dest ]]; then - # TEST IF $dest IS ON CURRENT NODE - gammu-smsd-inject TEXT "$dest" -text "$mess" 1>&2 + # Search it in wallets_swarm + if [[ -d ./wallets_swarm/PHONE/$dhash ]]; then + DESTNODEID=$(cat ./wallets_swarm/PHONE/$dhash/MASTERPHONE.ipfsid) + # Other Node is managing wallet, write SMS task to it + if [[ "$DESTNODEID" != "" && "$DESTNODEID" != "$IPFSNODEID" ]]; then + log "$dest is managed by NODE: $DESTNODEID)" + mkdir -p "./wallets/.$DESTNODEID/SMS" + echo $mess > "./wallets/.$DESTNODEID/SMS/$dest.sms2send" + # Push changes to IPFS + I=$(ipfs_node_wallets_add) + else + # Send SMS from here + gammu-smsd-inject TEXT "$dest" -text "$mess" 1>&2 + fi else - # Send SMS through $dest NODE (TODO: send it like PRINT, TASK, ...) - DESTNODEID=$(cat ./wallets_swarm/$dest/MASTERPHONE.ipfsid) - log "$dest is managed by NODE: $DESTNODEID)" - mkdir "./wallets/.$DESTNODEID/SMS" - echo $mess > "./wallets/.$DESTNODEID/SMS/$dest.sms2send" - I=$(ipfs_node_wallets_add) + # Send SMS from here + gammu-smsd-inject TEXT "$dest" -text "$mess" 1>&2 fi - else - log ">>>>>>>>>>SMS ERROR BAD DESTINATION $dest" + else + log "${c_red}>>>>>>>>>>SMS ERROR BAD DESTINATION $dest$c_" fi - log ">>>>>>>>>> SENDING SMS $mess TO $dest ($DESTNODEID)" + log "${c_green}>>>>>>>>>> SENDING SMS$c_ \n$mess TO $dest via $DESTNODEID" } @@ -41,14 +51,14 @@ function sms_SEND () { function sms_ERROR () { # sms_ERROR ($1=phone, $2=message) local dest="$1" - local mess="[ERREUR] + local mess="[ERREUR] $2" if [[ ${#dest} -eq 10 || ${#dest} -eq 12 ]]; then gammu-smsd-inject TEXT "$dest" -text "$mess" 1>&2 else - log ">>>>>>>>>>SMS ERROR BAD DESTINATION $dest" + log "${c_red}>>>>>>>>>>SMS ERROR BAD DESTINATION$c_ $dest" fi - log ">>>>>>>>>> SENDING SMS $mess TO $dest" + log "${c_red}>>>>>>>>>> SENDING SMS$c_ \n$mess TO $dest" # SEND ERROR COPY TO ADMINPHONE if [[ "$CPERROR" == "YES" ]]; then sms_SEND "$ADMINPHONE" "ADMIN! ERROR ($dest): $mess"; fi } @@ -69,11 +79,11 @@ function security () { if [[ "$G1SMS" == "YES" ]]; then # ONLY OF gammu is really sending SMS on that NODE # No Reply to MySelf (or enjoy SMS LOOP of the death) Nobody neither - if [[ "$PHONE" == "$MASTERPHONE" || "$PHONE" == "" ]]; then log "__SUB:security: SMS REJECTED !! $PHONE $TEXT"; exit; fi + if [[ "$PHONE" == "$MASTERPHONE" || "$PHONE" == "" ]]; then log "${c_red}__SUB:security: SMS REJECTED !!$c_ $PHONE $TEXT"; exit; fi # ADAPT TO YOUR PHONE COMPANY / ADVERT ANNOYANCE - if [[ "$PHONE" == "Orange Info" ]]; then log "__SUB:security: SMS REJECTED !! $PHONE ADVERT $TEXT"; exit; fi - if [[ ${#PHONE} -ne 12 && ${#PHONE} -ne 46 ]]; then log "!! SMS REJECTED !! $PHONE BAD $TEXT"; exit; fi + if [[ "$PHONE" == "Orange Info" ]]; then log "${c_red}__SUB:security: SMS REJECTED !! $PHONE ADVERT$c_ $TEXT"; exit; fi + if [[ ${#PHONE} -ne 12 && ${#PHONE} -ne 46 ]]; then log "${c_red}!! SMS REJECTED !! $PHONE BAD$c_ $TEXT"; exit; fi fi # ANTI SPAM SMS (1 mn entre chaque commande) @@ -88,7 +98,7 @@ if [[ "$CMD" != "DELIVERED" && "$CMD" != "PENDING" ]]; then echo $(date) > "/tmp/sms_SPAM_$PHONE" fi log "__SUB:security: ################################" - log "__SUB:security: $PHONE COMMAND REJECTED: $TEXT" + log "${c_red}__SUB:security: $PHONE COMMAND REJECTED:$c_ $TEXT" exit fi echo "$TEXT" > "/tmp/sms_received_$PHONE" @@ -97,7 +107,7 @@ if [[ "$CMD" != "DELIVERED" && "$CMD" != "PENDING" ]]; then else # THIS IS AN AKNOWLEGEMENT log "__SUB:security: ################################" - log "__SUB:security: $PHONE COMMAND REJECTED: $TEXT" + log "${c_red}__SUB:security: $PHONE COMMAND REJECTED:$c_ $TEXT" exit fi # Remove SPAM flag older than one day @@ -115,27 +125,29 @@ I=$(ipfs_node_wallets_add) # REFRESH SWARM MEMORY mkdir -p "./wallets_swarm" chown -R $YOU "./wallets_swarm" -log "__SUB:ipfs_swarm_wallets_refresh: REFRESHING SWARM $PHONE shared memory..." -if [[ $PHONE ]]; then rm -Rf ./wallets_swarm/$PHONE; fi + +log "${yellow}__SUB:ipfs_swarm_wallets_refresh: REFRESHING SWARM $HASHLINK ($PHONE) shared memory...$c_" +if [[ $HASHLINK ]]; then rm -Rf ./wallets_swarm/PHONE/$HASHLINK; fi # GET IPNS published wallets from ALL SWARM NODES / TODO: IF NODES MISSING, check ./wallets_swarm/.QmNODES... #log "__SUB:ipfs_swarm_wallets_refresh: IPFS: ipfs get --output=./wallets_swarm/ /ipns/$IPFSNODEID" su $YOU -c "ipfs get --output=./wallets_swarm/ /ipns/$IPFSNODEID" count=1 -# Search for All peers Nodes. TODO: To be changed when Swarm is too bug or not expendanding -#for id in ./wallets/.Qm*/; +# Search for All peers Nodes. TODO: To be changed when Swarm is too big and stable +for id in ./wallets_swarm/.Qm*/; #for id in $(su $YOU -c "ipfs swarm peers" | awk -F '/' '{print $7}'); -#do -# count=$((count+1)) -# id=$(echo $id | cut -d '.' -f 3 | cut -d '/' -f 1) -# log "__SUB:ipfs_swarm_wallets_refresh: IPFS: ipfs get --output=./wallets_swarm/ /ipns/$id" -# rm -Rf ./wallets_swarm/.$id -# ./shell/timeout.sh -t 20 su $YOU -c "ipfs get --output=./wallets_swarm/ /ipns/$id" -#done -log "__SUB:ipfs_swarm_wallets_refresh: ./wallets_swarm/ RENEW from $count peers .........OK!!!" +do + count=$((count+1)) + id=$(echo $id | cut -d '.' -f 3 | cut -d '/' -f 1) + log "__SUB:ipfs_swarm_wallets_refresh: IPFS REFRESHING ./wallets_swarm/.$id" + rm -Rf ./wallets_swarm/.$id + su $YOU -c "ipfs get --output=./wallets_swarm/ /ipns/$id" +done +log "${c_green}__SUB:ipfs_swarm_wallets_refresh: ./wallets_swarm/ RENEW from $count peers .........OK!!!$c_" ############################################################################" +# TODO: MOVE AS GENERIC IPFS NODE DIALOG FUNCTION # TREAT move_g1cents Tasks in ./wallets/.$IPFSNODEID # IF NODE find in ./wallets_swarm/.$IPFSNODEID/TASK directory && Have it's G1 Wallet already (for natools crypto) if [[ "$1" != "SIMPLE" && -d ./wallets_swarm/.$IPFSNODEID/TASK && -f "./wallets/.$IPFSNODEID/$IPFSNODEID.authfile.GPGPASS.gpg" ]]; then @@ -146,7 +158,9 @@ do TNANO=$( echo $FTASK | cut -d '.' -f 1) # $NANODATE TTYPE=$( echo $FTASK | cut -d '.' -f 2) # move_g1cents TDEST=$( echo $FTASK | cut -d '.' -f 3) # $DESTPHONE - log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) FOUND TASK $TNANO:$TTYPE:$TDEST " + HDEST=$(echo -n $TDEST | sha256sum | cut -d ' ' -f 1) + + log "${c_yellow}__SUB:ipfs_swarm_wallets_refresh:$c_ .$IPFSNODEID($FTASK) FOUND TASK $TNANO:$TTYPE:$TDEST" # MAKE LOCAL .$IPFSNODEID directory mkdir -p ./wallets/.$IPFSNODEID/TASK/ # TODO: CHECK BETTER NOT DONE YET and $NANODATE > $TNANO (=> detect NODES writing in the future!!) @@ -161,30 +175,30 @@ do log "__SUB:ipfs_swarm_wallets_refresh: tdiff=$tdiff .$IPFSNODEID G1 = ./NODEG1Wallet.authfile :decrypt: Found $ZENVAL Zen to ADD" rm -f "./NODEG1Wallet.authfile" if [[ $ZENVAL -gt 0 ]]; then - curvalue=$(cat ./wallets/$TDEST/$TDEST.g1cents) + curvalue=$(cat ./wallets/PHONE/$HDEST/_g1cents) newvalue=$(bc -l <<< "$curvalue + $ZENVAL") - echo $newvalue > ./wallets/$TDEST/$TDEST.g1cents + echo $newvalue > ./wallets/PHONE/$HDEST/_g1cents echo "OK.$tdiff" > ./wallets/.$IPFSNODEID/TASK/done.$TNANO - log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) DONE! OPERATION: ($curvalue + $ZENVAL) = $newvalue Zen <=> ./wallets/$TDEST/$TDEST.g1cents:: OK" + log "${c_green}__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) DONE!$c_ OPERATION: ($curvalue + $ZENVAL) = $newvalue Zen <=> ./wallets/PHONE/$HDEST/_g1cents:: OK" # REFRESH ./wallets and PUBLISH I=$(ipfs_node_wallets_add) else echo "KO.$tdiff" > ./wallets/.$IPFSNODEID/TASK/done.$TNANO - log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) ERROR! BAD: ($curvalue + $ZENVAL) = $newvalue Zen <=> ./wallets/$TDEST/$TDEST.g1cents :: KO" + log "${red}__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) ERROR!$c_ BAD: ($curvalue + $ZENVAL) = $newvalue Zen <=> ./wallets/PHONE/$HDEST/_g1cents :: ${red}KO$c_" I=$(ipfs_node_wallets_add) - sms_SEND "$ADMINPHONE" "ADMIN! TASK ERROR: .$IPFSNODEID($FTASK) ERROR! BAD: ($curvalue + $ZENVAL) = $newvalue Zen <=> ./wallets/$TDEST/$TDEST.g1cents :: KO" + sms_SEND "$ADMINPHONE" "ADMIN! TASK ERROR: .$IPFSNODEID($FTASK) ERROR! BAD: ($curvalue + $ZENVAL) = $newvalue Zen <=> ./wallets/PHONE/$HDEST/_g1cents :: KO" fi else # TODO: Bad NODE in the Future task !!! Make better BAD Node detection = Swarm Banish? echo "KO.$tdiff" > ./wallets/.$IPFSNODEID/TASK/done.$TNANO - log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) ERROR! DATE PROBLEM: $NANODATE < $TNANO :: KO" + log "${red}__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) ERROR!$c_ DATE PROBLEM: $NANODATE < $TNANO :: ${red}KO$c_" I=$(ipfs_node_wallets_add) sms_SEND "$ADMINPHONE" "ADMIN! .$IPFSNODEID($FTASK) ERROR! DATE PROBLEM: $NANODATE < $TNANO :: KO" fi fi done - log "__SUB:ipfs_swarm_wallets_refresh: REMOVE OLD TASK MARKED AS DONE" + log "${c_yellow}__SUB:ipfs_swarm_wallets_refresh:$c_ REMOVE OLD TASK MARKED AS DONE" for scan in ./wallets_swarm/.Qm*/TASK/done.*; do lscan=$(echo $scan | sed s/_swarm//g ) lid=$(echo $scan | cut -d '/' -f 3 | cut -d '.' -f 2 ) @@ -196,7 +210,7 @@ done fi done else - log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID :: NO TASK ! " + log "${c_yellow}__SUB:ipfs_swarm_wallets_refresh:$c_ .$IPFSNODEID :: NO TASK !" ############################################################################" fi } @@ -210,251 +224,224 @@ function ipfs_node_wallets_add (){ # CHAIN STATE FOR $IPFSNODEID echo $IWALLETS > ./wallets/.$IPFSNODEID.wallets.chain - log "__SUB:ipfs_node_wallets_add: NEW './wallets' HASH ipfs ls $IWALLETS" + log "${c_yellow}__SUB:ipfs_node_wallets_add:$c_ NEW './wallets' HASH ipfs ls /ipfs/$IWALLETS" # PUBLISH IPNS NODE WALLETS NODEWALLETS=$(su $YOU -c "ipfs name publish --quieter /ipfs/$IWALLETS") - log "__SUB:ipfs_node_wallets_add: G1smsWallet = ipfs cat /ipns/$NODEWALLETS/$PHONE/$PHONE.g1cents Zen" + log "__SUB:ipfs_node_wallets_add: G1smsWallet = ipfs cat /ipns/$NODEWALLETS/PHONE/$HASHLINK/_g1cents Zen" echo $IWALLETS } ################################################################################################################################# -function sms_uid2key (){ - RIBFILE="./wallets/$PHONE/$PHONE.uidrib" - NAMEFILE="./wallets/$PHONE/$PHONE.uidname" - UIDNAFILE="./wallets/$PHONE/$PHONE.uidna" - # New related wallet asked +function sms_uid2pubkey (){ + ## USE $PHONE link instead of real local $HASHLINK directory + RIBFILE="./wallets/PHONE/$PHONE/_uidrib" + NAMEFILE="./wallets/PHONE/$PHONE/_uidname" + UIDNAFILE="./wallets/PHONE/$PHONE/_uidna" + + # ASKWALLET is ASKWALLET="$1" - #For micro payement + + #For Micro Payement to DESTRIB (for easy G1sms wallet find in Cesium wallet History) PHONE="$2" PIN="$3" - if -f "$UIDNAFILE"; then UIDNA=$(cat "$UIDNAFILE"); else UIDNA=""; fi - log "__SUB:sms_uid2key: $UIDNA Try to associate $ASKWALLET with $PHONE... SEARCHING..." + # Get PHONE wallet UIDNA name + if [[ -f "$UIDNAFILE" ]]; then UIDNA=$(cat "$UIDNAFILE"); else UIDNA=""; fi + log "__SUB:sms_uid2pubkey: $UIDNA Wallet ($PHONE) is trying to associate to $ASKWALLET... SEARCHING..." + + # Link to itSelf if [[ $UIDNA && "$ASKWALLET" == "$UIDNA" ]]; then - log "__SUB:sms_uid2key: "$ASKWALLET" == "$UIDNA" !!" - sms_SEND "$PHONE" "[G1sms+] $UIDNA est le nom de votre porte monnaie libre pour $PHONE. Il ne peut également être compte maître!" + log "__SUB:sms_uid2pubkey: "$ASKWALLET" == "$UIDNA" !!" + sms_SEND "$PHONE" "[G1sms+] $UIDNA est le nom de portefeuille G1sms. Il ne peut pas être associé à lui même!" fi - # Test if member files exists + # Test if _uidname file exists if [ -f "$NAMEFILE" ]; then + # Actuel related wallet UIDNAME=$(cat "$NAMEFILE") - log "__SUB:sms_uid2key: ALREADY $UIDNAME related Wallet for $PHONE Wallet change to $ASKWALLET !!" + log "__SUB:sms_uid2pubkey: Actual $UIDNA Wallet Related to $UIDNAME. Ask change to $ASKWALLET" if [["$UIDNAME" != "$ASKWALLET" ]]; then sms_SEND "$ADMINPHONE" "ADMIN! INFO: $PHONE Wallet associé à $UIDNAME change en $ASKWALLET !!" - sms_SEND "$PHONE" "[G1sms+] Votre portefeuille maitre va passer de $UIDNAME à $ASKWALLET!" + sms_SEND "$PHONE" "[G1sms+] Votre portefeuille associé va passer de $UIDNAME à $ASKWALLET!" fi fi - # Search fo duplicate - DUP=$(grep -Rwl "$ASKWALLET" ./wallets/*/*.uidname | cut -f 3 -d '/') - if [[ "$DUP" != "" && "$DUP" != "$PHONE" ]]; then + # Search fo duplicate (TODO: choose $PHONE result + DUP=$(grep -Rwl "$ASKWALLET" ./wallets/PHONE/*/_uidname | tail -n 1 | cut -f 4 -d '/') + if [[ "$DUP" != "" ]]; then sms_SEND "$ADMINPHONE" "ADMIN! INFO: $PHONE prend le même $ASKWALLET, que $DUP" - sms_SEND "$DUP" "Vous devez savoir que $ASKWALLET est associé à un autre téléphone que le votre également!" + sms_SEND "$DUP" "Votre portefeuille associé $ASKWALLET vient d'être associé à $PHONE également!" fi ########################################################### # FIND ASKWALLET into wallets, wallest_swarm OR duniter (silkaj) - DESTMEM="$VIRDEST" - # SEARCH IN WALLETS - LOCAL=$(grep -Rwl "$ASKWALLET" ./wallets/*/*.uidna | cut -f 3 -d '/') + DESTMEM="$VIRDEST" + # SEARCH IN WALLETS + LOCAL=$(grep -Rwl "$ASKWALLET" ./wallets/PHONE/*/_uidna | tail -n 1 | cut -f 4 -d '/') if [[ "$LOCAL" != "" ]]; then # LOCAL G1sms account - DESTRIB=$(cat ./wallets/$LOCAL/$LOCAL.pub) + DESTRIB=$(cat ./wallets/PHONE/$LOCAL/_pub) DESTPHONE=$LOCAL - log "__SUB:sms_uid2key: FOUND LOCAL ($MASTERPHONE) G1sms+ wallet: $DESTRIB ($LOCAL)" + log "${c_yellow}__SUB:sms_uid2pubkey:$c_ FOUND LOCAL ($MASTERPHONE) G1sms Wallet: $DESTRIB ($DESTPHONE)" else # SEARCH IN WALLETS SWARM - INSWARM=$(grep -Rwl "$ASKWALLET" ./wallets_swarm/*/*.uidna | cut -f 3 -d '/') + INSWARM=$(grep -Rwl "$ASKWALLET" ./wallets_swarm/PHONE/*/_uidna | tail -n 1 | cut -f 4 -d '/') if [[ "$INSWARM" != "" ]]; then - REMOTENODE=$(cat ./wallets_swarm/$INSWARM/MASTERPHONE.sms) - DESTRIB=$(cat ./wallets_swarm/$INSWARM/$INSWARM.pub) + REMOTENODE=$(cat ./wallets_swarm/PHONE/$INSWARM/MASTERPHONE.sms) + REMOTENODEIPFSID=$(cat ./wallets_swarm/PHONE/$INSWARM/MASTERPHONE.ipfsid) + DESTRIB=$(cat ./wallets_swarm/PHONE/$INSWARM/_pub) DESTPHONE=$INSWARM - log "__SUB:sms_uid2key: FOUND SWARM ($REMOTENODE) G1sms+ wallet: $DESTRIB ($INSWARM)" + log "${c_green}__SUB:sms_uid2pubkey: FOUND SWARM ($REMOTENODE) G1sms+ wallet: $DESTRIB ($DESTPHONE)$c_" else - # SEARCH WITH SILKAJ - log "__SUB:sms_uid2key: GETTING FROM SILKAJ MEMBER ID" + # SEARCH FOR DUNITER MEMBER WITH SILKAJ + log "__SUB:sms_uid2pubkey: GETTING FROM SILKAJ MEMBER ID" DESTRIB=$(./silkaj/silkaj id "$ASKWALLET" | grep -w "$ASKWALLET" | awk '{print $2}') - log "__SUB:sms_uid2key: OUT OFF SWARM MEMBER wallet: $DESTRIB" + log "__SUB:sms_uid2pubkey: OUT OFF SWARM MEMBER wallet: $DESTRIB" # GET CESIUM+ geoPoint DATA (TODO: cron for GCHANGE SMS Alert) - curl -s ${CESIUM}/user/profile/${DESTRIB} | jq '._source.geoPoint' > "./wallets/$PHONE/$PHONE.uidgeo.json" - log "__SUB:sms_uid2key: GET CESIUM+ geoPoint and AVATAR : $(cat ./wallets/$PHONE/$PHONE.uidgeo.json)" - curl -s ${CESIUM}/user/profile/${DESTRIB} | jq '._source.avatar._content' | sed 's/\"//g' | base64 -d > "./wallets/$PHONE/$PHONE.avatar.png" + curl -s ${CESIUM}/user/profile/${DESTRIB} | jq '._source.geoPoint' > "./wallets/PHONE/$PHONE/_uidgeo.json" + log "__SUB:sms_uid2pubkey: GET CESIUM+ geoPoint and AVATAR : $(cat ./wallets/PHONE/$PHONE/_uidgeo.json)" + curl -s ${CESIUM}/user/profile/${DESTRIB} | jq '._source.avatar._content' | sed 's/\"//g' | base64 -d > "./wallets/PHONE/$PHONE/_avatar.png" fi fi if [ "$DESTRIB" != "" ]; then echo "$DESTRIB" > "$RIBFILE" echo "$ASKWALLET" > "$NAMEFILE" - log "__SUB:sms_uid2key: NEW EXTERNAL RELATED $DESTRIB / FOR MEMBER OR WALLET = $ASKWALLET - INIT 0.1 TX" - INIT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="0.1" --output=$DESTRIB --comment="[G1sms+] Porte Monnaie $(cat $UIDNAFILE) -> $(cat $NAMEFILE)" -y) - log "__SUB:sms_uid2key: INIT = $INIT | Create Connection with related Wallet." + log "${c_yellow}__SUB:sms_uid2pubkey:$c_ NEW RELATED $DESTRIB FOR G1sms WALLET = $ASKWALLET - INIT 0.1 TX" + INIT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$UIDNA" -password="$PIN" --amount="0.1" --output=$DESTRIB --comment="[G1sms+] Porte Monnaie $(cat $UIDNAFILE) -> $(cat $NAMEFILE)" -y) + log "__SUB:sms_uid2pubkey: INIT = $INIT | Create Connection with related Wallet." log_history "$PHONE" "MEMBER, $ASKWALLET" - sms_SEND "$ADMINPHONE" "ADMIN! LOG: $PHONE Nouveau compte lié $UIDNA -- $ASKWALLET ($INIT)" + sms_SEND "$ADMINPHONE" "ADMIN! LOG: $PHONE ($UIDNA) Compte relié >> $ASKWALLET ($INIT)" else - sms_SEND "$ADMINPHONE" "ADMIN! LOG: $PHONE / $ASKWALLET ABSENT" + sms_SEND "$ADMINPHONE" "ADMIN! LOG: $PHONE ($UIDNA) RELIER A $ASKWALLET INCONNU" fi - log "__SUB:sms_uid2key: $MEMBER($DESTRIB)" + log "__SUB:sms_uid2pubkey: $MEMBER($DESTRIB)" echo "$DESTRIB" } ################################################################################################################################# function sms_INIT_ACCOUNT () { -log "__SUB:sms_INIT_ACCOUNT: ($1=phone, $2=NOSMS)" +log "${c_yellow}__SUB:sms_INIT_ACCOUNT:$c_ ($1=phone, $2=NOSMS)" PHONE="$1" UNKNOWN=0 - # TODO Optimize GLOBAL/local variables use, use more function array output ?! # Initiate PHONE settings files and values - IPFSNODEIDFILE="./wallets/$PHONE/MASTERPHONE.ipfsid" # Contains G1sms+ NODE IPFS id - SMSNODE="./wallets/$PHONE/MASTERPHONE.sms" # Contains G1sms+ SMS phone number - PINFILE="./wallets/$PHONE/$PHONE.pin" # Contains phone wallet diceware password - GPGPINFILE="./wallets/$PHONE/$PHONE.pin.gpg" # Contains g1smsnode cypher phone wallet diceware password - AUTHCRYPTFILE="./wallets/$PHONE/$PHONE.authfile.crypt" # Crypt with $NODE_G1PUBKEY - PUBKEYFILE="./wallets/$PHONE/$PHONE.pub" # Contains phone wallet public key (RIB) - UNITFILE="./wallets/$PHONE/$PHONE.unit" # Contains phone wallet prefered unit (LOVE,G1,DU) - RIBFILE="./wallets/$PHONE/$PHONE.uidrib" # Contains phone wallet related UID Pubkey - NAMEFILE="./wallets/$PHONE/$PHONE.uidname" # Contains the member UID related to wallet - MAILFILE="./wallets/$PHONE/$PHONE.email" # Contains the member EMAIL (Send BILLET) - HMAILFILE="./wallets/$PHONE/_email.sha" # Contains sha256 EMAIL (Email CMD wallet owner search) - GPGMAILFILE="./wallets/$PHONE/$PHONE.email.gpg" # Contains the member EMAIL (Send BILLET) - UIDNAFILE="./wallets/$PHONE/$PHONE.uidna" # Contains the G1sms+ UID Name for recursive VIR - GEOFILE="./wallets/$PHONE/$PHONE.uidgeo.json" # Contains the member GeoPoint from member Cesium+ related to wallet + # WALLETS INTO ./wallets/CHANNEL/sha256sum(PHONE) + HASHLINK=$(echo -n $PHONE | sha256sum | cut -d ' ' -f 1) + # WALLETS INTO ./wallets/CHANNEL/sha256sum(PHONE) - RECFILE="./wallets/$PHONE/VIREMENTS" # File showing recurrent payements are left to be done with this G1sms Wallet - GPGRECFILE="./wallets/$PHONE/VIREMENTS.gpg" # Cypher file with GPGPASS (Node .Identity.PrivKey) - G1COUNTFILE="./wallets/$PHONE/$PHONE.g1cents" # Last sms_COUNT.sh call value - CHAINFILE="./wallets/$PHONE/$PHONE.chain" # Contains wallet last IPFS hash before ZEN value change + IPFSNODEIDFILE="./wallets/PHONE/$PHONE/MASTERPHONE.ipfsid" # Contains G1sms+ NODE IPFS id + SMSNODE="./wallets/PHONE/$PHONE/MASTERPHONE.sms" # Contains G1sms+ SMS phone number + PINFILE="./wallets/PHONE/$PHONE/_pin" # Contains phone wallet diceware password + GPGPINFILE="./wallets/PHONE/$PHONE/_pin.gpg" # Contains g1smsnode cypher phone wallet diceware password + AUTHCRYPTFILE="./wallets/PHONE/$PHONE/_authfile.node.crypt" # authfile backup cyphered by Node G1 Pubkey + PUBKEYFILE="./wallets/PHONE/$PHONE/_pub" # Contains phone wallet public key (RIB) + UNITFILE="./wallets/PHONE/$PHONE/_unit" # Contains phone wallet prefered unit (LOVE,G1,DU) - DABUIDF="./wallets/$PHONE/uidna.G1TAGNODE" # Contains G1Dab Name + RIBFILE="./wallets/PHONE/$PHONE/_uidrib" # Contains phone wallet related UID Pubkey + NAMEFILE="./wallets/PHONE/$PHONE/_uidname" # Contains Related MEMBER UID or Wallet UIDNA + MAILFILE="./wallets/PHONE/$PHONE/_email" # Contains the member EMAIL (Send BILLET) + GPGMAILFILE="./wallets/PHONE/$PHONE/_email.gpg" # Contains the member EMAIL (Send BILLET) + UIDNAFILE="./wallets/PHONE/$PHONE/_uidna" # Contains the G1sms+ UID Name for recursive VIR + GEOFILE="./wallets/PHONE/$PHONE/_uidgeo.json" # Contains the member GeoPoint from member Cesium+ related to wallet + + RECFILE="./wallets/PHONE/$PHONE/VIREMENTS" # File showing recurrent payements are left to be done with this G1sms Wallet + GPGRECFILE="./wallets/PHONE/$PHONE/VIREMENTS.gpg" # Cypher file with GPGPASS (Node .Identity.PrivKey) + G1COUNTFILE="./wallets/PHONE/$PHONE/_g1cents" # Last sms_COUNT.sh call value + CHAINFILE="./wallets/PHONE/$PHONE/_chain" # Contains wallet last IPFS hash before ZEN value change + NNFILE="./wallets/PHONE/$PHONE/_n" # Contains Changes Number + + DABUIDF="./wallets/PHONE/$PHONE/uidna.G1TAGNODE" # Contains G1Dab Name # GET CURRENT NODE UIDNA (default DABUID) - NODEUIDNA=$(cat "./wallets/.$IPFSNODEID/$IPFSNODEID.uidna") - [[ $NODEUIDNA == "" ]] && NODEUIDNA=$(cat "./wallets/.$IPFSNODEID/_uidna") -###################################################################### - # (NO PIN) = FIRST ACCOUNT: Create wallet + NODEUIDNA=$(cat "./wallets/.$IPFSNODEID/_uidna") + + ###################################################################### + ###################################################################### + # (NO $PINFILE) = FIRST ACCOUNT: Create wallet + ###################################################################### if [ ! -f "$PINFILE" ]; then - # NOSMS mode? + # NOSMS mode? = DO NOT CREATE if [[ $2 == "NOSMS" ]]; then UNKNOWN="unknown"; return; fi ####################### # Create Account Files ####################### - mkdir -p "./wallets/$PHONE/" - PIN=$(./shell/diceware.sh | xargs) - PUBKEY=$(./silkaj/silkaj generate_auth_file --auth-scrypt -salt="$PHONE" -password="$PIN") + if [[ ! -d ./wallets/PHONE/$HASHLINK ]]; then + mkdir -p ./wallets/PHONE/$HASHLINK + ln -s ./wallets/PHONE/$HASHLINK ./wallets/PHONE/$PHONE + fi + # LINKS ARE NOT REPLICATED INTO IPFS ;) - # BACKUP authfile available to authfile or PIN owner (DOUBLON AVEC PIN) TEST - log "__SUB:sms_INIT_ACCOUNT: ./shell/natools.py encrypt -p $PUBKEY -i ""./authfile"" -o ""$AUTHCRYPTFILE""" - ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "./authfile" -o "$AUTHCRYPTFILE" - rm -f ./authfile - log "__SUB:sms_INIT_ACCOUNT: !! G1 Wallet CREATED: $PHONE $PIN : $PUBKEY" - ####################### # GIVE NAME TO WALLET ####################### # 4 derniers chiffres du numéro de téléphone TAIL=${PHONE:8:4} # No UIDNA yet. Create new - UIDNA=$(./shell/diceware.sh 1 | xargs) + UID=$(./shell/diceware.sh 1 | xargs) # Check if already existing among all swarm wallets - while [[ $(grep -Rwl $UIDNA$TAIL ./wallets_swarm/*/*.uidna) ]]; do UIDNA=$(./shell/diceware.sh 1 | xargs); done - echo "$UIDNA$TAIL" > "$UIDNAFILE" + while [[ $(grep -Rwl $UID$TAIL ./wallets_swarm/*/*.uidna) ]]; do UID=$(./shell/diceware.sh 1 | xargs); done + UIDNA=$UIDNA$TAIL + echo "$UIDNA" > "$UIDNAFILE" + PIN=$(./shell/diceware.sh | xargs) + PUBKEY=$(./silkaj/silkaj generate_auth_file --auth-scrypt -salt="$UIDNA" -password="$PIN") + + # BACKUP authfile available to authfile or PIN owner (DOUBLON AVEC PIN) TEST + log "__SUB:sms_INIT_ACCOUNT: ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i ""./authfile"" -o ""$AUTHCRYPTFILE""" + ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "./authfile" -o "$AUTHCRYPTFILE" + rm -f ./authfile + log "__SUB:sms_INIT_ACCOUNT: !! G1 Wallet CREATED: $PHONE $PIN : $PUBKEY (HASHLINK=$HASHLINK)" ####################### # ACTIVATE G1SMS WALLET ####################### # log "$NODE_G1AUTHFILE $PUBKEY THIRD_PARTY_MANAGER:$NODE_G1PUBKEY" - TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$NODE_G1AUTHFILE" --amount=3.24 --output=$PUBKEY --comment="[G1sms+] $UIDNA$TAIL 3RD:$NODE_G1PUBKEY " -y) + TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$NODE_G1AUTHFILE" --amount=3.24 --output=$PUBKEY --comment="[G1sms+] $UIDNA 3RD:$NODE_G1PUBKEY " -y) log "__SUB:sms_INIT_ACCOUNT: G1 Wallet TX IN: $TX_IN" sleep 2 - TX_OUT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount=0.1 --output=$NODE_G1PUBKEY --comment="[G1sms+] $UIDNA$TAIL 3RD:$NODE_G1PUBKEY:ACK" -y) + TX_OUT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$UIDNA" -password="$PIN" --amount=0.1 --output=$NODE_G1PUBKEY --comment="[G1sms+] $UIDNA 3RD:$NODE_G1PUBKEY:ACK" -y) log "__SUB:sms_INIT_ACCOUNT: G1 Wallet TX OUT: $TX_OUT" ################ # GPG cypher PIN (ONLY CREATOR NODE CAN ACCESS IT !) ################ echo "$PIN" > "$PINFILE" - echo "${GPGPASS}" | gpg -q --output "$GPGPINFILE" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "$PINFILE" - PIN=$(cat "$PINFILE" | xargs) - [[ "$PIN" != "" ]] && echo "" > "$PINFILE" || log "SYSTEM ERROR :: PIN EMPTY !!! GPG???" + # echo "${GPGPASS}" | gpg -q --output "$GPGPINFILE" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "$PINFILE" + ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "$PINFILE" -o "$PINFILE.node.crypt" + ./shell/natools.py encrypt -p $SWARM_G1PUBKEY -i "$PINFILE" -o "$PINFILE.swarm.crypt" + # EMPTY CLEAR PIN + echo "" > "$PINFILE" - echo "114" > "$G1COUNTFILE" + # WRITE G1sms WALLET FILES + echo "314" > "$G1COUNTFILE" + echo "0" > "$NNFILE" echo "$PUBKEY" > "$PUBKEYFILE" echo "$COIN" > "$UNITFILE" echo "$MASTERPHONE" > "$SMSNODE" log_history "$PHONE" "NEW, $PUBKEY" - # ADD WALLET TO IPFS + # PUSH WALLET TO IPFS I=$(ipfs_node_wallets_add) fi - ################################################# # PUBLISH G1sms+ WALLET PROPERTIES MAIN PROCESS ################################################# ###################################################################### - if [[ ! -f "$GPGPINFILE" ]] - then - # ------------8<------------------ - # WALLET MIGRATION -> CRYPT PIN (For Old G1sms clear PIN WALLETs...) - # ADD NEW PARAMS TO WALLET - ####################### - # 4 derniers chiffres du numéro de téléphone - echo "$MASTERPHONE" > "$SMSNODE" - TAIL=${PHONE:8:4} - # No UIDNA yet. Create new - UIDNA=$(./shell/diceware.sh 1 | xargs) - # Check if already existing among all swarm wallets - while [[ $(grep -Rwl $UIDNA$TAIL ./wallets_swarm/*/*.uidna) ]]; do UIDNA=$(./shell/diceware.sh 1 | xargs); done - echo "$UIDNA$TAIL" > "$UIDNAFILE" + log "__SUB:sms_INIT_ACCOUNT: decrypting PIN..." + # GPG decypher PIN + # TODO make decypher less stress on filesystem, use /tmp and ramdisk + # echo "${GPGPASS}" | gpg -d -q --output "$PINFILE" --yes --pinentry-mode loopback --passphrase-fd 0 "$GPGPINFILE" + [[ "$PIN" == "" ]] && ./shell/natools.py decrypt -k "$NODE_G1AUTHFILE" -i "$PINFILE.node.crypt" -o "$PINFILE" && PIN=$(cat "$PINFILE" | xargs) && echo "" > "$PINFILE"; - PIN=$(cat "$PINFILE" | xargs) - log "__SUB:sms_INIT_ACCOUNT: Old G1sms wallet ;) SECURITY HOLE... Chiffrage PGP du PIN !!!" - echo "${GPGPASS}" | gpg -q --output "$GPGPINFILE" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "$PINFILE"; - ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "$PINFILE" -o "$PINFILE.$NODE_UIDNA.crypt" - else - # ------------>8------------------ - log "__SUB:sms_INIT_ACCOUNT: Déchiffrage PGP PIN..." - # GPG decypher PIN - # TODO make decypher less stress on filesystem, use /tmp and ramdisk - echo "${GPGPASS}" | gpg -d -q --output "$PINFILE" --yes --pinentry-mode loopback --passphrase-fd 0 "$GPGPINFILE" - PIN=$(cat "$PINFILE" | xargs) - [[ "$PIN" == "" && -f "$PINFILE.$NODE_UIDNA.crypt" ]] && ./shell/natools.py decrypt -k "$NODE_G1AUTHFILE" -i "$PINFILE.$NODE_UIDNA.crypt" -o "$PINFILE" && PIN=$(cat "$PINFILE"); - [[ "$PIN" != "" ]] && echo "" > "$PINFILE" || log "SYSTEM ERROR :: PIN EMPTY !!! GPG???" - fi + # DECYPHER MAIL + [[ -f "$MAILFILE.node.crypt" ]] && ./shell/natools.py decrypt -k "$NODE_G1AUTHFILE" -i "$MAILFILE.node.crypt" -o "$MAILFILE" && MAIL=$(cat "$MAILFILE") && echo "" > "$MAILFILE"; - # CYPHER EMAIL FILE - if [[ ! -f "$GPGMAILFILE" ]]; then - # ------------8<------------------ - if [ -f "$MAILFILE" ]; then - log "__SUB:sms_INIT_ACCOUNT: NO EMAIL .gpg file, CREATING it" - MAIL=$(cat "$MAILFILE"); - echo "${GPGPASS}" | gpg -q --output "$GPGMAILFILE" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "$MAILFILE"; - else - MAIL=""; - fi - # ------------>8------------------ - else - log "__SUB:sms_INIT_ACCOUNT: DECODING EMAIL .gpg... " - echo "${GPGPASS}" | gpg -d -q --output "$MAILFILE" --yes --pinentry-mode loopback --passphrase-fd 0 "$GPGMAILFILE" - MAIL=$(cat "$MAILFILE"); - # Double decypher (TODO: stop PGP for email) - [[ $MAIL == "" && -f "$MAILFILE.node.crypt" ]] && ./shell/natools.py decrypt -k "$NODE_G1AUTHFILE" -i "$MAILFILE.node.crypt" -o "$MAILFILE" && MAIL=$(cat "$MAILFILE"); - # EMPTY CLEAR EMAIL FILE - [[ $MAIL != "" ]] && echo "" > "$MAILFILE" || log "SYSTEM ERROR :: MAIL EMPTY !!! GPG PROBLEM???" - # Create _email.sha - [[ $MAIL != "" && ! -f $HMAILFILE ]] && echo -n $MAIL | sha256sum | cut -d ' ' -f 1 > $HMAILFILE - fi - - # ------------8<------------------ - # REMOVE OLD HISTORY FILES - rm -f ./wallets/$PHONE/$PHONE.hist - # ------------>8------------------ - # PUBLISH GLOBAL VARS FROM ACCOUNT FILES echo $IPFSNODEID > $IPFSNODEIDFILE PUBKEY=$(cat "$PUBKEYFILE" | xargs) @@ -483,9 +470,9 @@ log "__SUB:sms_INIT_ACCOUNT: ($1=phone, $2=NOSMS)" log "__SUB:sms_INIT_ACCOUNT: $AMOUNTG1 = $AMOUNT $UNIT" # LOG # TODO REMOVE PIN LOG!! - log "#####################" + log "${c_yellow}#####################$c_" log "PHONE: $PHONE" - log "PIN: $PIN" +# log "PIN: $PIN" log "PUBKEY: $PUBKEY" log "G1: $AMOUNTG1" log "AMOUNT: $AMOUNT $UNIT" @@ -494,10 +481,10 @@ log "__SUB:sms_INIT_ACCOUNT: ($1=phone, $2=NOSMS)" log "MEMRIB: $MEMRIB" log "MAIL: $MAIL" log "DABID: $DABID" - log "#####################" + log "${c_yellow}#####################$c_" - log "__SUB:sms_INIT_ACCOUNT: END" + log "${c_green}__SUB:sms_INIT_ACCOUNT: END$c_" } @@ -524,30 +511,31 @@ G1cents=$(echo "$AMOUNTG1*100" | bc -l | awk '{print int($0)}') log "__SUB:check_account: $PHONE: $AMOUNTG1 = $AMOUNT $UNIT ($G1cents) - $PUBKEY" if [[ "$G1cents" != "" ]]; then - NN=$(cat "./wallets/$PHONE/$PHONE.n") + NN=$(cat "./wallets/PHONE/$PHONE/_n") || NN=0 ((NN++)) - echo "$NN" > "./wallets/$PHONE/$PHONE.n" - echo $G1cents > "./wallets/$PHONE/$PHONE.g1cents" + echo "$NN" > "./wallets/PHONE/$PHONE/_n" + echo $G1cents > "./wallets/PHONE/$PHONE/_g1cents" + echo "$NANODATE" > "./wallets/PHONE/$PHONE/_nanodate" # REFRESH NODE IPFS wallets & PUBLISH I=$(ipfs_node_wallets_add) # Register modification - echo "$I" > "./wallets/$PHONE/$PHONE.chain" + echo "$I" > "./wallets/PHONE/$PHONE/_chain" else # BAN actual Duniter Node in case of silkaj timeout. export NEWDUNITER=$(./shell/checknodes.sh 'BAN') - log "__SUB:check_account: !!! SILKAJ IS TOO SLOW !!! => NEW DUNITER SERVER: $NEWDUNITER" + log "${c_red}__SUB:check_account: !!! SILKAJ IS TOO SLOW !!!$c_ => NEW DUNITER SERVER: $NEWDUNITER" fi -declare -a aaa -aaa=( "$AMOUNTG1" "$AMOUNT" "$UNIT" ) -log "__SUB:check_account: $(declare -p aaa)" -echo ${aaa[@]} +declare -a walletvalues +walletvalues=( "$AMOUNTG1" "$AMOUNT" "$UNIT" ) +log "__SUB:check_account: $(declare -p walletvalues)" +echo ${walletvalues[@]} } ################################################################################################################################# function make_accounting (){ -# CONVERT AMOUNT UNIT to VIR G1 +# CONVERT $AMOUNT $UNIT to $VIR G1 case "$UNIT" in G1) VIR=$AMOUNT; @@ -559,21 +547,25 @@ LOVE) VIR=$(bc -l <<< "scale=2; $AMOUNT * $DUFACTOR / 100") ;; *) - VIR=$(bc -l <<< "scale=2; $AMOUNT * $DUFACTOR / 100") + VIR=$AMOUNT; ;; esac +log "${c_yellow}__SUB:make_accounting:$c_ $VIR G1 CHECKING FOR $PHONE / PUBKEY = $PUBKEY" + ########################################################### # GET G1sms wallet AMOUNTG1 and CHECK for right balance -log "__SUB:make_accounting: LOCAL $VIR amount for $PHONE : $PUBKEY" -# Try to ask silkaj. If timeout, use SWARM last known $PHONE.g1cents value -AMOUNTG1=$(./shell/timeout.sh -t 30 ./silkaj/silkaj amount "$PUBKEY") -if [[ "$AMOUNTG1" == "" ]]; then AMOUNTG1=0; fi +# Ask silkaj. If timeout, use last known $PHONE _g1cents value +AMOUNTG1=$(./shell/timeout.sh -t 20 ./silkaj/silkaj amount "$PUBKEY") +[[ ! $AMOUNTG1 ]] && AMOUNTG1=$(bc -l <<< "scale=2; $(cat ./wallets/PHONE/$PHONE/_g1cents) / 100") +[[ "$AMOUNTG1" == "" ]] && AMOUNTG1=0 + # TAX AND MINIMUM WALLET ACCOUNT CALCULATION PERCENT=0$(bc -l <<< "scale=2; $VIR / $SWARMCOMM") MIN=$(bc -l <<< "$AMOUNTG1 - $PERCENT - $LIMIT") CHARGE=$(bc -l <<< "scale=2; $VIR + $PERCENT + $LIMIT") TESTMIN=$( echo "${VIR} < ${MIN}" | bc -l ) + log "__SUB:make_accounting: TEST $AMOUNT $UNIT :: $VIR + $PERCENT + $LIMIT = $CHARGE < $AMOUNTG1 ? $TESTMIN" declare -a myarray @@ -590,7 +582,7 @@ function move_g1cents (){ phonesrc=$1 pubkeydest=$2 zenvalue=$3 - log "__SUB:move_g1cents: $phonesrc ($zenvalue) -> $pubkeydest :: $G1COUNTFILE ::" + log "${c_yellow}__SUB:move_g1cents:$c_ $phonesrc ($zenvalue) -> $pubkeydest :: $G1COUNTFILE ::" ### CHANGE INPUT VALUE #### curvalue=$(cat ./wallets/$phonesrc/$phonesrc.g1cents | cut -d '.' -f 1) @@ -618,13 +610,13 @@ function move_g1cents (){ # USE natools with NODEPUB crypt echo "$zenvalue" > "/tmp/move_g1cents.$winnerphone" # GET NODE G1sms Wallet PUBKEY - NODEPUB=$(cat ./wallets_swarm/.$NODEID/$NODEID.pub) + NODEPUB=$(cat ./wallets_swarm/.$NODEID/_pub) ./shell/natools.py encrypt -p $NODEPUB -i "/tmp/move_g1cents.$winnerphone" -o "./wallets/.$NODEID/TASK/$NANODATE.move_g1cents.$winnerphone.NODEPUB.crypt" log "__SUB:move_g1cents: CREDIT: WRITE TASK TO ./wallets/.$NODEID/$NANODATE.move_g1cents.$winnerphone.NODEPUB.crypt " rm -f /tmp/move_g1cents.$winnerphone fi else - log "__SUB:move_g1cents: ERROR: NO $pubkeydest WALLET FOUND" + log "${c_red}__SUB:move_g1cents: ERROR: NO $pubkeydest WALLET FOUND$c_" fi # UPDATE MY new ./wallet STATUS to SWARM I=$(ipfs_node_wallets_add) @@ -634,6 +626,7 @@ function move_g1cents (){ ################################################################################################################################# # Contact database management function add_contact(){ + log "${c_yellow}Add user contact$c_" userDB="gammu" pwdDB=$(cat /etc/gammu-smsdrc | grep "password =" | awk '{ print $3 }' || exit 1) local sql="mysql -N -u$userDB -p$pwdDB gammu -e" @@ -649,6 +642,7 @@ function add_contact(){ $sql "INSERT INTO pbk (GroupID, Name, Number, id_user, is_public) VALUES ('1', '$MEMBERUID', '$PHONE', '1', 'false')" || exit 1 local id_user=$($sql "SELECT ID FROM pbk WHERE Number=$PHONE" || exit 1) $sql "INSERT INTO user_group (id_group, id_pbk, id_pbk_groups, id_user) VALUES ('$id_user', '$id_user', '1', '1')" || exit 1 + log "${c_green}Done$c_" else log "${red}Contact already exist$c_" #TODO: UPDATE Kalkun Contact database @@ -657,6 +651,7 @@ function add_contact(){ } function rm_contact(){ + log "${c_yellow}Remove user contact$c_" userDB="gammu" pwdDB=$(cat /etc/gammu-smsdrc | grep "password =" | awk '{ print $3 }' || exit 1) local sql="mysql -N -u$userDB -p$pwdDB gammu -e" @@ -670,6 +665,7 @@ function rm_contact(){ local id_user=$($sql "SELECT ID FROM pbk WHERE Number=$PHONE" || exit 1) $sql "DELETE FROM pbk WHERE Number=$PHONE" || exit 1 $sql "DELETE FROM user_group WHERE id_group='$id_user'" || exit 1 + log "${c_green}Done$c_" else log "${red}Contact doesn't exist$c_" fi diff --git a/shell/g1.png b/shell/g1.png old mode 100644 new mode 100755 diff --git a/shell/g1tag-v0.png b/shell/g1tag-v0.png old mode 100644 new mode 100755 diff --git a/shell/g1tag.png b/shell/g1tag.png old mode 100644 new mode 100755 diff --git a/shell/good.nodes.txt b/shell/good.nodes.txt old mode 100644 new mode 100755 index 214199d..800050c --- a/shell/good.nodes.txt +++ b/shell/good.nodes.txt @@ -2,5 +2,3 @@ duniter.moul.re:443 g1.duniter.fr:443 g1.duniter.org:443 g1.le-sou.org:443 -g1.monnaielibreoccitanie.org:443 -g1.presles.fr:443 diff --git a/shell/init.sh.old b/shell/init.sh.old index ca20a67..50ffe4d 100755 --- a/shell/init.sh.old +++ b/shell/init.sh.old @@ -7,7 +7,14 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -source $MY_PATH/.install/.GPATH +if [[ -f $MY_PATH/.profile ]]; then + source $MY_PATH/.profile +elif [[ -f $MY_PATH/../.profile ]]; then + source $MY_PATH/../.profile +else + echo -e "${c_red}Le .profile n'existe pas$c_" + exit 1 +fi # Adapter les valeurs au contexte spatio-temporel du NODE G1SMS function log () { diff --git a/shell/init_keys.sh b/shell/init_keys.sh index 35127e1..faa4f12 100755 --- a/shell/init_keys.sh +++ b/shell/init_keys.sh @@ -40,7 +40,7 @@ if [[ ! -e "./g1sms.preoni.pub.key" && -f "./g1sms.priv.key" ]]; then log "__SUB:initkeys.sh: Linking preoni Keys to SWARM G1 Keys" ln -s ./g1sms.priv.key ./g1sms.preoni.priv.key ln -s ./g1sms.pub.key ./g1sms.preoni.pub.key -elif [[ ! -f ./g1sms.preoni.priv.key ]]; then +else # CREATE NODE G1 KEYS AND FILES mkdir -p ./wallets/.$IPFSNODEID/TASK ################################################ @@ -68,14 +68,14 @@ elif [[ ! -f ./g1sms.preoni.priv.key ]]; then echo $NODE_UIDNA > "/etc/hostname" ############################################################ - # BACKUP AUTHFILE FOR FOR SWARM USE (TODO: Refine Swarm, Node access): GIVES SMARM WITHDRAW ACTION + # BACKUP AUTHFILE FOR FOR SWARM USE (TODO: Refine Swarm, Node access) ./shell/natools.py encrypt -p $SWARM_G1PUBKEY -i "./authfile" -o "./wallets/.$IPFSNODEID/_authfile.swarm.crypt" echo $NODE_G1PUBKEY > "./wallets/.$IPFSNODEID/_pub" ################# _pub echo $IPFSNODEID > "./wallets/.$IPFSNODEID/_ipfsid" ################# _ipfsid log "__SUB:initkeys.sh: [ADMIN] G1sms+ CREATE G1WALLET FOR: $IPFSNODEID: _pub = $NODE_G1PUBKEY " - # BACKUP $IPFSNODEID config ################# _ipfsconfig.swarm.crypt : GIVES SMARM NODE RESTORE ACTION + # BACKUP $IPFSNODEID config ################# _ipfsconfig.swarm.crypt ./shell/natools.py encrypt -p $SWARM_G1PUBKEY -i "/home/$YOU/.ipfs/config" -o "./wallets/.$IPFSNODEID/_ipfsconfig.swarm.crypt" log "__SUB:initkeys.sh: [ADMIN] BACKUP IPFS NODE CONFIG to ./wallets/.$IPFSNODEID/_ipfsconfig.swarm.crypt" @@ -89,11 +89,11 @@ elif [[ ! -f ./g1sms.preoni.priv.key ]]; then echo $NANODATE > "./wallets/.$IPFSNODEID/_nanodate" ################# _nanodate # SILKAJ INIT G1 NODE WALLET - TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$SWARM_G1AUTHFILE" --amount=3.24 --output=$NODE_G1PUBKEY --comment="[G1sms+] G1NODE ($ADMINPSEUDO) $NODE_UIDNA $IPFSNODEID" -y) - TX_OUT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$NODE_UIDNA" -password="$NODE_PIN" --amount=0.1 --output=$SWARM_G1PUBKEY --comment="[G1sms+] G1NODE ($ADMINPSEUDO) $NODE_UIDNA $IPFSNODEID:ACK" -y) + TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$NODE_G1AUTHFILE" --amount=3.24 --output=$NODEG1WALLET --comment="[G1sms+] G1NODE ($ADMINPSEUDO) $UIDNA $IPFSNODEID" -y) + TX_OUT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$IPFSNODEID" -password="$GPGPASS" --amount=0.1 --output=$NODE_G1PUBKEY --comment="[G1sms+] G1NODE $IPFSNODEID:ACK" -y) - log "__SUB:initkeys.sh: [ADMIN] NODE G1sms+ $NODE_UIDNA : ls ./wallets/.$IPFSNODEID" - gammu-smsd-inject -l TEXT "$ADMINPHONE" -text "[ADMIN] G1sms+ NODE $NODE_UIDNA ($IPFSNODEID)" 1>&2 + log "__SUB:initkeys.sh: [ADMIN] NODE G1sms+ $UIDNA : ls ./wallet/.$IPFSNODEID" + gammu-smsd-inject -l TEXT "$ADMINPHONE" -text "[ADMIN] G1sms+ NODE $UIDNA ($IPFSNODEID)" 1>&2 gammu-smsd-inject -l TEXT "$ADMINPHONE" -text "$NODE_G1PUBKEY" 1>&2 # CREATE preoni FILES @@ -102,6 +102,7 @@ elif [[ ! -f ./g1sms.preoni.priv.key ]]; then fi NODE_UIDNA=$(cat "./wallets/.$IPFSNODEID/_uidna") + ## INIT NODE G1 PUB & PRIV KEY NODE_G1PUBKEY=$(cat "${GPATH}/g1sms.preoni.pub.key") NODE_G1AUTHFILE="${GPATH}/g1sms.preoni.priv.key" diff --git a/shell/manual_BILLETS_PERIMES.sh b/shell/manual_BILLETS_PERIMES.sh index b7d84ec..2b67696 100755 --- a/shell/manual_BILLETS_PERIMES.sh +++ b/shell/manual_BILLETS_PERIMES.sh @@ -42,7 +42,7 @@ for result in $(find billets/ -daystart -mtime +$vieux -type d -name "*"); do echo $secret $salt echo "/usr/local/bin/silkaj tx --amount=\"$virement\" --output=\"$dest\"" - if [[ "$virement" == "0.0" ]]; then + if [[ "$solde" == "0.0" ]]; then echo "G1Billet déjà vide, suppression de $result"; rm -Rf $result; else PAY=$(/usr/local/bin/silkaj -p duniter-g1.p2p.legal:443 tx --amount="$virement" --output="$dest" --comment="[G1Billet] $numero" -y) diff --git a/shell/nodes.txt b/shell/nodes.txt old mode 100644 new mode 100755 diff --git a/shell/parle.sh b/shell/parle.sh index ed99fd9..99388d0 100755 --- a/shell/parle.sh +++ b/shell/parle.sh @@ -9,4 +9,4 @@ fi if [[ ! -f "/tmp/$lang_${f}.wav" ]]; then pico2wave -l $lang -w /tmp/$lang_${f}.wav "$1" fi -aplay -q /tmp/$lang_${f}.wav +aplay -q /tmp/$lang_${f}.wav diff --git a/shell/sms_AIDE.sh b/shell/sms_AIDE.sh index 0bd21ad..078d2af 100755 --- a/shell/sms_AIDE.sh +++ b/shell/sms_AIDE.sh @@ -4,17 +4,31 @@ # Version: 0.1 # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) ################################################################################ -source ./shell/init.sh -source ./shell/functions.sh +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +if [[ -f $MY_PATH/.profile ]]; then + source $MY_PATH/.profile +elif [[ -f $MY_PATH/../.profile ]]; then + source $MY_PATH/../.profile +else + echo -e "${c_red}Le .profile n'existe pas$c_" + exit 1 +fi + +#source $GPATH/shell/tata.sh || echo "pas trouvé" + +source $GPATH/shell/init.sh +source $GPATH/shell/functions.sh +[[ $1 == "chat" ]] && echo "Bonjours chat" && exit 0 log "X sms_AIDE.sh ($1=phone)" sms_INIT_ACCOUNT "$1" "NOSMS" -MESS="[Aide] -N Pseudo (membre ou nom de portefeuille) : Création portefeuille +MESS="N Pseudo : Création Portefeuille rattaché à Pseudo +S : Synchro Solde +P 06nnnnnnnn 300 : Payer 300 à 06nnnnnnnn U G1/DU/LOVE : Unité -S : Solde -P 06nnnnnnnn 300 : Payer 300 à 06nnnnnnnn" +" # Send response SMS sms_SEND "$1" "$MESS" diff --git a/shell/sms_BILLET.sh b/shell/sms_BILLET.sh index 26d1917..b3bb08c 100755 --- a/shell/sms_BILLET.sh +++ b/shell/sms_BILLET.sh @@ -82,6 +82,10 @@ then SECRET=$(./shell/diceware.sh 4 | xargs) + # ADD/REMOVE G1sms forced control over G1Billet + # SALT=$(./shell/diceware.sh 3 | xargs) + SALT="" + boucle=$(bc -l <<< "$boucle + 1") log "__SUB:sms_BILLET.sh: ->BILLET:$PHONE:$NUMBER:$VALbillet:$UNIT" @@ -96,9 +100,9 @@ then rm -f "./authfile" log_history $PHONE "G1BILLET, $TRANSAC, $BILLETPUBKEY" - sleep 5 + sleep 3 # Fill BILLET with TRANSAC amount - PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$TRANSAC" --output="$BILLETPUBKEY" --comment="G1Billet $NUMBER" -y) + PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$UIDNA" -password="$PIN" --amount="$TRANSAC" --output="$BILLETPUBKEY" --comment="G1Billet $NUMBER" -y) if [[ "$(echo $PAY | cut -d '|' -f 1)" != "KO" ]]; then # NOTES ARE FILES STORED IN DICEWARE COMPOSED SUBDIR echo "$(date +%Y%m%d)" > "./billets/$bpath/note.creationdate" diff --git a/shell/sms_DESTROY.sh b/shell/sms_DESTROY.sh index 4b53d1c..7ca3e2c 100755 --- a/shell/sms_DESTROY.sh +++ b/shell/sms_DESTROY.sh @@ -12,10 +12,10 @@ PHONE="$1" MEMBERUID="$2" TODAY=$(date '+%Y%m%d') -if [[ -f "./wallets/$PHONE/VIREMENTS" ]]; then +if [[ -f "./wallets/PHONE/$PHONE/VIREMENTS" ]]; then # CHECK IF ALL DONE. - log "__SUB:sms_DESTROY.sh: FOUND "./wallets/$PHONE/VIREMENTS" decrypting with Node key" - echo "${GPGPASS}" | gpg -d -q --output "/tmp/VIREMENTS.$PHONE" --yes --pinentry-mode loopback --passphrase-fd 0 "./wallets/$PHONE/VIREMENTS.gpg" + log "__SUB:sms_DESTROY.sh: FOUND "./wallets/PHONE/$PHONE/VIREMENTS" decrypting with Node key" + echo "${GPGPASS}" | gpg -d -q --output "/tmp/VIREMENTS.$PHONE" --yes --pinentry-mode loopback --passphrase-fd 0 "./wallets/PHONE/$PHONE/VIREMENTS.gpg" for next in $(cat /tmp/VIREMENTS.$PHONE | cut -d ' ' -f 1); do if [[ $next -ge $TODAY ]]; then log "__SUB:sms_DESTROY.sh: VIREMENT $next >= $TODAY" @@ -36,9 +36,9 @@ if [[ "$MEMBERUID" == "DON" || "$MEMBERUID" == "" || "$MEMBERUID" == "$MEMBER" ] AMOUNTG1=$(./silkaj/silkaj amount "$PUBKEY") GETLIMIT=$(bc <<< "$AMOUNTG1 - $LIMIT") - PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$GETLIMIT" --output="$MEMRIB" --comment="[G1sms+] Wallet DESTROY $MEMBER $MEMBERUID" -y) + PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$UIDNA" -password="$PIN" --amount="$GETLIMIT" --output="$MEMRIB" --comment="[G1sms+] Wallet DESTROY $MEMBER $MEMBERUID" -y) sleep 5 - back=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$LIMIT" --output="$NODEPUB" --comment="[G1sms+] Wallet DESTROY Send $LIMIT To NODE" -y) + back=$(./silkaj/silkaj transaction --auth-scrypt -salt="$UIDNA" -password="$PIN" --amount="$LIMIT" --output="$NODEPUB" --comment="[G1sms+] Wallet DESTROY Send $LIMIT To NODE" -y) if [[ "$(echo $PAY | cut -d '|' -f 1)" != "KO" && "$PAY" != "" && "$(echo $back | cut -d '|' -f 1)" != "KO" ]]; then # DESTROY FILESYSTEM AND G1sms WALLET SWARM REFERENCE @@ -54,8 +54,8 @@ $ADMINPSEUDO @ $NODEUIDNA $back" sms_SEND "$PHONE" "$mess" - rm -Rf ./wallets/$PHONE; - rm -Rf ./wallets_swarm/$PHONE; + rm -Rf ./wallets/PHONE/$PHONE; + rm -Rf ./wallets_swarm/PHONE/$HASHLINK; cents=$(echo $(bc -l <<< "scale=0; $GETLIMIT * 100") | cut -d '.' -f 1) move_g1cents "$PHONE" "$MEMRIB" "$cents" cents=$(echo $(bc -l <<< "scale=0; $LIMIT * 100") | cut -d '.' -f 1) diff --git a/shell/sms_EMAIL.sh b/shell/sms_EMAIL.sh index e0ea429..154bd77 100755 --- a/shell/sms_EMAIL.sh +++ b/shell/sms_EMAIL.sh @@ -16,7 +16,7 @@ log "__SUB:sms_EMAIL.sh: START ($1=phone, $2=mail)" phone="$1" mail="$2" -MAILFILE="./wallets/$phone/$phone.email" # Contains the member EMAIL (Send BILLET) +MAILFILE="./wallets/PHONE/$phone/_email" # Contains the member EMAIL (Send BILLET) # Initialise PHONE, PIN, PUBKEY, UNIT ... sms_INIT_ACCOUNT "$phone" "NOSMS" @@ -27,6 +27,7 @@ Envoyez N suivi de votre pseudo membre (en respectant Majuscule et minuscule)." fi if [[ "$mail" != "" ]]; then + # STORE EMAIL AND NODE CYPHER IT BEFORE PUSH TO IPFS echo "$mail" > "$MAILFILE" ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "$MAILFILE" -o "$MAILFILE.node.crypt" echo "" > "$MAILFILE" diff --git a/shell/sms_G1TAG.sh b/shell/sms_G1TAG.sh index 8e7bef9..b3db643 100755 --- a/shell/sms_G1TAG.sh +++ b/shell/sms_G1TAG.sh @@ -73,8 +73,8 @@ fi ##### IS G1DAB NODE? if [[ ! $PASSENGER && ! $G1DAB ]]; then - if [[ -f ./wallets/$PHONE/ipfsid.G1TAGNODE ]]; then - DABnode=$(cat ./wallets/$PHONE/ipfsid.G1TAGNODE) + if [[ -f ./wallets/PHONE/$PHONE/MASTERPHONE.ipfsid ]]; then + DABnode=$(cat ./wallets/PHONE/$PHONE/MASTERPHONE.ipfsid) if [[ "$DABnode" == "$IPFSNODEID" ]]; then sms_ERROR "$PHONE" "IMPRIMANTE G1Tag sur $DABnode non détectée!! Choisissez un autre G1Dab..." log "__SUB:sms_G1TAG.sh: IMPRIMANTE G1Tag non détectée!!" @@ -94,7 +94,7 @@ fi ########################################### # PAY VIR + PERCENT G1 ML=$(bc -l <<< "scale=2; $VIR + $PERCENT") -PAY=$(./shell/timeout.sh -t 29 ./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$ML" --output="$NODE_G1PUBKEY" --comment="[G1sms+] ACHAT $3 G1Tag(s) - $2 $UNIT" -y) +PAY=$(./shell/timeout.sh -t 29 ./silkaj/silkaj transaction --auth-scrypt -salt="$UIDNA" -password="$PIN" --amount="$ML" --output="$NODE_G1PUBKEY" --comment="[G1sms+] ACHAT $3 G1Tag(s) - $2 $UNIT" -y) if [[ "$PAY" == "" || "$(echo $PAY | cut -d '|' -f 1)" == "KO" ]]; then # new=$(./shell/checknodes.sh "BAN") sms_ERROR "$PHONE" "Il est survenu un problème lors de votre virement: $PAY / Silkaj: $new"; @@ -224,8 +224,8 @@ TAGCHAIN="./TAG/${RR}/TAG_chain" # contains IPFS current ipfs hash composite -compose Over -gravity SouthEast "./TAG/${RR}/TAG_WRITE.png" "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" # ADD Avatar in the Center -# if [[ $(file "./wallets/$PHONE/$PHONE.avatar.png" | grep 'PNG') ]]; then -# composite -compose Over -resize 150% -gravity Center "./wallets/$PHONE/$PHONE.avatar.png" "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" +# if [[ $(file "./wallets/PHONE/$PHONE/_avatar.png" | grep 'PNG') ]]; then +# composite -compose Over -resize 150% -gravity Center "./wallets/PHONE/$PHONE/_avatar.png" "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" # else # composite -compose Over -resize 100% -gravity Center "./shell/G1Anar.png" "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" # fi @@ -240,24 +240,23 @@ TAGCHAIN="./TAG/${RR}/TAG_chain" # contains IPFS current ipfs hash # ROTATION (FIXE AVATAR & CHIFFRE)? # convert "./TAG/${RR}/${RR}.png" -rotate -180 "./TAG/${RR}/${RR}.png" # QL-700 PRINT PREPARE - - if [[ -f "./wallets/$PHONE/ipfsid.G1TAGNODE" ]]; then - destnode=$(cat "./wallets/$PHONE/ipfsid.G1TAGNODE") + if [[ -f "./wallets/PHONE/$PHONE/MASTERPHONE.ipfsid" ]]; then + destnode=$(cat "./wallets/PHONE/$PHONE/MASTERPHONE.ipfsid") if [[ "$destnode" == "" || "$destnode" == "$IPFSNODEID" ]]; then log "__SUB:sms_G1TAG.sh: Local PRINT ${RR} # ipfs ls /ipns/${J}" brother_ql_create --model QL-700 "./TAG/${RR}/${RR}.png" --label-size 62 > "./TAG/${RR}/${RR}.bin" brother_ql_print "./TAG/${RR}/${RR}.bin" /dev/usb/lp0 else - # PRINT ON ANOTHER G1Dab. Send files to G1Tag Printer TODO: Could use DESTNODEPUB instead of NODE_G1PUBKEY ? - log "__SUB:sms_G1TAG.sh: Remote PRINT :: ./wallets/.$destnode/PRINT/${RR}.bin " + # PRINT ON ANOTHER G1Dab. Send files to G1Tag Printer Use .$destnode/_pub CRYPTINGKEY ? + CRYPTINGKEY=$(cat ./wallets_swarm/.$destnode/_pub) + log "__SUB:sms_G1TAG.sh: Remote PRINT :: ./wallets/.$destnode/PRINT/${RR}.png.node.crypt ($CRYPTINGKEY)" mkdir -p "./wallets/.$destnode/PRINT/" - # TODO: USE $DEST_G1PUBKEY is better - ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "./TAG/${RR}/${RR}.png" -o "./wallets/.$destnode/PRINT/${RR}.bin" + ./shell/natools.py encrypt -p $CRYPTINGKEY -i "./TAG/${RR}/${RR}.png" -o "./wallets/.$destnode/PRINT/${RR}.png.node.crypt" fi else # log "__SUB:sms_G1TAG.sh: Becoming default PRINTER :: $IPFSNODEID" - echo "$IPFSNODEID" > "./wallets/$PHONE/ipfsid.G1TAGNODE" + echo "$IPFSNODEID" > "./wallets/PHONE/$PHONE/ipfsid.G1TAGNODE" brother_ql_create --model QL-700 "./TAG/${RR}/${RR}.png" --label-size 62 > "./TAG/${RR}/${RR}.bin" brother_ql_print "./TAG/${RR}/${RR}.bin" /dev/usb/lp0 destnode="$IPFSNODEID" @@ -269,14 +268,15 @@ done # PRINT $PHONE WALLET PUBKEY #################################################### if [[ "$destnode" == "" || "$destnode" == "$IPFSNODEID" ]]; then - qrencode -s 5 -o "/tmp/G1PubQR.$PHONE.png" "$(cat ./wallets/$PHONE/$PHONE.pub)" + # PRINT $PHONE WALLET PUBKEY + qrencode -s 5 -o "/tmp/G1PubQR.$PHONE.png" "$(cat ./wallets/PHONE/$PHONE/_pub)" composite -compose Over -gravity West "/tmp/G1PubQR.$PHONE.png" "./shell/g1tag.png" "/tmp/G1PubQR.$PHONE.png" - if [[ $(file "./wallets/$PHONE/$PHONE.avatar.png" | grep 'PNG') ]]; then - composite -compose Over -gravity Center "./wallets/$PHONE/$PHONE.avatar.png" "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" + if [[ $(file "./wallets/PHONE/$PHONE/_avatar.png" | grep 'PNG') ]]; then + composite -compose Over -gravity Center "./wallets/PHONE/$PHONE/_avatar.png" "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" fi - if [[ -f ./wallets/$PHONE/$PHONE.uidrib ]]; then - qrencode -s 6 -o "/tmp/G1MemQR.$PHONE.png" "$(cat ./wallets/$PHONE/$PHONE.uidrib)"; + if [[ -f ./wallets/PHONE/$PHONE/_uidrib ]]; then + qrencode -s 6 -o "/tmp/G1MemQR.$PHONE.png" "$(cat ./wallets/PHONE/$PHONE/_uidrib)"; composite -compose Over -gravity SouthEast "/tmp/G1MemQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" && rm /tmp/G1MemQR.$PHONE.png fi diff --git a/shell/sms_NEW.sh b/shell/sms_NEW.sh index 4bfa424..5093b41 100755 --- a/shell/sms_NEW.sh +++ b/shell/sms_NEW.sh @@ -1,9 +1,10 @@ #!/bin/bash ################################################################################ # Author: Fred (support@qo-op.com) -# Version: 0.1 +# Version: 0.2 # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) ################################################################################ +# CREATE NEW G1 ./wallets/PHONE/sha256_ID ACCOUNT source ./shell/init.sh source ./shell/functions.sh log "${c_yellow}X sms_NEW.sh ($1=phone, $2=uid)$c_" @@ -16,11 +17,14 @@ sms_INIT_ACCOUNT "$PHONE" if [[ "$MEMBERUID" != "" && "$MEMBERUID" != "N" && "$MEMBERUID" != "D" && "$MEMBERUID" != "NOUV" ]]; then # UID RECEIVED in SMS VIRDEST=$MEMBERUID - MEMRIB=$(sms_uid2key "$MEMBERUID" "$PHONE" "$PIN") + # GET ASSOCIATED MEMBER OR UIDNA G1 PUB KEY + MEMRIB=$(sms_uid2pubkey "$MEMBERUID" "$PHONE" "$PIN") + # No related wallet found if [[ $MEMRIB == "" ]]; then exit; fi MEMBER="$MEMBERUID" fi +# TODO Replace "NOSMS" mode with .profile READ, or similar... sms_INIT_ACCOUNT "$PHONE" "NOSMS" # Check account amount countvalues=($(check_account)) @@ -29,26 +33,19 @@ AMOUNTG1=${countvalues[0]} AMOUNT=${countvalues[1]} UNIT=${countvalues[2]} -mess="[G1sms+] -Id: $UIDNA -Solde: $AMOUNT $UNIT -DAB: $DABID +mess="[G1sms+] Portefeuille G1 +$UIDNA +$PIN --- -https://cesium.app -* Identifiant =" +Solde: $AMOUNT $UNIT +https://cesium.app" sms_SEND "$PHONE" "$mess" sleep 2 -sms_SEND "$PHONE" "$PHONE" -sleep 2 -sms_SEND "$PHONE" "* Mot de passe =" -sleep 2 -sms_SEND "$PHONE" "$PIN" -sleep 2 -sms_SEND "$PHONE" "* Clef Publique (RIB) =" +sms_SEND "$PHONE" "* Clef Publique G1 (RIB) =" sleep 2 sms_SEND "$PHONE" "$PUBKEY" sleep 2 -[[ $MEMRIB != "" ]] && sms_SEND "$PHONE" "Compte relié? $MEMBER $MAIL +[[ $MEMBER || $MAIL ]] && sms_SEND "$PHONE" "Compte relié: $MEMBER $MAIL $MEMRIB" # Add contact to database diff --git a/shell/sms_PAY.sh b/shell/sms_PAY.sh index d989cc9..24f2fd7 100755 --- a/shell/sms_PAY.sh +++ b/shell/sms_PAY.sh @@ -14,9 +14,12 @@ PHONEDEST="$2" # Initialise PHONE, PIN, PUBKEY, UNIT sms_INIT_ACCOUNT "$phone" "NOSMS" pin=$PIN +uidna=$UIDNA if [[ $UNKNOWN == "unknown" ]]; then sms_ERROR "$phone" "Porte-monnaie inconnu. Envoyez N (suivi de votre Pseudo membre) pour le créer." exit +else + log "PIN: $pin" fi ########################################################### @@ -35,14 +38,17 @@ fi # Add COUNTRY code to PHONEDEST + PHONEDEST INIT PHONEDEST="$COUNTRY${PHONEDEST:1:10}" - +HASHLINKDEST=$(echo -n $PHONEDEST | sha256sum | cut -d ' ' -f 1) + # CHECK if PHONEDEST have an account in IPFS G1sms+ SWARM -if [[ -f "./wallets_swarm/$PHONEDEST/$PHONEDEST.pub" ]] +if [[ -f "./wallets_swarm/PHONE/$HASHLINKDEST/_pub" ]] then - PUBKEYDEST=$(cat "./wallets_swarm/$PHONEDEST/$PHONEDEST.pub") - UNITDEST=$(cat "./wallets_swarm/$PHONEDEST/$PHONEDEST.unit") + PUBKEYDEST=$(cat "./wallets_swarm/PHONE/$HASHLINKDEST/_pub") + UNITDEST=$(cat "./wallets_swarm/PHONE/$HASHLINKDEST/_unit") + log "__SUB:sms_PAY.sh: PUBKEYDEST found in swarn... $PUBKEYDEST" else # NO, then create NEW Wallet + log "__SUB:sms_PAY.sh: Creating Account for... $PHONEDEST" sms_INIT_ACCOUNT "$PHONEDEST" # Refreshed new values PUBKEYDEST="$PUBKEY" @@ -50,10 +56,13 @@ else fi # Payement -PAY=$(./shell/timeout.sh -t 20 ./silkaj/silkaj transaction --auth-scrypt -salt="$phone" -password="$pin" --amount="$VIR" --output="$PUBKEYDEST" --comment="[G1sms+] PAY" -y) +log "./silkaj/silkaj transaction --auth-scrypt -salt="$uidna" -password="$pin" --amount="$VIR" --output="$PUBKEYDEST"" +PAY=$(./shell/timeout.sh -t 30 ./silkaj/silkaj transaction --auth-scrypt -salt="$uidna" -password="$pin" --amount="$VIR" --output="$PUBKEYDEST" --comment="[G1sms+] PAY $AMOUNT $UNIT" -y) if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" || "$PAY" == "" ]]; then - sms_ERROR "$phone" "Problème de payement avec silkaj (changement de serveur $new): $PAY"; - log "__SUB:sms_PAY.sh: Problème de payement avec silkaj $new : $PAY" + sms_ERROR "$phone" "PIN : $PAY ? Voyez vous votre code secret: $pin? +NON, Reinitaliser Compte. Envoyer: RAZ +OUI, Bourage Blockchain. Envoyer: S"; + log "__SUB:sms_PAY.sh: Problème de payement avec silkaj : $PAY" exit else # OK: Sync g1cents TODO check move_g1cents function and generalize on all silkaj transactions @@ -64,11 +73,11 @@ fi sleep 2 # + G1SMS Commission -COM=$(./shell/timeout.sh -t 20 ./silkaj/silkaj transaction --auth-scrypt -salt="$phone" -password="$pin" --amount="$PERCENT" --output="$NODE_G1PUBKEY" --comment="[G1sms+] Commission" -y) -if [[ "$(echo $COM | cut -d '|' -f 1)" == "KO" || "$PAY" == "" ]]; then - new=$(./shell/checknodes.sh "BAN") - sms_ERROR "$phone" "Problème de payement avec silkaj (changement de serveur $new): $COM"; - log "__SUB:sms_PAY.sh: Problème de payement avec silkaj $new : $COM" +log "./silkaj/silkaj transaction --auth-scrypt -salt="$uidna" -password="$pin" --amount="$PERCENT" --output="$NODE_G1PUBKEY"" +COM=$(./shell/timeout.sh -t 30 ./silkaj/silkaj transaction --auth-scrypt -salt="$uidna" -password="$pin" --amount="$PERCENT" --output="$NODE_G1PUBKEY" --comment="[G1sms+] P Commission" -y) +if [[ "$(echo $COM | cut -d '|' -f 1)" == "KO" || "$COM" == "" ]]; then + sms_ERROR "$phone" "Problème de bourrage blockchain : $COM"; + log "__SUB:sms_PAY.sh: Problème de payement avec silkaj : $COM" exit else # OK: Sync g1cents diff --git a/shell/sms_REC.sh b/shell/sms_REC.sh index 911e01d..01dc2d6 100755 --- a/shell/sms_REC.sh +++ b/shell/sms_REC.sh @@ -41,7 +41,7 @@ esac ########################################################### # Initialise PHONE, PIN, PUBKEY, UNIT sms_INIT_ACCOUNT "$PHONE" "NOSMS" -if [[ $MEMBER == "" ]]; then MEMBER=$UIDNA; fi +[[ $MEMBER == "" ]] && MEMBER=$UIDNA # Wallet self UIDNA?? ########################################################### # CHECK FOR ERRORS if [[ $UNKNOWN == "unknown" ]]; then @@ -79,20 +79,20 @@ else log "__SUB:sms_REC.sh: SEARCH $VIRDEST related wallet!!! $DESTRIB " DESTMEM="$VIRDEST" # SEARCH IN WALLETS - LOCAL=$(grep -Rwl "$DESTMEM" ./wallets/*/*.uidname | tail -n 1 | cut -f 3 -d '/') - if [[ "$LOCAL" == "" ]]; then LOCAL=$(grep -Rwl "$DESTMEM" ./wallets/*/*.uidna | tail -n 1 | cut -f 3 -d '/'); fi - if [[ "$LOCAL" != "" ]]; then - # LOCAL G1sms account - DESTRIB=$(cat ./wallets/$LOCAL/$LOCAL.pub) - DESTPHONE=$LOCAL - log "__SUB:sms_REC.sh: FOUND LOCAL ($MASTERPHONE) G1sms+ wallet: $DESTRIB ($LOCAL)" + LOCALPHONE=$(grep -Rwl "$DESTMEM" ./wallets/PHONE/*/_uidname | tail -n 1 | cut -f 4 -d '/') + [[ ! $LOCALPHONE ]] && LOCALPHONE=$(grep -Rwl "$DESTMEM" ./wallets/PHONE/*/_uidna | tail -n 1 | cut -f 4 -d '/') + if [[ "$LOCALPHONE" != "" ]]; then + # LOCALPHONE G1sms account + DESTRIB=$(cat ./wallets/PHONE/$LOCALPHONE/_pub) + DESTPHONE=$LOCALPHONE + log "__SUB:sms_REC.sh: FOUND LOCALPHONE ($MASTERPHONE) G1sms+ wallet: $DESTRIB ($LOCALPHONE)" else # SEARCH IN WALLETS SWARM (MEMBER THEN UIDNA) - INSWARM=$(grep -Rwl "$DESTMEM" ./wallets_swarm/*/*.uidname | tail -n 1 | cut -f 3 -d '/') - if [[ "$INSWARM" == "" ]]; then INSWARM=$(grep -Rwl "$DESTMEM" ./wallets_swarm/*/*.uidna | tail -n 1 | cut -f 3 -d '/'); fi + INSWARMHASH=$(grep -Rwl "$DESTMEM" ./wallets_swarm/PHONE/*/_uidname | tail -n 1 | cut -f 4 -d '/') + [[ ! $INSWARMHASH ]] && INSWARMHASH=$(grep -Rwl "$DESTMEM" ./wallets_swarm/PHONE/*/_uidna | tail -n 1 | cut -f 4 -d '/') if [[ "$INSWARM" != "" ]]; then - REMOTENODE=$(cat ./wallets_swarm/$INSWARM/MASTERPHONE.sms) - DESTRIB=$(cat ./wallets_swarm/$INSWARM/$INSWARM.pub) + REMOTENODE=$(cat ./wallets_swarm/PHONE/$INSWARM/MASTERPHONE.sms) + DESTRIB=$(cat ./wallets_swarm/PHONE/$INSWARM/_pub) DESTPHONE=$INSWARM log "__SUB:sms_REC.sh: FOUND SWARM ($REMOTENODE) G1sms+ wallet: $DESTRIB ($INSWARM)" else @@ -106,7 +106,7 @@ fi # ADD DATES TO VIREMENTS if [[ "$DESTRIB" != "" ]]; then log "__SUB:sms_REC.sh: TRAITEMENT DU VIREMENT DE $AMOUNT $UNIT = 1ER VIREMENT de $VIR G1 vers $VIRDEST ($DESTRIB) $TIME FOIS. OK..." - PAY=$(./shell/timeout.sh -t 20 ./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] REC 1/$TIME ($PERIOD)" -y) + PAY=$(./shell/timeout.sh -t 20 ./silkaj/silkaj transaction --auth-scrypt -salt="$UIDNA" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] REC 1/$TIME ($PERIOD)" -y) if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" || "$PAY" == "" ]]; then new=$(./shell/checknodes.sh "BAN") sms_ERROR "$PHONE" "Problème de payement avec silkaj (changement de serveur $new): $PAY"; diff --git a/shell/sms_VIR.sh b/shell/sms_VIR.sh index 63bd94c..0ae3759 100755 --- a/shell/sms_VIR.sh +++ b/shell/sms_VIR.sh @@ -73,7 +73,7 @@ else fi if [[ "$DESTRIB" != "" ]]; then - PAY=$(./shell/timeout.sh -t 30 ./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] VIR $VIR G1" -y) + PAY=$(./shell/timeout.sh -t 30 ./silkaj/silkaj transaction --auth-scrypt -salt="$UIDNA" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] VIR $VIR G1" -y) if [[ "$(echo $PAY | cut -d '|' -f 1)" != "KO" && "$PAY" != "" ]]; then log "__SUB:sms_VIR.sh: VIREMENT VERS $DESTMEM OK" mess="[G1sms+] $MEMBER diff --git a/shell/sms_WHERE.sh b/shell/sms_WHERE.sh index b998159..adb22c7 100755 --- a/shell/sms_WHERE.sh +++ b/shell/sms_WHERE.sh @@ -21,19 +21,19 @@ Envoyez N pour créer votre portefeuille G1sms" fi if [[ "$askeduidna" == "" ]]; then #SELF - if [[ -f "./wallets/.$IPFSNODEID/$IPFSNODEID.uidna" ]]; then - nodeuidnafile="./wallets/.$IPFSNODEID/$IPFSNODEID.uidna" + if [[ -f "./wallets/.$IPFSNODEID/_uidna" ]]; then + nodeuidnafile="./wallets/.$IPFSNODEID/_uidna" uidna=$(cat $nodeuidnafile) fi else - nodeuidnafile=$(grep -Rwl "$askeduidna" ./wallets_swarm/.*/*.uidna) + nodeuidnafile=$(grep -Rwl "$askeduidna" ./wallets_swarm/.Qm*/_uidna | tail -n 1) uidna=$(cat $nodeuidnafile) fi if [[ -f $nodeuidnafile && "$uidna" != "" ]]; then ipfsnodeid=$(echo $nodeuidnafile | cut -d '/' -f 3 | cut -d '.' -f 2 ) - echo $uidna > ./wallets/$PHONE/uidna.G1TAGNODE - echo $ipfsnodeid > ./wallets/$PHONE/ipfsid.G1TAGNODE + echo $uidna > ./wallets/PHONE/$PHONE/uidna.G1TAGNODE + echo $ipfsnodeid > ./wallets/PHONE/$PHONE/ipfsid.G1TAGNODE log "__SUB:sms_WHERE.sh: Distributeur de G1Tag $uidna : $ipfsnodeid " I=$(ipfs_node_wallets_add) log_history $PHONE "G1TagNode, $uidna, $ipfsnodeid" @@ -47,7 +47,7 @@ fi mess="[G1sms+] $MEMBER Votre distributeur de G1Tag par défaut est $uidna ($ipfsnodeid), situé: -$(cat ./wallets_swarm/.$ipfsnodeid/$ipfsnodeid.where)" +$(cat ./wallets_swarm/.$ipfsnodeid/_where)" sms_SEND "$PHONE" "$mess" diff --git a/shell/tag_READ.sh b/shell/tag_READ.sh index 1f4a2a7..90e4cb5 100755 --- a/shell/tag_READ.sh +++ b/shell/tag_READ.sh @@ -155,8 +155,8 @@ cat /dev/ttyACM0 | while read line; do # Make Silkaj TX G1VAL=$(bc -l <<< "scale=2; $BVALUE / 100" | cut -d '.' -f 1) - log "__SUB:tag_READ.sh: Silkaj TX $SWARM_G1AUTHFILE ($G1VAL) -> $CASHBACK" - PAY=$(./silkaj/silkaj transaction --auth-file -file="$SWARM_G1AUTHFILE" --amount=$G1VAL --output=$CASHBACK --comment="[G1sms+] CAPTURE G1Tag $RR" -y) + log "__SUB:tag_READ.sh: Silkaj TX $NODE_G1AUTHFILE ($G1VAL) -> $CASHBACK" + PAY=$(./silkaj/silkaj transaction --auth-file -file="$NODE_G1AUTHFILE" --amount=$G1VAL --output=$CASHBACK --comment="[G1sms+] CAPTURE G1Tag $RR" -y) log "__SUB:tag_READ.sh: Silkaj output = $PAY" if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" ]]; then @@ -221,7 +221,7 @@ cat /dev/ttyACM0 | while read line; do else log "__SUB:tag_READ.sh: Transfert de G1 Tag à G1 Tag. $BVALUE $CUR" ./shell/parle.sh "Transfert de ${val[1]} $CUR vers le G1 Tag ${FID}" - log "__SUB:tag_READ.sh: $(./shell/tag_OP.sh ${obj[1]} ${obj[0]} ${val[1]} $SWARM_G1AUTHFILE)" + log "__SUB:tag_READ.sh: $(./shell/tag_OP.sh ${obj[1]} ${obj[0]} ${val[1]} $NODE_G1AUTHFILE)" fi CASHBACK="" fi @@ -234,7 +234,7 @@ cat /dev/ttyACM0 | while read line; do else log "__SUB:tag_READ.sh: Transformation du G1 Tag en Rec Tag. ${val[0]} = ${val[1]}" ./shell/parle.sh "Transformation du G1 Tag ${val[0]} $CUR en Rec Tag chargé de ${FID}..." - log "__SUB:tag_READ.sh: $(./shell/tag_OP.sh ${obj[0]} ${obj[0]} 0 $SWARM_G1AUTHFILE)" + log "__SUB:tag_READ.sh: $(./shell/tag_OP.sh ${obj[0]} ${obj[0]} 0 $NODE_G1AUTHFILE)" fi CASHBACK="" fi diff --git a/shell/tag_READ_X.sh b/shell/tag_READ_X.sh index d783b0e..55d3513 100755 --- a/shell/tag_READ_X.sh +++ b/shell/tag_READ_X.sh @@ -20,9 +20,9 @@ function log () { $1" >> /tmp/tag_READ_X.log } -SWARM_G1AUTHFILE="${MY_PATH}/../g1sms.priv.key" -if [ ! -f $SWARM_G1AUTHFILE ]; then echo "ERREUR CLEF DECHIFFRAGE!"; exit; fi -# TODO G1TAG: USE CREATOR NODE KEY FILE INSTEAD OF SWARM_G1AUTHFILE SWARM KEY +NODE_G1AUTHFILE="${MY_PATH}/../g1sms.priv.key" +if [ ! -f $NODE_G1AUTHFILE ]; then echo "ERREUR CLEF DECHIFFRAGE!"; exit; fi +# TODO G1TAG: USE CREATOR NODE KEY FILE INSTEAD OF NODE_G1AUTHFILE SWARM KEY # DOUCHETTE ES TU LA? if [ ! $G1TX ]; then echo "Branchez votre lecteur de QR code!"; exit; fi @@ -177,8 +177,8 @@ cat /dev/ttyACM0 | while read line; do # Make Silkaj TX G1VAL=$(bc -l <<< "scale=2; $BVALUE / 100" | cut -d '.' -f 1) - log "__SUB:tag_READ_X.sh: Silkaj TX $SWARM_G1AUTHFILE ($G1VAL) -> $CASHBACK" - PAY=$(./silkaj/silkaj transaction --auth-file -file="$SWARM_G1AUTHFILE" --amount=$G1VAL --output=$CASHBACK --comment="[G1sms+] G1Tag $RR ZEN -> G1" -y) + log "__SUB:tag_READ_X.sh: Silkaj TX $NODE_G1AUTHFILE ($G1VAL) -> $CASHBACK" + PAY=$(./silkaj/silkaj transaction --auth-file -file="$NODE_G1AUTHFILE" --amount=$G1VAL --output=$CASHBACK --comment="[G1sms+] G1Tag $RR ZEN -> G1" -y) log "__SUB:tag_READ_X.sh: Silkaj output = $PAY" # Stop 1LETTER.spinner.py @@ -251,8 +251,8 @@ cat /dev/ttyACM0 | while read line; do COMBIENZEN=$(bc -l <<< "$COMBIEN * 100") log "__SUB:tag_READ_X.sh: Transfert de G1 Tag à G1 Tag. $COMBIEN" ./shell/tools/4LETTER.scroll.py "G1TAG ${FID} -> TX $COMBIENZEN ZEN *** $COMBIEN G1" - log "__SUB:tag_READ_X.sh: ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN $SWARM_G1AUTHFILE" - ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN "$SWARM_G1AUTHFILE" + log "__SUB:tag_READ_X.sh: ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN $NODE_G1AUTHFILE" + ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN "$NODE_G1AUTHFILE" else ./shell/tools/4LETTER.scroll.py "ERREUR $COMBIEN > VALEUR DE ${FID} *** ${val[1]} ZEN" fi @@ -268,7 +268,7 @@ cat /dev/ttyACM0 | while read line; do else log "__SUB:tag_READ_X.sh: Transformation du G1 Tag en Rec Tag. ${val[0]} = ${val[1]}" ./shell/tools/4LETTER.scroll.py "TRASNFORMATION G1TAG ${val[0]} ZEN EN PASSENGER ${FID}"; - log "__SUB:tag_READ_X.sh: $(./shell/tag_OP.sh ${obj[0]} ${obj[0]} 0 $SWARM_G1AUTHFILE)" + log "__SUB:tag_READ_X.sh: $(./shell/tag_OP.sh ${obj[0]} ${obj[0]} 0 $NODE_G1AUTHFILE)" fi CASHBACK="" fi diff --git a/shell/tata.sh b/shell/tata.sh new file mode 100755 index 0000000..434773e --- /dev/null +++ b/shell/tata.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo yoyoyo diff --git a/shell/test.sh b/shell/test.sh new file mode 100755 index 0000000..c987554 --- /dev/null +++ b/shell/test.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +pwd=$(pwd) + +if [[ -f $MY_PATH/.profile ]]; then + source $MY_PATH/.profile +elif [[ -f $MY_PATH/../.profile ]]; then + source $MY_PATH/../.profile +else + echo -e "${c_red}Le .profile n'existe pas$c_" + exit 1 +fi + +source $GPATH/shell/tata.sh || echo "pas trouvé" + +echo "je suis là: $GPATH/shell !" + +#$GPATH/shell/sms_AIDE.sh $1 + +exit 0 diff --git a/sms_received.sh b/sms_received.sh index f422ac9..4c2e8b1 100755 --- a/sms_received.sh +++ b/sms_received.sh @@ -39,6 +39,7 @@ export YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) cd $MY_PATH source $MY_PATH/shell/init.sh source $MY_PATH/shell/functions.sh +date=$(date '+%D à %H:%M') ################################################################## # Get global variables from gammu-smsd @@ -48,13 +49,12 @@ TEXT="$SMS_1_TEXT" CMD=$(echo "$TEXT" | awk '{print toupper($1)}') log "##########################################################################################" +log "#################################### ${c_yellow}$date$c_ ####################################" +log "##########################################################################################\n" +log "${c_green}SMS received $PHONE $TEXT$c_" log "#############################################" -log "#############################################" -log "$(date)" -log "SMS received $PHONE $TEXT" -log "#############################################" -log "NODE: ALL WALLETS: ipfs ls /ipns/$IPFSNODEID" -log "NODE: G1wallet: cat ./wallets/.$IPFSNODEID/NODE.pub" +log "${$c_yellow}NODE: ALL WALLETS: ipfs ls /ipns/$IPFSNODEID$c_" +log "${$c_yellow}NODE: G1wallet: cat ./wallets/.$IPFSNODEID/NODE.pub$c_" log "#############################################" ################################################################## @@ -75,7 +75,7 @@ then NODEPHONE=$(cat "./wallets_swarm/$PHONE/MASTERPHONE.sms") if [[ "$NODEPHONE" != "$MASTERPHONE" && "$NODEPHONE" != "" ]]; then sms_SEND "$PHONE" "[G1sms+] Vous avez déjà un compte portefeuille sur $NODEPHONE (Envoyez lui RAZ si vous voulez fermer votre compte)" - log "ALERT!! $PHONE compte existant sur le NODE G1sms+ ($NODEPHONE)" + log "${c_red}ALERT!! $PHONE compte existant sur le NODE G1sms+ ($NODEPHONE)$c_" exit fi else @@ -205,8 +205,9 @@ case "$CMD" in ;; *) #./shell/sms_ERROR.sh "$PHONE" "$TEXT" & - log "SMS forward to $ADMINPHONE" - sms_SEND "$ADMINPHONE" "$PHONE !! BAD CMD: $TEXT" + log "${$c_yellow}SMS forward to $ADMINPHONE$c_" + sms_SEND "$ADMINPHONE" "ADMIN! BAD SMS FROM $PHONE +$TEXT" ;; esac diff --git a/wait_actions/test/tata b/wait_actions/test/tata new file mode 100644 index 0000000..fbcf12d --- /dev/null +++ b/wait_actions/test/tata @@ -0,0 +1 @@ +toto diff --git a/wait_actions/test/tata2 b/wait_actions/test/tata2 new file mode 100644 index 0000000..e69de29 diff --git a/wait_actions/test/toto/popo b/wait_actions/test/toto/popo new file mode 100644 index 0000000..e69de29 diff --git a/wait_actions/test/toto/titi/ml b/wait_actions/test/toto/titi/ml new file mode 100644 index 0000000..e69de29