Script bash pour prendre soin de ses contacts, adaptation, mise en ligne

Bonjour,

On m’a proposé de modifier le code de cet outil ( Petit script en bash pour nous donner un bilan de l'adhésion de nos contacts ) pour que ça puisse être mis en ligne.

Il y a encore des soucis, je ne comprends pas tout bien sûr.

Sur ma version bash j’ai dû changer de noeud (donc je vais mettre un menu pour ça aussi).

Voici le lien du site où la version pour mise en ligne est discutée: Samuel ORTION / gcheck · GitLab

Je tiens à préciser que le projet est encore assez peu fonctionnel: peut être le problème de noeud (qu’il faudrait mettre aux choix dans le formulaire d’acceuil).

Je n’ai jamais réussi à tester si mon interface fonctionne jusqu’au bout. (le script bash ne fonctionnait pas lui-même lors des tests, et je n’ai pas réussi à le debuguer, à ce moment.

Si des gens veulent contribuer au projet, ils sont les bienvenus. (c’est dans la branche main, il n’y a rien dans master…)

Bonjour @hypericum, @UncleSamulus.

Je n’ai pas vraiment pris le temps alors je vais peut-être dire des bêtises.

À la lecture du script Bash une chose m’a interpelé. La sortie de silkaj wot est utilisé puis décortiqué (via plusieurs fichiers) pour en extraire des données. Or, silkaj collecte les données (en JSON il me semble) puis les formate pour les rendre lisible par un humain. Cela ajoute de la manipulation de données inutile.

Voilà la partie dont je parle :

#recherche des informations sur les contacts, avec silkaj
silkaj -p g1.presles.fr wot $(cat RES) > silkajtxt

#mise en forme, récupération du texte de 2 colonnes
sed '1,4d' silkajtxt | awk '{ gsub("+",""); split($4,var,"."); print var[1]; }' | sed '/|/d' | sed '/^$/d' |
sed -e :a -e '$d;N;2,3ba' -e 'P;D' > silkajtxt2

#mise en forme, remplacement des retours à la ligne par des "|"
echo $(cat silkajtxt2) | tr ' ' '|' | sed 's/\([a-zA-Z]\);\([a-zA-Z]\)/\1 \2/g' > silkajtxt3

Voici ce qui pourrait remplacer cette partie :
Comme je n’ai pas de compte membre, je vais prendre celui de @fdrubigny.

curl -s https://g1.cloud-libre.eu/wot/certifiers-of/32jZNQLKYfW9KtCHiaSewR27ZRb6zoncC6JvBVCBW4k1 |jq -r '.certifications[] | .uid' |tr '\n' '|'

Cet exemple produit exactement ce que le fichier silkajtxt3 contient. (Cela implique d’avoir curl et jq sur la machine)

Sinon, j’ai une ou deux questions :

  1. Pourquoi le Bash, il y a une raison ou cela c’est juste fait comme ça ?

  2. Pourquoi produire un affichage en fenêtre, pourquoi pas une page html+css par exemple ?

Salut,

La commande curl est plus simple et mieux, c’est sûr.
Par contre il me faut les certificateurs et les certifiés d’une personne, ta proposition ne fait pas les certifiés?!

Pourquoi le bash: parce que j’étais impatient et voulait rapidement une appli, donc me suis lancé à la faire moi-même, et je ne sais pas faire autre chose.

Comme c’est en gros des lignes de commande mises en programme, c’est flemmard pour moi.
Pour sed, je ne suis pas un spécialiste, alors j’ai pompé du stackoverflow!

Et pourquoi l’affichage en fenêtre, parce que j’aime bien les petits outils pour ça et je les connais (mais pour une mise en ligne il faut html + css)

1 « J'aime »

Certificateurs :

curl -s https://g1.cloud-libre.eu/wot/certified-by/32jZNQLKYfW9KtCHiaSewR27ZRb6zoncC6JvBVCBW4k1 |jq -r '.certifications[] | .uid' |tr '\n' '|'

Certifiés :

curl -s https://g1.cloud-libre.eu/wot/certifiers-of/32jZNQLKYfW9KtCHiaSewR27ZRb6zoncC6JvBVCBW4k1 |jq -r '.certifications[] | .uid' |tr '\n' '|'

Après je ne sais pas s’il te les faut dans une seule liste !?
Si oui un truc comme ça peut le faire :

curl -s https://g1.cloud-libre.eu/wot/certified-by/32jZNQLKYfW9KtCHiaSewR27ZRb6zoncC6JvBVCBW4k1 |jq -r '.certifications[] | .uid' > cert.tmp
curl -s https://g1.cloud-libre.eu/wot/certifiers-of/32jZNQLKYfW9KtCHiaSewR27ZRb6zoncC6JvBVCBW4k1 |jq -r '.certifications[] | .uid' >> cert.tmp
sort -u cert.tmp |tr '\n' '|' > cert && rm cert.tmp 
#  le fichier "cert" contient la liste des certifiés + certificateurs

EDIT_sed: Pour sed: [a-zA-Z] = [a-Z] cela permet de simplifier

avec bash je peux mettre deux listes bout à bout, avec > ou >> je confond toujours les deux

(edit: ah ben voilà tu l’avais fait j’avais pas rtfmisé jusqu’au bout)

et jq je connaissais pas.

En fait j’ai pas tout compris à quoi sert ce script ? :blush:
Prendre soin de ses contacts, c’est à dire ? Quelles informations le script renvoie, une notification manque de certification, renouvellement adhésion ?
Amicalement. :slight_smile:

Voici une proposition de modification du script :

#!/bin/bash

if [ $# != 1 ] ; then
    echo "[!] pubkey not found.
    USAGE: bash $0 PUBKEY"
    exit 0
fi
pubkey=$1

# recup les listes de wot-wizard
# $file_ww = $( get_ww LISTE_NAME )
get_ww () {
    filename=$1
    url='https://wot-wizard.duniter.org/'
    curl -s ${url}${filename} > "./${filename}.tmp"
    echo ./${filename}.tmp
        
    # 30limitsMember
    # 31limitsMissing
    # 32limitsCerts
    # 21qualities
    # 01wwFile
}

# Recherche des informations sur les contacts, avec silkaj
# $file_cert = $(get_cert PUBKEY )
get_cert () {
    pubkey=$1
    url='https://g1.cloud-libre.eu/'
    curl -s ${url}wot/certified-by/${pubkey}  |jq -r '.certifications[] | .uid' > ./temp
    curl -s ${url}wot/certifiers-of/${pubkey} |jq -r '.certifications[] | .uid' >> ./temp
    sort -u ./temp |tr '\n' '|' > ./cert.tmp && rm ./temp
    sed -i 's/|$//' ./cert.tmp
    echo ./cert.tmp
}

# Affichage
# affiche FILE_WW FILE_CERT TITLE
affiche () {
    file_ww=$1
    file_cert=$2
    title=$3
    whiptail --scrolltext --msgbox --title "$title" "$(cat $file_ww |grep -E $(cat $file_cert))" 25 80
}

# Dict des listes wot-wizard avec leurs titre
declare -A dict_title
dict_title[30limitsMember]='Dates limites des Adhésions'
dict_title[31limitsMissing]='Dates limites des adhésions non-renouvelées'
dict_title[32limitsCerts]='Dates limites des certifications'
dict_title[21qualities]='Pourcentage de reliance des contacts'
dict_title[01wwFile]='Certifications en cours des contacts'


# main
file_cert=$( get_cert $pubkey )
for i in ${!dict_title[*]}; do
    file_ww=$( get_ww $i )
    affiche "$file_ww" "$file_cert" "${dict_title[$i]}"
done
exit 0

Et pour répondre a @fdrubigny voici un test de ce script avec ton compte :

bash script.sh 32jZNQLKYfW9KtCHiaSewR27ZRb6zoncC6JvBVCBW4k1





En gros, le script liste les comptes liés à ton compte et va chercher des infos sur différente liste de wot-wizard.

2 « J'aime »

Je suis en train de bosser dessus, après les remarques de Djez!

C’est comme des formules magiques les lignes de commande, pour les fignoler (là où j’en suis!)

En fait c’est un petit programme que j’ai écrit, qui sert à notifier et faire un bilan de là où en sont nos contacts: des dates limites des certifications, des renouvellements d’adhésion, des adhésions non-renouvellées, du pourcentage de reliance (la « qualité » de membre), et si des gens de nos contacts sont en train de certifier.

Il y a peut-être d’autres infos utiles qui pourraient être rajoutées.
Et il serait possible (avec la commande echo « Salut, j’ai vu que vous allez manquer de certifications » | mail -s « Manque de certifications » compteg1@riseup.net )

1 « J'aime »

Yes ! Merci pour vos réponses @Mr_Djez et @hypericum :slight_smile:
C’est très intéressant, effectivement un petit mail pour prévenir ça serait bien sympa, même si le bot le fait déjà, là il faudrait genre recevoir le mail, 15 jours voir 1 mois avant échéance…

Après en lisant un peu plus haut la discussion, un pt’it coup d’habillage html5 +CSS3 serait bien agréable aussi…
Là ce script se récupère sur le Gitlab indiqué en haut du fil ?
Amicalement. :slight_smile:

Salut,

La commande que j’ai mentionnée pour le mail est primitive, certains fournisseurs de mail pourraient bloquer de tels mails.
(donc normalement il faut utiliser une commande « propre » ou un truc astucieux)

Je connais pas l’html5 et CSS3, au niveau codage.

Alors c’est Samuel Ortion qui a fait le gitlab, il a pas dû mettre les modifs de Mr Djez.

Je suis en train d’essayer le script de @Mr_Djez ; bon j’arrive même pas à le faire tourner!

1 « J'aime »

Oui en fait sur le Gitlab il n’y a que le Readme et la licence. :slight_smile:

Alors j’avais pris comme clé publique des comptes non certifiés: normal que ça ne marche pas!
Au moins je crashe-teste!

La commande:
curl --ssl-reqd smtps://smtp.lautre.net --mail-from truc@muche.lautre.net --mail-rcpt machine@riseup.net --upload-file email.txt --user 'truc@muche.lautre.net:P4ssw0rdeuh'

Avec comme email.txt:

From: Truc Muche <truc@muche.lautre.net>
To: Ma Chine <machine@riseup.net>
Subject: Un exemple de mail 
Date: Mon, 6 Sept 2021 23:09:12
​
Salut, 
Super la Ğ1 quand même.

Mais fais quand même gaffe tu vas manquer de certifs!

Ben ça marcherait bien pour envoyer des notifs à nos contacts!
Bon mais du coup ça complique parce qu’il ne serait pas cool d’avoir en clair les coordonnées de nos contacts!

(les planquer avec steghide!? keepass en ligne de commande ça se fait? il doit y avoir plus simple)

Tout à fait d’accord sur le point ‹ flemmard ›. Ce n’ai pas du tout pensé pour être efficace par rapport au specificités de la G1, que je suis loin de maîtriser, n’ayant qu’à peine eu le temps pour reflechir à mon utilisation actuelle de la G1, et encore moins du protocole qui tourne sous le capot…

Pour palier a ce genre de chose, la fonction suivante pourra être intégrée au script :

# is_member PUBKEY
is_member () {
    pubkey=$1
    curl -s https://g1.cloud-libre.eu/wot/members |jq -r '.results[] | .pubkey'|grep $pubkey > /dev/null
    return $?
}

Exemple d’utilisation :

#!/bin/bash

# is_member PUBKEY
is_member () {
    pubkey=$1
    curl -s https://g1.cloud-libre.eu/wot/members |jq -r '.results[] | .pubkey'|grep $pubkey > /dev/null
    return $?
}

pk_member="32jZNQLKYfW9KtCHiaSewR27ZRb6zoncC6JvBVCBW4k1"
pk_no_member="yolo"

for i in $pk_member $pk_no_member; do
    if is_member $i; then
	    echo "$i is member"
    else 
        echo "$i not member"
    fi
done

C’est bien pour ça que j’ai choisi ta clef publique :wink:
Si tu trouves le temps de proposer un template de page HTML+CSS :stuck_out_tongue_winking_eye:

1 « J'aime »

Merci pour votre soutien ‹ juridique › fort, dans les conditions ‹ sensibles › et asses difficile à gérer, dans mon cas, en rapport avec la blockchain de la G1.

Cordialement,

@UncleSamulus