Script bash pour prendre soin de ses contacts

Salut,

Comme je vais pas faire des up sur le forum trop de fois, et que c’est plutôt ici le lieu, voilà je parle de l’idée d’avoir un site web où il serait possible d’utiliser mon script, aidant à prendre soin de ses contacts.

Il m’a été bien utile récemment, pour prévenir des renouvellements d’adhésion avant DeathReaper, ça a été apprécié.

Mon script a été amélioré par @C.Clement comme on voit sur le forum, et pourrait évidemment encore être amélioré (la partie où on voit les certifications de nos contacts est pas très lisible), ou il pourrait y avoir des fonctionnalités en plus (mais voilà je suis un petit joueur en codage ,o)

2 Likes

Si besoin, je peux faire la partie HTML/CSS . Est-ce qu’il y a un endroit sur le web où je peux visualiser l’interface actuelle ? Dans tous les cas, il me faudrait un wireframe/mockup de ce qui est attendu afin de réaliser une maquette à intégrer dans l’application.

1 Like

Je n’ai pas d’endroit sur le web pour visualiser d’interface, ça tourne sur mon ordi uniquement, et en fait il n’y a pas réellement d’interface à proprement parler (j’utilise actuellement Xdialog et whiptail).

Et je ne connais pas les wireframe.
Je peux m’y pencher, je sais pas ce que ça représente.

Voici les scripts que j’utilise:

Celui pour le lancement:

#!/bin/bash

#whiptail est le programme pour les boîtes de dialogue
#st -e (whiptail --inputbox "Clé publique Ğ1" 8 78 3>&1 1>&2 2>&3) > RES
#exitstatus=$?; if [ $exitstatus = 1 ]; then exit 1; fi

#echo "(Exit status: $exitstatus)"

Xdialog --title "Votre clé publique" --backtitle "Pour pouvoir chercher les infos sur vos contacts" --stdout --inputbox "Clé publique Ğ1" 10 20 >RES   #la version graphique avec Xdialog

exec st -e bash script.sh $(cat RES)

Et le script proprement dit beaucoup modifié par Clément:

#!/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

exec rm RES pubkey cert cert.tmp 32limitsCerts.tmp 32limitsCerts 31limitsMissing.tmp 31limitsMissing 30limitsMember.tmp 30limitsMember 21qualities.tmp 01wwFile.tmp

exit 0

Un wireframe ou un mockup est un schéma de l’interface qui va permettre à un développeur de créer l’interface utilisateur attendue : Qu’est-ce qu’on doit afficher ? Où doit-on l’afficher ? Comment doit-on l’afficher ? En français on pourrait dire : prototypage d’application.Tu peux me faire une capture d’écran de l’interface actuelle, ce sera un début. Ensuite, tu peux utiliser Pencil par exemple qui est sous licence libre. Je suis une quiche en bash (même s’il m’arrive de faire qqes scripts de backup). Alors il faut me parler comme si je ne comprenais rien au script :wink: Une fois que l’interface est définie, il faudra me dire où trouver les informations à afficher (un ou plusieurs fichier(s) généré(s) par ton script je suppose ?) et me fournir un exemple.

1 Like

Il y a une nouvelle version de WotWizard en phase de test :
https://wotwizard.coinduf.eu/
avec, notamment la possibilité de n’afficher que les identités présentes dans un groupe dont on donne la liste.

Cela pourrait peut-être vous intéresser. En tous cas, je suis preneur de toute remarque et de toute suggestion de développement.

2 Likes

Salut @gerard94 . Ça fait un moment que je me dis qu’il faut améliorer ton interface :wink: Je crois même te l’avoir proposé lors d’une RML. On peut en parler en privé ou dans un sujet dédié.

1 Like

Oui, je sais. @HugoTrentesaux me l’a déjà proposé, mais il n’a pas beaucoup de temps, je pense. Perso, je suis déjà content d’être arrivé à quelque chose de lisible et d’utilisable, étant données mes connaissances proches de zéro en programmation web. Toute aide sera donc la bienvenue. Cela t’intéresse ?

2 Likes

Salut,

Je me suis dit aujourd’hui que l’idée de mon script pourrait être intégrée à wot-wizard. Une catégorie là-dessus, un peu comme la section « explorateur de toile de confiance ». Ou ça pourrait être intégré à cette section.

