Demande de fonctionnalité (marquer les appels lus)
N0ury opened this issue · comments
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.
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
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.VoiceApplication
n'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 😇
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.
J'ai rajouté de quoi explorer un peu plus facilement.
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, là, 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
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
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
Salut,
Je t'ai envoyé un mail. Dis-moi si tu l'as reçu.
euh non
rene.github@gmail.com
Avec le nouveau
getfiles.sh
j'ai une erreur sur l'appel js-beautify l'option-q
n'est pas reconnue.
J'utilise la versionjsbeautifier 1.10.2
sous Mac. Toutefois, je l'installe avec unpip 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.
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é.