toxygen/toxygen/tox_dns.py

59 lines
2.0 KiB
Python
Raw Normal View History

import json
2016-06-21 13:58:11 +02:00
import urllib.request
from util import log
2016-07-04 11:45:51 +02:00
import settings
2017-04-11 20:10:03 +02:00
from PyQt5 import QtNetwork, QtCore
def tox_dns(email):
"""
TOX DNS 4
:param email: data like 'groupbot@toxme.io'
:return: tox id on success else None
"""
site = email.split('@')[1]
data = {"action": 3, "name": "{}".format(email)}
2016-07-04 11:45:51 +02:00
urls = ('https://{}/api'.format(site), 'http://{}/api'.format(site))
s = settings.Settings.get_instance()
2016-07-10 16:51:33 +02:00
if not s['proxy_type']: # no proxy
2016-07-04 11:45:51 +02:00
for url in urls:
try:
2016-07-10 16:51:33 +02:00
return send_request(url, data)
except Exception as ex:
log('TOX DNS ERROR: ' + str(ex))
else: # proxy
netman = QtNetwork.QNetworkAccessManager()
proxy = QtNetwork.QNetworkProxy()
proxy.setType(QtNetwork.QNetworkProxy.Socks5Proxy if s['proxy_type'] == 2 else QtNetwork.QNetworkProxy.HttpProxy)
proxy.setHostName(s['proxy_host'])
proxy.setPort(s['proxy_port'])
netman.setProxy(proxy)
for url in urls:
try:
request = QtNetwork.QNetworkRequest(url)
request.setHeader(QtNetwork.QNetworkRequest.ContentTypeHeader, "application/json")
reply = netman.post(request, bytes(json.dumps(data), 'utf-8'))
while not reply.isFinished():
QtCore.QThread.msleep(1)
QtCore.QCoreApplication.processEvents()
data = bytes(reply.readAll().data())
result = json.loads(str(data, 'utf-8'))
if not result['c']:
return result['tox_id']
2016-07-04 11:45:51 +02:00
except Exception as ex:
log('TOX DNS ERROR: ' + str(ex))
return None # error
2016-07-10 16:51:33 +02:00
def send_request(url, data):
2016-06-21 13:58:11 +02:00
req = urllib.request.Request(url)
req.add_header('Content-Type', 'application/json')
response = urllib.request.urlopen(req, bytes(json.dumps(data), 'utf-8'))
res = json.loads(str(response.read(), 'utf-8'))
if not res['c']:
return res['tox_id']
else:
raise LookupError()