Ce que j’apprécie beaucoup avec wot-wizard est que c’est léger, on consomme très peu de données pour le consulter (et avec mon petit forfait free à 2€ c’est bien pratique, termux + w3m!)

J’ai testé le calculateur de distance et de qualité, j’ai pas tout compris (notamment la partie « nouveaux certificateurs » comment s’en servir).
Très intéressant, et utile. J’avais pensé aussi qu’il pouvait servir pour simuler la certification d’un nouveau membre (est-ce qu’il passera la règle de distance ou pas).

Pour le reste de wot-wizard, j’imagine qu’il est prévu pour être utilisé par des logiciels qui mettent en forme les données?
Je ne comprends pas toutes les sections, il faudrait que quelqu’un m’explique vraiment tout ça!

L’équivalent de g1monit ( Fichier ) est bien pratique.

Est-ce que tu pourrais résumer ce que fait ton script ? J’ai essayé sur ma clé publique et j’obtiens une liste de gens que je connais bien, et d’autres que je ne connais pas.
Sinon, je suis tout à fait d’accord pour intégrer ce genre de recherche.

C’est exactement ça. En mettant des pseudos de membres dans le champ “Nouveaux certificateurs”, tu obtiens (après clic sur OK) l’effet qu’auraient les certifications de ces membres sur la distance ou la qualité de l’identité considérée, ainsi qu’une liste de certificateurs supplémentaires avec l’effet qu’ils auraient, effets classés par ordre décroissant. Dans le cas où l’identité considérée est un nouveau venu, on peut laisser son champ vide.

Ce que tu vois à l’écran n’est que l’affichage du client WotWizard (WW), qui fait déjà un peu de mise en forme. Si tu veux améliorer celle-ci, il vaut mieux partir directement du serveur WotWizard. Celui-ci a une interface graphQL en entrée et une sortie en JSON. Tu peux lire le manuel de WotWizard (pour la dernière version officielle) ici. Pour des raisons de sécurité, cgeek n’autorise pas l’accès au serveur WW de wot-wizard.duniter.org. Il faudrait regarder si tu peux y avoir accès, au moins en privé sur le site wotwizard.coinduf.eu (voir avec @HugoTrentesaux).

@gerard94 Alors mon script va récupérer les infos sur wot-wizard.duniter.org (il pourrait en récupérer d’autres et les mettre en forme, mais j’ai pas tout compris dans wot-wizard!), celles qui sont nécessaires pour prévenir nos contacts (certifiés et certificateurs) et en prendre soin:

  • la « qualité » de membre de nos contacts; comme ça si parmi eux on a des gens qui veulent développer la Ğ1 et approchent des 80% on peut les prévenir ou les conseiller
  • les certifications en cours des contacts, comme ça on peut prévenir nos contacts si ils certifient trop de nouveaux en avance (là dans mon script c’est pas très lisible)
  • les dates limites des adhésions non-renouvelées, pour « repêcher »
  • les dates limites des adhésions, pour les prévenir avant DeathReaper
  • les dates limites des certifications, aussi pour les prévenir avant DeathReaper

On pourrait rajouter d’autres choses, comme la disponibilité de la prochaine certif, ou d’autres.

Je viens de comprendre comment faire avec « Nouveaux certificateurs ». Super!

Je ne maîtrise pas bien JSON, mais je vais lire le manuel!

Un fichier JSON contient un objet javascript (des datas sous forme de clé/valeur) facilement utilisable par tous les langages de programmation (PHP, Python, Java, javascript, etc.) car y’a toujours une fonction pour importer un JSON dans tableau ou un objet par ex. La valeur de chaque clé peut être un number, une string, un booléen, un tableau ou même un autre objet JSON (ou éventuellement NULL).

{ "nom": "Dupont",
  "prenom": "Jean",
  "isEmployed": true,
  "adresse": NULL,
  "age": 32,
  "telephone": [ { "mobile": "0612345678" },
                 { "fax": "0312345678" } ]
}

Tu peux aussi avoir la syntaxe sous forme de tableau d’objets :

[{ "prenom":"prenom1", "nom":"nom1" },
 { "prenom":"prenom2" , "nom":"nom2" },
 { "prenom":"prenom3" , "nom":"nom3" }]

Tu trouveras une description graphique simple et complète de la grammaire JSON ici.

