p-dor / LiveboxMonitor

Interface graphique de contrôle d'une Livebox 4, 5, 6 ou 7
https://p-dor.github.io/LiveboxMonitor/
MIT License
300 stars 16 forks source link

Prise en charge de l'HTTPS dans l'ajout de profil #29

Closed Lulucmy closed 1 year ago

Lulucmy commented 1 year ago

Bonjour,

Tout d'abord bravo pour votre outil très pratique. Il fonctionne parfaitement sur Mac et avec différent types de Livebox (j'ai pu tester les 3 & 5 sans soucis).

Le seul problème que j'ai rencontré c'est en ajoutant les URLs pour la gestion à distance. Je passe par un DyDNS qui oblige à utiliser HTTPS. La fonction suivante "force" le HTTP à chaque connexion, et impossible de s'y connecter sans... https://github.com/p-dor/LiveboxMonitor/blob/8141e5f0d6bc14010c38548062259ec2daf3f5a5/src/LmTools.py#L116-L124

Problème HTTPS Livebox Monitor

Merci et bonne continuation :)

p-dor commented 1 year ago

Bonsoir, merci pour vos commentaires ! Ah je n'avais pas pensé à ce cas précis :-) Avez vous Python installé pour essayer des modifications sur le source pour vérifier que cela marche bien ? J'ai des doutes sur la bonne prise en charge de l'HTTPS par le programme...

Lulucmy commented 1 year ago

Avez vous Python installé pour essayer des modifications sur le source pour vérifier que cela marche bien ? J'ai des doutes sur la bonne prise en charge de l'HTTPS par le programme...

Pas de soucis, je teste ça

Lulucmy commented 1 year ago

Ca fonctionne en modifiant CleanURL & LmSession :

# Cleanup URL
def CleanURL(iURL):
    n = len(iURL)
    if n:
        if not iURL[n - 1] == '/':
            iURL += '/'
        if not iURL.startswith('http://') and not iURL.startswith('https://'):
            iURL = 'http://' + iURL
    return iURL

Comme les certificats TLS sont mauvais, il faut ajouter verify = False aux requêtes de LmSession.py :

r = self._session.post(self._url + 'ws', data = aAuth, headers = self._sahServiceHeaders, timeout = DEFAULT_TIMEOUT, verify = False)
r = self._session.post(self._url + 'ws', data = '{"service":"Time", "method":"getTime", "parameters":{}}', headers = self._sahServiceHeaders, timeout = DEFAULT_TIMEOUT, verify = False)
t = self._session.post(self._url + c, data = json.dumps(aData), headers = self._sahServiceHeaders, timeout = iTimeout, verify = False)
t = self._session.post(self._url + c, data = json.dumps(aData), headers = self._sahEventHeaders, timeout = iTimeout, verify = False)

D'un point de vue sécurité c'est pas terrible, mais dans ce contexte à vous de juger

p-dor commented 1 year ago

Très bien merci pour votre test ! Je vais regarder ça et essayer de me renseigner pour essayer de conserver la sécurité... Sinon tant pis et je mettrai un gros avertissement dans la documentation.

p-dor commented 1 year ago

Bonjour j'ai commencé à tester un peu. De mon côté avec les changements ci dessus, une Livebox 5 et l'accès à distance activé, je n'arrive pas à me connecter même sans passer par un DynDNS. Que je mette mon IP internet après http:// ou https:// c'est le même combat : le serveur ne répond pas (d'ailleurs il aurait été étonnant que cela marche en http://). Vous avez réussi avec une Livebox 5 ? Si oui j'aimerai comprendre la configuration exacte... Merci !

Lulucmy commented 1 year ago

Bonjour,

Les seules choses que j'ai modifié dans le code sont dans mon précédent commentaire, et dans le champ URL de la Livebox sur l'app, j'ai entré : https://nomdedomain.com:10000/

A noter que cela ne fonctionne pas sans le HTTPS et sans le port choisi dans la configuration.

Merci & bon week-end :)

p-dor commented 1 year ago

Bon impossible de faire marcher ça avec ma config pour l'instant, que je tente depuis mon VPN ou depuis une connexion 4G, même en tapant l'URL dans plusieurs browsers, depuis un PC, un Mac ou depuis un appareil iOS, le serveur ne répond jamais... Mais j'ai tout de même incorporé les changements nécessaires pour au moins essayer. C'est maintenant dans le repo.

p-dor commented 1 year ago

La release v1.1 contenant cette évolution est maintenant publiée.