merge in next_gen branch
This commit is contained in:
0
toxygen/network/__init__.py
Normal file
0
toxygen/network/__init__.py
Normal file
65
toxygen/network/tox_dns.py
Normal file
65
toxygen/network/tox_dns.py
Normal file
@ -0,0 +1,65 @@
|
||||
import json
|
||||
import urllib.request
|
||||
import utils.util as util
|
||||
from PyQt5 import QtNetwork, QtCore
|
||||
|
||||
|
||||
class ToxDns:
|
||||
|
||||
def __init__(self, settings):
|
||||
self._settings = settings
|
||||
|
||||
@staticmethod
|
||||
def _send_request(url, data):
|
||||
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()
|
||||
|
||||
def lookup(self, 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)}
|
||||
urls = ('https://{}/api'.format(site), 'http://{}/api'.format(site))
|
||||
if not self._settings['proxy_type']: # no proxy
|
||||
for url in urls:
|
||||
try:
|
||||
return self._send_request(url, data)
|
||||
except Exception as ex:
|
||||
util.log('TOX DNS ERROR: ' + str(ex))
|
||||
else: # proxy
|
||||
netman = QtNetwork.QNetworkAccessManager()
|
||||
proxy = QtNetwork.QNetworkProxy()
|
||||
if self._settings['proxy_type'] == 2:
|
||||
proxy.setType(QtNetwork.QNetworkProxy.Socks5Proxy)
|
||||
else:
|
||||
proxy.setType(QtNetwork.QNetworkProxy.HttpProxy)
|
||||
proxy.setHostName(self._settings['proxy_host'])
|
||||
proxy.setPort(self._settings['proxy_port'])
|
||||
netman.setProxy(proxy)
|
||||
for url in urls:
|
||||
try:
|
||||
request = QtNetwork.QNetworkRequest()
|
||||
request.setUrl(QtCore.QUrl(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']
|
||||
except Exception as ex:
|
||||
util.log('TOX DNS ERROR: ' + str(ex))
|
||||
|
||||
return None # error
|
Reference in New Issue
Block a user