rene-d / sysbus

Contrôle par script d'une Livebox 2, 3 et 4

Home Page:http://rene-d.github.io/sysbus/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Demande de fonctionnalité (marquer les appels lus)

N0ury opened this issue · comments

commented

Salut,

C'est vraiment un super boulot.
Bravo!

J'utilise l'option -calls pour récupérer les missed.
Ça me permet de m'envoyer une alerte pour savoir qu'on m'a appelé en mon absence.
Je voudrais marquer les numéros traités comme lus.
J'ai vu que les résultats sont de la forme:

{
  "remoteNumber": "0304050607",
  "remoteName": "",
  "terminal": "FXS1",
  "startTime": "2020-01-03T19:32:16Z",
  "duration": 238,
  "callType": "succeeded",
  "callOrigin": "local",
  "callDestination": "SIP",
  "trunkLineNumber": "+33141424344",
  "viewed": false,
  "callId": "71"
}

Je me demandais s'il était possible de passer le champs viewed des enregistrements lus à true.
Il faudrait alors avoir un -missed qui afficherait uniquement les missed avec viewed à false, et qui le passerait à true. De cette manière, on aurait toujours les nouveaux missed, ceux non lus.
Qu'en penses-tu ?
Ce serait vraiment utile.

edit: anonymisation des numéros de téléphone

Hello,

Merci pour le commentaire :)

Je ne sais pas comment est géré le champ viewed, ni ce qui provoquerait un passage à true. J'ai essayé l'interface de la Livebox, le champ reste à false quoi qu'on fasse. La seule que j'ai reussie à faire est de supprimer des appels.

Le plus simple est de sauver les appels à sysbus -calls et de n'afficher que la différence...

Je constate aussi que la Livebox possède un annuaire (interne?) des numéros de téléphone. Il y a donc éventuellement d'autres fonctionnalités à explorer. Ceci est bien postérieur au moment où j'ai écrit le programme.

PS: je me suis permis de remplacer les numéros de téléphone par des faux.

commented

Merci pour ta réponse.
J'avais trouvé comment effacer la liste complète (je ne sais plus où)

service:VoiceService.VoiceApplication
method:clearCallList

Je n'ai pas trouvé par contre comment supprimer les appels de manières individuelle, comme sur l'interface.
Il faudrait en savoir plus sur VoiceService.VoiceApplication. Mais j'ai cherché des heures sans succès...
Je vais faire comme tu dis, travailler sur des différences.
Ton code est en tout cas, la source d'information la plus importante que j'ai pu trouver.
Si je trouve un moyen, je reviendrai le dire.

Tu peux probablement effacer un appel avec VoiceService.VoiceApplication:clearCallList

info pour explorer:

curl -s http://livebox.home/sdkut/semantic/sah/Content/CallLog/deleteEntry.js  | js-beautify
curl -s http://livebox.home/sdkut/apis/pcb/VoiceService/clearCallList.json | jq

Lorsque j'explorais la livebox (lb play à l'époque, avant la lb4), j'utilisais abondamment le mode développeur du navigateur pour voir les appels faits l'interface web. Avant, on pouvait récupérer assez facilement l'ensemble des .js, maintenant c'est un poil plus compliqué je pense. En tout cas, je n'ai pas essayé. Orange (et ses sous-traitants) ont modifié plein de choses, sauf les entrailles heureusement. Le frontend de la lb4 est probablement aussi - voir plus - compliqué que la partie routeur.

Deux points d'entrée:

curl -s http://livebox.home/loader.js | js-beautify
curl -s http://livebox.home/common/commonLoader.js | js-beautify
commented

Pour la suppression sélective, ça fonctionne.
Il faut :

service:VoiceService.VoiceApplication
method:clearCallList

et passer comme paramètres:
{"callId":"numéro"} numéro étant le callId à supprimer.

J'ai testé avec:

# On supprime l'appel 74
d='{"service":"VoiceService.VoiceApplication","method":"clearCallList","parameters":{"callId":"74"}}'
curl -s -b myCookies -X POST -H 'Content-Type: application/x-sah-ws-4-call+json; charset=UTF-8' -H 'Accept: text/javascript' -H 'X-Context: '"$contextID"'' -H 'X-Prototype-Version: 1.7' -d $d http://192.168.1.1/ws

C'est grace à ce que tu m'as indiqué que j'ai pu faire ça, plus le mode développeur de Chrome
(je ne suis pas du tout développeur web).

Pour l'update du champs viewed, c'est une autre histoire. Je ne sais même pas si un moyen existe.

J'ai rajouté de quoi explorer un peu plus facilement.

https://github.com/rene-d/sysbus/tree/master/misc

Il y a mille façons d'espionner une interface web. Mode développeur ou Charles Proxy quand c'est en https, wireshark, tcpflow, httpry, un proxy, un reverse proxy (proxy.py par exemple), ou que sais-je encore.

J'ai finalement opté pour un reverse proxy en Go, parce que c'est simple à écrire, et la librairie standard fournit même la fonctionnalité !

Mais ça ne répond toujours pas à la question initiale :) D'ailleurs VoiceService.VoiceApplicationn'existe pas dans les TR du Broadband Forum. Je suppose que c'est une orangerie ou une softathomerie.

Et l'objet n'est pas inspectable, comme le sont d'autres. Dommage.

# On supprime l'appel 74
d='{"service":"VoiceService.VoiceApplication","method":"clearCallList","parameters":{"callId":"74"}}'
curl -s -b myCookies -X POST -H 'Content-Type: application/x-sah-ws-4-call+json; charset=UTF-8' -H 'Accept: text/javascript' -H 'X-Context: '"$contextID"'' -H 'X-Prototype-Version: 1.7' -d $d http://192.168.1.1/ws
sysbus VoiceService.VoiceApplication:clearCallList callId=74

Much, much easier 😇

commented

Cette méthode est super pour tester. Ça évite de se faire un script avec la gestion des cookies, le logout, et tout le toutim...
Je viens d'essayer pour le clear sélectif, ça fonctionne parfaitement.
Ce serait bien de mettre ça en évidence dans le README.

commented

J'ai rajouté de quoi explorer un peu plus facilement.

https://github.com/rene-d/sysbus/tree/master/misc

Bien sympa tout ça.
Je ne connais pas "go". C'est très efficace.
Pour aller un cran plus loin, de même que l'on a GET et POST, comment ajouter RESPONSE qui contiendrait les retours bruts ?

Ceci dit, tu pourrais même en faire un projet à part entière, et pas un simple misc.
Évidemment, il y aura des demandes (la preuve!), et donc du boulot en plus. Mais ça en vaut la peine.

Pour le projet, je verrai si l'occasion se présente :) Je ne suis non plus pas du tout développeur web (ni contenu, ni infra)... Mais ça devient incontournable.

Il y a déjà beaucoup de littérature sur les reverse proxies (au hasard: tuto en français avec nginx assez bien expliqué). nginx est d'ailleurs très utilisé comme frontend aux applications web (genre grafana, elk, jenkins, etc.). Je trouve d'ailleurs ce procédé sain.

Et les exemples en Go ne manquent pas non plus: ici, , etc.

Pour dumper directement le contenu de la réponse, il faut ajouter ce genre code avant proxy.ServeHTTP(res, req) :

    proxy.ModifyResponse = func(r *http.Response) error {
        log.Println(getBodyRep(r))
        return nil
    }

avec getBodyRep la même chose que getBody mais pour http.Response

commented

Merci.

Dans getfiles.sh, je me suis permis d'ajouter le traitement des lignes POST.

ça donne:

# Connexion et récupération du cookies
contextID=$(curl -s -X POST -c "myCookies" -H 'Content-Type: application/x-sah-ws-4-call+json' -H 'Authorization: X-Sah-Login' -d '{"service":"sah.Device.Information","method":"createContext","parameters":{"applicationName":"so_sdkut","username":"admin","password":"XXXXXXXX"}}' http://livebox.home/ws|jq --raw-output '.data.contextID')

grep '^POST' livebox.log | grep -v ' {"events":' | while read col1 col2 col3
do
  i=$[i + 1]
  curl -s -b myCookies -X POST \
       -H 'Content-Type: application/x-sah-ws-4-call+json; charset=UTF-8' \
       -H 'Accept: text/javascript' \
       -H 'X-Context: '"$contextID"'' \
       -H 'X-Prototype-Version: 1.7' \
       -o livebox.home/$i.json \
       -d "$col3" $col2
done

#Déconnexion et suppression des fichiers temporaires
curl -m1 -s -b myCookies -X POST http://livebox.home/logout
rm myCookies

J'ai utilisé cette méthode pour éviter les connexions/déconnexions multiples.

C'est placé avant le find sur les json évidemment.
Les fichiers sont en vrac dans livebox.home.
Je ne sais pas ce que tu en penses.

ça rejoue les requêtes ;-)
j'ai amélioré le script en nommant les fichiers .json créés (et en white-listant le type de requêtes que le script fait. je ne rejoue pas les set notamment...)
je pousse

commented

Avec le nouveau getfiles.sh j'ai une erreur sur l'appel js-beautify l'option -q n'est pas reconnue.
J'utilise la version jsbeautifier 1.10.2 sous Mac. Toutefois, je l'installe avec un pip install sous Python3 (3.7.6).

J'ai également essayé missing.py, mais j'ai l'erreur :

Traceback (most recent call last):
  File "./missing.py", line 134, in <module>
    main()
  File "./missing.py", line 130, in main
    parse_file(i)
  File "./missing.py", line 110, in parse_file
    if r[0] in paths:
TypeError: argument of type 'NoneType' is not iterable

En cherchant un peu, je n'ai pas de fichiers loader.js.
Comment le ou les produire ?

En dehors de ça, j'ai reçu une offre intéressante de la part d'Orange. Je vais changer de forfait, et en prendre un avec Livebox 5. Je ne sais pas ce que ça donnera. Je ferai l'essai à réception du colis dans 10 à 15 jours.

Hello
Contacte moi par mail ou LinkedIn plutôt, ça sera plus pratique

commented

Salut,

Je t'ai envoyé un mail. Dis-moi si tu l'as reçu.

Avec le nouveau getfiles.sh j'ai une erreur sur l'appel js-beautify l'option -q n'est pas reconnue.
J'utilise la version jsbeautifier 1.10.2 sous Mac. Toutefois, je l'installe avec un pip install sous Python3 (3.7.6).

cf. README.md : https://github.com/beautify-web/js-beautify et non jsbeautifier ;-)

brew install node
npm -g install js-beautify

Je ne connais pas le quasi homonyme en Python.

J'ai également essayé missing.py, mais j'ai l'erreur : (...)

il faut absolument les fichiers livebox.home/.../loader.js . ils sont forcément listés dans le log du reverse proxy, ce sont quasiment les premiers fichiers chargés. cf. RequireJS pour mieux comprendre comment fonctionne le chargement et le lancement asynchrone des modules javascript.

commented

Salut,

Je t'ai écrit sur l'adresse que tu as indiquée plus haut, ainsi que sur celle (gmail) qui est définie sur ton compte Github. Mais j'ai l'impression que tu n'as reçu aucun de mes mails.
tu peux m'écrire sur: nb à dagami point org

Bref, j'ai reçu la lb5. Ce que j'ai testé fonctionne bien. Il semble y avoir une grande, voire totale, compatibilité avec la lb4.

J'ai juste remarqué que:

  • la détection des adresses en ipv6 fonctionne mieux (option -ipv6 de sysbus)
  • les différents historiques (appels, connexions, et contacts) ne sont pas stockés sur la lb, mais ailleurs. J'ai presque tout retrouvé.