OK, mais qui considères-tu être tes contacts ? Ceux que tu as certifiés, ceux qui t’ont certifié, d’autres personnes ?
Ton script semble filtrer les données de WotWizard autour d’un groupe particulier. C’est un peu ce que fait déjà WotWizard dans sa dernière version (à part le deuxième point que tu cites). Ces cas d’usage m’intéressent. Est-ce que tu en as d’autres en vue ?
En tous cas, belle initiative.

En fait WotWizard (partie wwServer) expose une API GraphQL qui permettrait de construire un client alternatif à l’existant (partie wwClient) avec une interface axée sur l’aspect intuitif et pratique.

J’avais tenté de mettre en place un playground GraphQL (en ce moment sur https://ww2.coinduf.eu/) ce qui pourrait faciliter le développement (de manière analogue à https://g1.librelois.fr/gva/playground) mais je ne m’y connais pas assez et WotWizard, bien que parfaitement conforme aux spécifications GraphQL était à côté des conventions implicites, ce qui rendait plus difficile de brancher des outils reposant sur ces conventions implicites.

Je suis près à te former et t’accompagner pour faire une interface graphique, et à te fournir un serveur de test et de production. J’ai déjà fait quelques mini prototypes dont je parle sur le sujet Mes contributions à la Ğ1 (HugoTrentesaux 2021-2022). Quand serais-tu dispo pour des sessions de formation de ~2h (en soirée ou le weekend par exemple) ?

Je considérai comme contacts juste ceux que j’ai certifié et qui m’ont certifié.
Il est vrai que j’ai aussi prévenu parfois d’autres connaissances de la Ğ1.

Mon script filtre les données de WotWizard autour d’une clé publique (je fais la liste des contacts de cette identité avec silkaj).

En fait je voulais quelque chose qui me donne automatiquement la situation de mes contacts.

Une autre idée que j’avais est de faire quelque chose de récursif, donner (sous la forme d’un tableau par exemple) les résultats de mon script aussi pour les contacts de nos contacts. (en s’arrêtant peut-être à 2 pas!)

1 Like

Oui pourquoi pas, je pars de peu de connaissances (j’ai surtout fait des install linux, archlinux, et du coup un peu de bash mais pas beaucoup plus!).

Je suis dispo surtout les week-end, lundis, mardis, mercredis (je bosse à mi-temps, boulot physique et peu de dépenses dans mon orga).

1 Like

je prends la discussion en cours… @hypericum je cherche à monter une interface pour visualiser mon « metavers », c’est à dire le réseau d’amis que j’ai dans la June.
Je me rends compte que certains sont membres, d’autres pas… @Gullande par exemple.

Serait il possible d’étendre ce script pour extraire des données de gchange également?

Hier soir avec hypericum, nous avons :

Je devrais réussir à publier la vidéo avant noël et ça pourra servir de base pour créer une petite visualisation du « metavers », comme tu dis.

4 Likes

Justement ça m’aurait intéressé de participer :slight_smile: Avec @gerard94 on est en train de voir pour refaire l’UI de WotWizard. Et je me demandais si y’avais pas moyen de tout faire en VueJS avec des requêtes graphQL. Je vais faire une visio mardi matin avec @ManUtopiK . On pourra en parler. Pour l’instant, je fais des maquettes from scratch, au marteau et au burin (HTML/CSS/vanillaJS) :stuck_out_tongue: qu’on essaiera d’intégrer à l’application en Go dans des fichiers de template.

2 Likes

Euh ben je suis pas contre, mais je dois apprendre!

Là ce que je vais commencer à faire, c’est modifier le script existant « au minimum », en changeant toutes les requêtes wget par des requêtes GraphQL comme me l’a expliqué @HugoTrentesaux

Ça me prendra un peu de temps, je pourrai tester des trucs.
Puis je pourrais continuer à améliorer, en vue de pouvoir l’utiliser sur un site web.
Mon rythme va être lent, mais je me suis dit que ça vaut le coup d’apprendre à me servir de tout ça.

1 Like

Je te rassure : moi aussi :stuck_out_tongue:
J’ai plutôt l’habitude des vieilles technos. Alors GraphQL, NodeJS et tout ça, j’ai jamais bossé avec. Je commence juste à apprendre la théorie :slight_smile: