pep8
This commit is contained in:
parent
f30a1038ad
commit
f83d1c97b9
2 changed files with 158 additions and 152 deletions
309
tox-irc-sync.py
309
tox-irc-sync.py
|
@ -1,48 +1,51 @@
|
|||
# -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import os
|
||||
import socket
|
||||
import select
|
||||
import re
|
||||
import pickle
|
||||
import logging
|
||||
import ctypes
|
||||
import logging
|
||||
import os
|
||||
import pickle
|
||||
import re
|
||||
import select
|
||||
import socket
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
from time import sleep
|
||||
from threading import Thread
|
||||
from random import shuffle
|
||||
from errno import errorcode
|
||||
from random import shuffle
|
||||
from time import sleep
|
||||
|
||||
from OpenSSL import SSL
|
||||
|
||||
import warnings
|
||||
warnings.filterwarnings('ignore')
|
||||
|
||||
import wrapper
|
||||
import wrapper.toxcore_enums_and_consts as enums
|
||||
import wrapper_tests
|
||||
from wrapper.tox import Tox
|
||||
from wrapper.toxav import ToxAV
|
||||
import wrapper.toxcore_enums_and_consts as enums
|
||||
from wrapper.toxcore_enums_and_consts import \
|
||||
TOX_CONNECTION, TOX_USER_STATUS, TOX_MESSAGE_TYPE, \
|
||||
TOX_SECRET_KEY_SIZE, TOX_FILE_CONTROL, TOX_ADDRESS_SIZE, \
|
||||
TOX_GROUP_PRIVACY_STATE, TOX_GROUP_ROLE
|
||||
from wrapper.toxcore_enums_and_consts import (TOX_ADDRESS_SIZE, TOX_CONNECTION,
|
||||
TOX_FILE_CONTROL,
|
||||
TOX_GROUP_PRIVACY_STATE,
|
||||
TOX_GROUP_ROLE, TOX_MESSAGE_TYPE,
|
||||
TOX_SECRET_KEY_SIZE,
|
||||
TOX_USER_STATUS)
|
||||
from wrapper_tests import socks
|
||||
|
||||
try:
|
||||
import support_testing as ts
|
||||
except ImportError:
|
||||
import wrapper_tests.support_testing as ts
|
||||
import wrapper.toxencryptsave as tox_encrypt_save
|
||||
|
||||
import wrapper.toxencryptsave as tox_encrypt_save
|
||||
|
||||
global LOG
|
||||
LOG = logging.getLogger('app.'+'ts')
|
||||
import warnings
|
||||
|
||||
warnings.filterwarnings('ignore')
|
||||
|
||||
class SyniToxError(BaseException): pass
|
||||
|
||||
NAME = 'SyniTox'
|
||||
sMSG = 'MSG'
|
||||
sMSG = 'PRIVMSG'
|
||||
SSL_TOR_RANGE = '172.'
|
||||
# possible CA locations picks the first one
|
||||
lCAs = [# debian and gentoo
|
||||
|
@ -138,10 +141,10 @@ class SyniTox(Tox):
|
|||
|
||||
opts = oTOX_OPTIONS
|
||||
self._opts = opts
|
||||
self._oArgs = oArgs
|
||||
self._oargs = oArgs
|
||||
|
||||
# self._oArgs.profile
|
||||
self.load_profile(self._opts, self._oArgs, self._oArgs.password)
|
||||
# self._oargs.profile
|
||||
self.load_profile(self._opts, self._oargs, self._oargs.password)
|
||||
Tox.__init__(self, tox_options=self._opts)
|
||||
|
||||
self._address = self.self_get_address()
|
||||
|
@ -170,7 +173,6 @@ class SyniTox(Tox):
|
|||
def load_profile(self, tox_options, oArgs, password=''):
|
||||
if oArgs.profile and os.path.exists(oArgs.profile):
|
||||
data = open(oArgs.profile, 'rb').read()
|
||||
|
||||
else:
|
||||
data = None
|
||||
if data and self.has_password():
|
||||
|
@ -191,20 +193,20 @@ class SyniTox(Tox):
|
|||
data = self.pass_encrypt(data)
|
||||
try:
|
||||
suf = f"{os.getpid()}"
|
||||
with open(self._oArgs.profile+suf, 'wb') as fl:
|
||||
with open(self._oargs.profile+suf, 'wb') as fl:
|
||||
fl.write(data)
|
||||
stat = os.stat(self._oArgs.profile+suf)
|
||||
stat = os.stat(self._oargs.profile+suf)
|
||||
if hasattr(stat, 'st_blocks'):
|
||||
assert stat.st_blocks > 0, f"Zero length file {self._oArgs.profile+suf}"
|
||||
os.rename(self._oArgs.profile+suf, self._oArgs.profile)
|
||||
LOG.info('Profile saved successfully to' +self._oArgs.profile)
|
||||
assert stat.st_blocks > 0, f"Zero length file {self._oargs.profile+suf}"
|
||||
os.rename(self._oargs.profile+suf, self._oargs.profile)
|
||||
LOG.info('Profile saved successfully to' +self._oargs.profile)
|
||||
except Exception as e:
|
||||
LOG.warn(f"Profile save failed to {self._oArgs.profile}\n{e}")
|
||||
LOG.warn(f"Profile save failed to {self._oargs.profile}\n{e}")
|
||||
|
||||
def start(self):
|
||||
self._tox = self
|
||||
self._toxes = tox_encrypt_save.ToxEncryptSave()
|
||||
self.self_set_name(self._oArgs.bot_name)
|
||||
self.self_set_name(self._oargs.bot_name)
|
||||
self.self_set_status_message("Send me a message with the word 'invite'")
|
||||
LOG.info('Our ToxID: %s' % self.self_get_toxid())
|
||||
|
||||
|
@ -220,17 +222,17 @@ class SyniTox(Tox):
|
|||
try:
|
||||
OP_NO_TLSv1_3 = SSL._lib.SSL_OP_NO_TLSv1_3
|
||||
except AttributeError:
|
||||
if self._oArgs.irc_ssl == 'tlsv1.3':
|
||||
if self._oargs.irc_ssl == 'tlsv1.3':
|
||||
LOG.warning("SSL._lib.SSL_OP_NO_TLSv1_3 is not supported")
|
||||
LOG.warning("Downgrading SSL to tlsv1.2 ")
|
||||
self._oArgs.irc_ssl = 'tlsv1.2'
|
||||
self._oargs.irc_ssl = 'tlsv1.2'
|
||||
else:
|
||||
LOG.debug("SSL._lib.SSL_OP_NO_TLSv1_3 is not supported")
|
||||
else:
|
||||
LOG.debug("SSL._lib.SSL_OP_NO_TLSv1_3 is supported")
|
||||
|
||||
if self._oArgs.irc_connect.endswith('.onion') or \
|
||||
self._oArgs.irc_connect.startswith(SSL_TOR_RANGE):
|
||||
if self._oargs.irc_connect.endswith('.onion') or \
|
||||
self._oargs.irc_connect.startswith(SSL_TOR_RANGE):
|
||||
override = True
|
||||
else:
|
||||
override = False
|
||||
|
@ -239,17 +241,17 @@ class SyniTox(Tox):
|
|||
# SSL.OP_NO_TLSv1_1 is allowed
|
||||
context.set_options(SSL.OP_NO_SSLv2|SSL.OP_NO_SSLv3|SSL.OP_NO_TLSv1)
|
||||
|
||||
if self._oArgs.irc_crt and self._oArgs.irc_key:
|
||||
assert os.path.exists(key), key
|
||||
if self._oargs.irc_crt and self._oargs.irc_key:
|
||||
val = SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT
|
||||
LOG.info('Using keyfile: %s' % key)
|
||||
if True: # required!
|
||||
key = self._oArgs.irc_crt
|
||||
key = self._oargs.irc_crt
|
||||
assert os.path.exists(key), key
|
||||
LOG.info('Using keyfile: %s' % key)
|
||||
context.use_certificate_file(key, filetype=SSL.FILETYPE_PEM)
|
||||
if True: # required!
|
||||
key = self._oArgs.irc_key
|
||||
key = self._oargs.irc_key
|
||||
assert os.path.exists(key), key
|
||||
LOG.info('Using keyfile: %s' % key)
|
||||
context.use_privatekey_file(key, filetype=SSL.FILETYPE_PEM)
|
||||
#? load_client_ca
|
||||
def SSL_hands_cb(oConn,iLine,iRet):
|
||||
|
@ -264,17 +266,17 @@ class SyniTox(Tox):
|
|||
val = SSL.VERIFY_PEER
|
||||
context.set_verify(val, ssl_verify_cb(HOST, override))
|
||||
|
||||
if self._oArgs.irc_cafile:
|
||||
# context.load_verify_locations(capath=self._oArgs.irc_ca)
|
||||
context.load_verify_locations(self._oArgs.irc_cafile, capath=self._oArgs.irc_cadir)
|
||||
elif self._oArgs.irc_cadir:
|
||||
context.load_verify_locations(None, capath=self._oArgs.irc_cadir)
|
||||
if self._oArgs.irc_ssl == 'tlsv1.1':
|
||||
if self._oargs.irc_cafile:
|
||||
# context.load_verify_locations(capath=self._oargs.irc_ca)
|
||||
context.load_verify_locations(self._oargs.irc_cafile, capath=self._oargs.irc_cadir)
|
||||
elif self._oargs.irc_cadir:
|
||||
context.load_verify_locations(None, capath=self._oargs.irc_cadir)
|
||||
if self._oargs.irc_ssl == 'tlsv1.1':
|
||||
context.set_min_proto_version(SSL.TLS1_1_VERSION)
|
||||
elif self._oArgs.irc_ssl == 'tlsv1.2':
|
||||
elif self._oargs.irc_ssl == 'tlsv1.2':
|
||||
context.set_cipher_list(bytes(':'.join(['DEFAULT@SECLEVEL=1']+lOPENSSL_12_CIPHERS), 'UTF-8'))
|
||||
context.set_min_proto_version(SSL.TLS1_2_VERSION)
|
||||
elif self._oArgs.irc_ssl == 'tlsv1.3':
|
||||
elif self._oargs.irc_ssl == 'tlsv1.3':
|
||||
context.set_cipher_list(bytes(':'.join(['DEFAULT@SECLEVEL=1']+lOPENSSL_13_CIPHERS), 'UTF-8'))
|
||||
context.set_min_proto_version(SSL.TLS1_3_VERSION)
|
||||
self._ssl_context = context
|
||||
|
@ -282,7 +284,7 @@ class SyniTox(Tox):
|
|||
return self._ssl_context
|
||||
|
||||
def bRouted(self):
|
||||
if self._oArgs.network in ['local']:
|
||||
if self._oargs.network in ['local']:
|
||||
return True
|
||||
b = ts.bAreWeConnected()
|
||||
if b is None:
|
||||
|
@ -295,9 +297,9 @@ class SyniTox(Tox):
|
|||
return b
|
||||
|
||||
def test_net(self, lElts=None, oThread=None, iMax=4):
|
||||
LOG.debug("test_net network=" +self._oArgs.network )
|
||||
LOG.debug("test_net network=" +self._oargs.network )
|
||||
# bootstrap
|
||||
lNodes = ts.generate_nodes(oArgs=self._oArgs,
|
||||
lNodes = ts.generate_nodes(oArgs=self._oargs,
|
||||
ipv='ipv4',
|
||||
udp_not_tcp=True)
|
||||
self._settings['current_nodes_udp'] = ts.lDNSClean(lNodes)
|
||||
|
@ -306,7 +308,7 @@ class SyniTox(Tox):
|
|||
else:
|
||||
LOG.info(f'Called generate_nodes: udp {len(lNodes)}')
|
||||
|
||||
lNodes = ts.generate_nodes(oArgs=self._oArgs,
|
||||
lNodes = ts.generate_nodes(oArgs=self._oargs,
|
||||
ipv='ipv4',
|
||||
udp_not_tcp=False)
|
||||
self._settings['current_nodes_tcp'] = ts.lDNSClean(lNodes)
|
||||
|
@ -341,8 +343,8 @@ class SyniTox(Tox):
|
|||
# The code in tests_wrapper need extending and then
|
||||
# wiring up to here.
|
||||
#
|
||||
if self._oArgs.group_invite:
|
||||
pk = self._oArgs.group_invite
|
||||
if self._oargs.group_invite:
|
||||
pk = self._oargs.group_invite
|
||||
if pk not in self.self_get_friend_list():
|
||||
friend_number = self.add_friend(pk)
|
||||
else:
|
||||
|
@ -351,8 +353,8 @@ class SyniTox(Tox):
|
|||
LOG.info(f"A PK to invite to the group {b}")
|
||||
return True
|
||||
|
||||
if self._oArgs.group_moderator:
|
||||
pk = self._oArgs.group_moderator
|
||||
if self._oargs.group_moderator:
|
||||
pk = self._oargs.group_moderator
|
||||
if pk not in self.self_get_friend_list():
|
||||
friend_number = self.add_friend(pk)
|
||||
else:
|
||||
|
@ -364,8 +366,8 @@ class SyniTox(Tox):
|
|||
LOG.info("A PK to invite to the group as moderator {b}")
|
||||
return True
|
||||
|
||||
if self._oArgs.group_ignore:
|
||||
pk = self._oArgs.group_ignore
|
||||
if self._oargs.group_ignore:
|
||||
pk = self._oargs.group_ignore
|
||||
if pk not in self.self_get_friend_list():
|
||||
friend_number = self.add_friend(pk)
|
||||
else:
|
||||
|
@ -379,21 +381,18 @@ class SyniTox(Tox):
|
|||
return None
|
||||
|
||||
def create_group(self):
|
||||
privacy_state = TOX_GROUP_PRIVACY_STATE[self._oArgs.group_state.upper()]
|
||||
nick = self._oArgs.group_nick
|
||||
group_name = self._oArgs.group_name
|
||||
if not group_name:
|
||||
group_name = self._oArgs.bot_name +self._oArgs.irc_chan
|
||||
self._oArgs.group_name = group_name
|
||||
privacy_state = TOX_GROUP_PRIVACY_STATE[self._oargs.group_state.upper()]
|
||||
nick = self._oargs.group_nick
|
||||
status = TOX_USER_STATUS['NONE']
|
||||
group_name = self._oargs.group_name
|
||||
num = self.group_new(privacy_state, group_name, nick, status)
|
||||
assert num >= 0, num
|
||||
self.group_set_topic(num, f"{group_name} IRC on {self._oArgs.irc_host}" )
|
||||
self.group_set_topic(num, f"{group_name} IRC on {self._oargs.irc_host}" )
|
||||
# self.tox_group_id = self.group_invite_accept(b'', friendid, nick)
|
||||
|
||||
chat_id = self.group_get_chat_id(num)
|
||||
if self._oArgs.profile and os.path.exists(os.path.dirname(self._oArgs.profile)):
|
||||
f = os.path.splitext(self._oArgs.profile)[0] +'.chatid'
|
||||
if self._oargs.profile and os.path.exists(os.path.dirname(self._oargs.profile)):
|
||||
f = os.path.splitext(self._oargs.profile)[0] +'.chatid'
|
||||
open(f, 'rt').write(chat_id)
|
||||
LOG.info(f"Chat Id: {chat_id} written to {f}")
|
||||
else:
|
||||
|
@ -401,16 +400,16 @@ class SyniTox(Tox):
|
|||
# dunno
|
||||
if self.self_get_friend_list():
|
||||
friendid = self.self_get_friend_list()[0]
|
||||
i = on_group_invite(friendid, b'', 0)
|
||||
i = self.on_group_invite(friendid, b'', 0)
|
||||
assert i
|
||||
self.tox_group_id = i
|
||||
return num
|
||||
|
||||
def join_group(self):
|
||||
password = self._oArgs.group_pass
|
||||
nick = self._oArgs.group_nick
|
||||
password = self._oargs.group_pass
|
||||
nick = self._oargs.group_nick
|
||||
# is the chat_id the pk?
|
||||
chat_id = self._oArgs.group_chatid
|
||||
chat_id = self._oargs.group_chatid
|
||||
if not chat_id: return -1
|
||||
num = self.group_join(chat_id, password, nick, status='')
|
||||
self.sGROUP_BOT_NUM = num
|
||||
|
@ -418,8 +417,7 @@ class SyniTox(Tox):
|
|||
return num
|
||||
|
||||
def init_groups(self):
|
||||
LOG.debug(f"init_groups proxy={self._oArgs.proxy_type}")
|
||||
group_name = self._oArgs.bot_name +' Test ' +self._oArgs.irc_chan
|
||||
LOG.debug(f"init_groups proxy={self._oargs.proxy_type}")
|
||||
if not self.bRouted(): return
|
||||
try:
|
||||
if self.sGROUP_BOT_NUM < 0:
|
||||
|
@ -458,7 +456,7 @@ class SyniTox(Tox):
|
|||
self.callback_group_invite(gi_wrapped, 0)
|
||||
|
||||
def scs_wrapped(iTox, friendid, status, *args):
|
||||
LOG.debug(f'on_connection_status {friendId} {status}.')
|
||||
LOG.debug(f'on_connection_status {friendid} {status}.')
|
||||
self.on_connection_status(friendid, status)
|
||||
self.callback_self_connection_status(scs_wrapped)
|
||||
|
||||
|
@ -505,62 +503,59 @@ class SyniTox(Tox):
|
|||
LOG.debug(f"{cert.get_subject().CN} {cert.get_issuer()}")
|
||||
|
||||
cipher_name = irc.get_cipher_name()
|
||||
if self._oArgs.irc_ssl == 'tlsv1.2':
|
||||
if self._oargs.irc_ssl == 'tlsv1.2':
|
||||
assert cipher_name in lOPENSSL_12_CIPHERS or \
|
||||
cipher_name in lOPENSSL_13_CIPHERS, cipher_name
|
||||
elif self._oArgs.irc_ssl == 'tlsv1.3':
|
||||
elif self._oargs.irc_ssl == 'tlsv1.3':
|
||||
assert cipher_name in lOPENSSL_13_CIPHERS, cipher_name
|
||||
|
||||
got = irc.get_protocol_version_name().lower()
|
||||
if got > self._oArgs.irc_ssl:
|
||||
LOG.debug(f"Got: {irc.get_protocol_version_name().lower()} asked for {self._oArgs.irc_ssl}")
|
||||
elif got < self._oArgs.irc_ssl:
|
||||
LOG.warn(f"Got: {irc.get_protocol_version_name().lower()} asked for {self._oArgs.irc_ssl}")
|
||||
if got > self._oargs.irc_ssl:
|
||||
LOG.debug(f"Got: {irc.get_protocol_version_name().lower()} asked for {self._oargs.irc_ssl}")
|
||||
elif got < self._oargs.irc_ssl:
|
||||
LOG.warn(f"Got: {irc.get_protocol_version_name().lower()} asked for {self._oargs.irc_ssl}")
|
||||
LOG.info(f"diagnose_ciphers {str(irc.get_state_string(), 'UTF-8')}")
|
||||
|
||||
def irc_init(self):
|
||||
global iSocks5Error
|
||||
|
||||
if not self.bRouted(): return
|
||||
nick = self._oArgs.irc_nick
|
||||
realname = self._oArgs.irc_name
|
||||
ident = self._oArgs.irc_ident
|
||||
LOG.info(f"irc_init proxy={self._oArgs.proxy_type} SSL={self._oArgs.irc_ssl}")
|
||||
nick = self._oargs.irc_nick
|
||||
realname = self._oargs.irc_name
|
||||
ident = self._oargs.irc_ident
|
||||
LOG.info(f"irc_init proxy={self._oargs.proxy_type} SSL={self._oargs.irc_ssl}")
|
||||
try:
|
||||
if self._oArgs.proxy_type == 2:
|
||||
if self._oargs.proxy_type == 2:
|
||||
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,
|
||||
self._oArgs.proxy_host,
|
||||
self._oArgs.proxy_port)
|
||||
self._oargs.proxy_host,
|
||||
self._oargs.proxy_port)
|
||||
irc = socks.socksocket()
|
||||
iTIMEOUT = 15
|
||||
elif self._oArgs.proxy_type == 1:
|
||||
elif self._oargs.proxy_type == 1:
|
||||
socks.setdefaultproxy(socks.PROXY_TYPE_HTTP,
|
||||
self._oArgs.proxy_host,
|
||||
self._oArgs.proxy_port)
|
||||
self._oargs.proxy_host,
|
||||
self._oargs.proxy_port)
|
||||
irc = socks.socksocket()
|
||||
iTIMEOUT = 15
|
||||
else:
|
||||
irc = socket.socket()
|
||||
iTIMEOUT = 10
|
||||
try:
|
||||
ip = ts.sDNSLookup(self._oArgs.irc_connect)
|
||||
ip = ts.sDNSLookup(self._oargs.irc_connect)
|
||||
except Exception as e:
|
||||
LOG.warn(f"{self._oArgs.irc_host} errored in resolve {e}")
|
||||
ip = self._oArgs.irc_connect
|
||||
LOG.warn(f"{self._oargs.irc_host} errored in resolve {e}")
|
||||
ip = self._oargs.irc_connect
|
||||
else:
|
||||
if not ip:
|
||||
LOG.warn(f"{self._oArgs.irc_host} did not resolve.")
|
||||
ip = self._oArgs.irc_connect
|
||||
LOG.warn(f"{self._oargs.irc_host} did not resolve.")
|
||||
ip = self._oargs.irc_connect
|
||||
# https://github.com/pyca/pyopenssl/issues/168
|
||||
if self._oArgs.irc_ssl:
|
||||
if self._oargs.irc_ssl:
|
||||
if not self._ssl_context:
|
||||
self.start_ssl(self._oArgs.irc_connect)
|
||||
self.start_ssl(self._oargs.irc_connect)
|
||||
irc = SSL.Connection(self._ssl_context, irc)
|
||||
irc.connect((ip, self._oArgs.irc_port))
|
||||
if ip.endswith('.onion'):
|
||||
irc.set_tlsext_host_name(None)
|
||||
else:
|
||||
irc.set_tlsext_host_name(bytes(self._oArgs.irc_host, 'UTF-8'))
|
||||
irc.connect((ip, self._oargs.irc_port))
|
||||
irc.set_tlsext_host_name(bytes(self._oargs.irc_host, 'UTF-8'))
|
||||
while True:
|
||||
try:
|
||||
irc.do_handshake()
|
||||
|
@ -569,15 +564,15 @@ class SyniTox(Tox):
|
|||
if not rd:
|
||||
raise socket.timeout('timeout')
|
||||
continue
|
||||
except SSL.Error as e:
|
||||
except SSL.Error as e: # noqa
|
||||
raise
|
||||
break
|
||||
self.diagnose_ciphers(irc)
|
||||
else:
|
||||
irc.connect((ip, self._oArgs.irc_port))
|
||||
LOG.info(f"IRC SSL={self._oArgs.irc_ssl} connected ")
|
||||
irc.connect((ip, self._oargs.irc_port))
|
||||
LOG.info(f"IRC SSL={self._oargs.irc_ssl} connected ")
|
||||
|
||||
except (wrapper_tests.socks.GeneralProxyError, wrapper_tests.socks.Socks5Error) as e:
|
||||
except (wrapper_tests.socks.GeneralProxyError, wrapper_tests.socks.Socks5Error) as e: # noqa
|
||||
iSocks5Error += 1
|
||||
if iSocks5Error >= iSocks5ErrorMax:
|
||||
raise SyniToxError(f"{e.args}")
|
||||
|
@ -622,13 +617,13 @@ class SyniTox(Tox):
|
|||
self.irc.send(bytes('CAP ' + 'LS' + '\r\n', 'UTF-8' ))
|
||||
self.irc.send(bytes('CAP ' + 'REQ :multi-prefix' + '\r\n', 'UTF-8'))
|
||||
self.irc.send(bytes('CAP ' + 'END' + '\r\n', 'UTF-8' ))
|
||||
# withh or without self._oArgs.irc_pem:
|
||||
# withh or without self._oargs.irc_pem:
|
||||
LOG.info("Sent CAP sending NICK and USER")
|
||||
self.irc.send(bytes('NICK ' + nick + '\r\n', 'UTF-8' ))
|
||||
self.irc.send(bytes('USER %s %s bla :%s\r\n' % (
|
||||
self._oArgs.irc_ident,
|
||||
self._oArgs.irc_host,
|
||||
self._oArgs.irc_name), 'UTF-8'))
|
||||
self._oargs.irc_ident,
|
||||
self._oargs.irc_host,
|
||||
self._oargs.irc_name), 'UTF-8'))
|
||||
|
||||
# OSError: [Errno 9] Bad file descriptor
|
||||
|
||||
|
@ -638,7 +633,7 @@ class SyniTox(Tox):
|
|||
self.test_net()
|
||||
lNodes = self._settings['current_nodes_udp']
|
||||
shuffle(lNodes)
|
||||
if self._oArgs.proxy_type == 0:
|
||||
if self._oargs.proxy_type == 0:
|
||||
ts.bootstrap_udp(lNodes[:6], [self])
|
||||
else:
|
||||
if self._bRouted is None:
|
||||
|
@ -654,7 +649,7 @@ class SyniTox(Tox):
|
|||
def get_all_groups(self):
|
||||
try:
|
||||
group_numbers = range(self._tox.group_get_number_groups())
|
||||
except Exception as e:
|
||||
except Exception as e: # noqa
|
||||
return None
|
||||
groups = map(lambda n: self.get_group_by_number(n), group_numbers)
|
||||
|
||||
|
@ -730,10 +725,10 @@ class SyniTox(Tox):
|
|||
raise SyniToxError(line)
|
||||
|
||||
def irc_readlines(self):
|
||||
nick = self._oArgs.irc_nick
|
||||
pwd = self._oArgs.irc_pass
|
||||
fp = self._oArgs.irc_fp
|
||||
email = self._oArgs.irc_email
|
||||
nick = self._oargs.irc_nick
|
||||
pwd = self._oargs.irc_pass
|
||||
fp = self._oargs.irc_fp
|
||||
email = self._oargs.irc_email
|
||||
|
||||
self.readbuffer += self.irc.recv(4096)
|
||||
lines = self.readbuffer.split(b'\n')
|
||||
|
@ -754,7 +749,7 @@ class SyniTox(Tox):
|
|||
print(line[i+1:])
|
||||
|
||||
rx = re.match(r':(.*?)!.*? PRIVMSG %s :(.*?)\r' %
|
||||
self._oArgs.irc_chan, line, re.S)
|
||||
self._oargs.irc_chan, line, re.S)
|
||||
if l[0] == 'QUIT':
|
||||
LOG.info('QUIT')
|
||||
return
|
||||
|
@ -770,7 +765,7 @@ class SyniTox(Tox):
|
|||
pass
|
||||
elif l[1] in ['433']:
|
||||
# maybe should be an outright fail
|
||||
if self._oArgs.irc_ssl:
|
||||
if self._oargs.irc_ssl:
|
||||
LOG.warn("Maybe the certificate was not received")
|
||||
#? raise SyniToxError(line)
|
||||
# sometimes but not always:
|
||||
|
@ -783,13 +778,14 @@ class SyniTox(Tox):
|
|||
# app.ts ERROR SSL error: (32, 'EPIPE')
|
||||
pass
|
||||
elif l[1] in ['451', '462', '477']:
|
||||
if self._oArgs.irc_crt and self._oArgs.irc_key:
|
||||
if self._oargs.irc_crt and self._oargs.irc_key:
|
||||
LOG.warn("Maybe the certificate was not received")
|
||||
raise SyniToxError(line)
|
||||
elif l[1] in ['376']:
|
||||
# :End of /MOTD command
|
||||
if self._oArgs.irc_crt and self._oArgs.irc_key:
|
||||
pass
|
||||
if self._oargs.irc_crt and self._oargs.irc_key:
|
||||
LOG.info(bytes(sMSG+' NickServ IDENTIFY %s %s\r\n'
|
||||
% (nick, pwd,), 'UTF-8'))
|
||||
elif email == '' and pwd:
|
||||
LOG.info(bytes(sMSG+' NickServ IDENTIFY %s %s\r\n'
|
||||
% (nick, pwd,), 'UTF-8'))
|
||||
|
@ -805,8 +801,8 @@ class SyniTox(Tox):
|
|||
raise RuntimeError("you must provide a password to register")
|
||||
try:
|
||||
self.irc.send(bytes(sMSG+' NickServ set cloak on\r\n', 'UTF-8'))
|
||||
if self._oArgs.irc_chan:
|
||||
self.irc.send(bytes('JOIN %s\r\n' % self._oArgs.irc_chan, 'UTF-8'))
|
||||
if self._oargs.irc_chan:
|
||||
self.irc.send(bytes('JOIN %s\r\n' % self._oargs.irc_chan, 'UTF-8'))
|
||||
except BrokenPipeError:
|
||||
raise SyniToxError('BrokenPipeError')
|
||||
|
||||
|
@ -869,13 +865,13 @@ class SyniTox(Tox):
|
|||
iCount = 0
|
||||
iDelay = 10
|
||||
|
||||
nick = self._oArgs.irc_nick
|
||||
realname = self._oArgs.irc_name
|
||||
ident = self._oArgs.irc_ident
|
||||
pwd = self._oArgs.irc_pass
|
||||
email = self._oArgs.irc_email
|
||||
nick = self._oargs.irc_nick
|
||||
realname = self._oargs.irc_name
|
||||
ident = self._oargs.irc_ident
|
||||
pwd = self._oargs.irc_pass
|
||||
email = self._oargs.irc_email
|
||||
LOG.info(f"Looping for Tox and IRC connections")
|
||||
if iCount < self._oArgs.max_sleep:
|
||||
if iCount < self._oargs.max_sleep:
|
||||
while True:
|
||||
iCount += 1
|
||||
# LOG.debug(f"Looping {iCount}")
|
||||
|
@ -909,7 +905,7 @@ class SyniTox(Tox):
|
|||
#? self.bid = self.friend_by_public_key(self.sGROUP_BOT_PK)
|
||||
r = self.group_reconnect(self.sGROUP_BOT_NUM)
|
||||
LOG.info(f'Connected to group {r}')
|
||||
except ctypes.ArgumentError as e:
|
||||
except ctypes.ArgumentError as e: # noqa
|
||||
self.bid = None
|
||||
|
||||
if self.bid == None:
|
||||
|
@ -933,7 +929,7 @@ class SyniTox(Tox):
|
|||
continue
|
||||
|
||||
|
||||
LOG.info(f'Waiting on IRC to {self._oArgs.irc_host} on {self._oArgs.irc_port}')
|
||||
LOG.info(f'Waiting on IRC to {self._oargs.irc_host} on {self._oargs.irc_port}')
|
||||
|
||||
readable = self.spin(20)
|
||||
if not readable or not readable[0]:
|
||||
|
@ -993,7 +989,7 @@ class SyniTox(Tox):
|
|||
def on_group_invite(self, friendid, invite_data, user_data):
|
||||
if not self.joined:
|
||||
self.joined = True
|
||||
nick = self._oArgs.group_nick
|
||||
nick = self._oargs.group_nick
|
||||
self.tox_group_id = self.group_invite_accept(invite_data, friendid, nick)
|
||||
LOG.info('Joined groupchat.')
|
||||
|
||||
|
@ -1007,9 +1003,8 @@ class SyniTox(Tox):
|
|||
print('TOX> %s: %s' % (name, message))
|
||||
if message.startswith('>'):
|
||||
message = '\x0309%s\x03' % message
|
||||
|
||||
self.irc_send(bsMSG+' %s :[%s]: %s\r\n' %
|
||||
(self._oArgs.irc_chan, name, message))
|
||||
self.irc_send(sMSG+' %s :[%s]: %s\r\n' %
|
||||
(self._oargs.irc_chan, name, message))
|
||||
if message.startswith('^'):
|
||||
self.handle_command(message)
|
||||
|
||||
|
@ -1020,8 +1015,8 @@ class SyniTox(Tox):
|
|||
print('TOX> %s: %s' % (name, action))
|
||||
if action.startswith('>'):
|
||||
action = '\x0309%s\x03' % action
|
||||
self.irc_send(bytes(sMSG+' %s :\x01ACTION [%s]: %s\x01\r\n' %
|
||||
(self._oArgs.irc_chan, name, action), 'UTF-8'))
|
||||
self.irc_send(bytes(sMSG' %s :\x01ACTION [%s]: %s\x01\r\n' %
|
||||
(self._oargs.irc_chan, name, action), 'UTF-8'))
|
||||
|
||||
def on_friend_request(self, pk, message):
|
||||
LOG.info('Friend request from %s: %s' % (pk, message))
|
||||
|
@ -1043,7 +1038,7 @@ class SyniTox(Tox):
|
|||
def send_both(self, content):
|
||||
type_ = TOX_MESSAGE_TYPE['NORMAL']
|
||||
self.ensure_exe(self.group_send_message, self.sGROUP_BOT_NUM, type_, content)
|
||||
self.irc_send(bytes(sMSG+' %s :%s\r\n' % (self._oArgs.irc_chan, content), 'UTF-8'))
|
||||
self.irc_send(bytes(sMSG+' %s :%s\r\n' % (self._oargs.irc_chan, content), 'UTF-8'))
|
||||
|
||||
def handle_command(self, cmd):
|
||||
cmd = cmd[1:]
|
||||
|
@ -1067,13 +1062,13 @@ class SyniTox(Tox):
|
|||
return len(data) > 0 and self._toxes.is_data_encrypted(data)
|
||||
|
||||
def pass_encrypt(self, data):
|
||||
return self._toxes.pass_encrypt(data, self._oArgs.password)
|
||||
return self._toxes.pass_encrypt(data, self._oargs.password)
|
||||
|
||||
def has_password(self):
|
||||
return self._oArgs.password
|
||||
return self._oargs.password
|
||||
|
||||
def pass_decrypt(self, data):
|
||||
return self._toxes.pass_decrypt(data, self._oArgs.password)
|
||||
return self._toxes.pass_decrypt(data, self._oargs.password)
|
||||
|
||||
|
||||
def iMain(oArgs, oOpts):
|
||||
|
@ -1091,7 +1086,7 @@ def iMain(oArgs, oOpts):
|
|||
except ( SSL.Error, ) as e:
|
||||
LOG.error(f"SSL error: {e.args}")
|
||||
ret = 1
|
||||
except (SSL.SysCallError, ) as e:
|
||||
except (SSL.SysCallError,) as e:
|
||||
# OpenSSL.SSL.SysCallError: (9, 'EBADF')
|
||||
LOG.error(f"SSL error: {e.args}")
|
||||
ret = 1
|
||||
|
@ -1140,6 +1135,25 @@ def oToxygenToxOptions(oArgs):
|
|||
|
||||
return tox_options
|
||||
|
||||
def vInitializeOargs():
|
||||
global oTOX_OARGS
|
||||
assert oTOX_OARGS.irc_host or oTOX_OARGS.irc_connect
|
||||
if not oTOX_OARGS.irc_connect:
|
||||
oTOX_OARGS.irc_connect = oTOX_OARGS.irc_host
|
||||
if oTOX_OARGS.irc_cadir:
|
||||
assert os.path.isdir(oTOX_OARGS.irc_cadir)
|
||||
if oTOX_OARGS.irc_cafile:
|
||||
assert os.path.isfile(oTOX_OARGS.irc_cafile)
|
||||
if oTOX_OARGS.irc_crt:
|
||||
assert os.path.isfile(oTOX_OARGS.irc_crt)
|
||||
assert oTOX_OARGS.irc_key
|
||||
if oTOX_OARGS.irc_key:
|
||||
assert os.path.isfile(oTOX_OARGS.irc_key)
|
||||
assert oTOX_OARGS.irc_crt
|
||||
if not oTOX_OARGS.group_name:
|
||||
group_name = oTOX_OARGS.bot_name +oTOX_OARGS.irc_chan
|
||||
oTOX_OARGS.group_name = group_name
|
||||
|
||||
def oArgparse(lArgv):
|
||||
parser = ts.oMainArgparser()
|
||||
parser.add_argument('profile', type=str, nargs='?', default=None,
|
||||
|
@ -1179,7 +1193,7 @@ def oArgparse(lArgv):
|
|||
help="TLS version; empty is no SSL",
|
||||
choices=['', 'tlsv1.1', 'tlsv1.2', 'tlsv1.3'])
|
||||
parser.add_argument('--irc_cafile', type=str,
|
||||
help="Certificate Authority file",
|
||||
help="Certificate Authority file (in PEM)",
|
||||
default=CAfs[0])
|
||||
parser.add_argument('--irc_cadir', type=str,
|
||||
help="Certificate Authority directory",
|
||||
|
@ -1243,14 +1257,7 @@ def main(lArgs=None):
|
|||
oTOX_OARGS = oArgparse(lArgs)
|
||||
|
||||
ts.clean_booleans(oTOX_OARGS)
|
||||
|
||||
assert oTOX_OARGS.irc_host or oTOX_OARGS.irc_connect
|
||||
if not oTOX_OARGS.irc_connect:
|
||||
oTOX_OARGS.irc_connect = oTOX_OARGS.irc_host
|
||||
if oTOX_OARGS.irc_cadir:
|
||||
assert os.path.isdir(oTOX_OARGS.irc_cadir)
|
||||
if oTOX_OARGS.irc_cafile:
|
||||
assert os.path.isfile(oTOX_OARGS.irc_cafile)
|
||||
vInitializeOargs()
|
||||
|
||||
global oTOX_OPTIONS
|
||||
oTOX_OPTIONS = oToxygenToxOptions(oTOX_OARGS)
|
||||
|
|
|
@ -119,7 +119,6 @@ if [ "$TLS" -ne 0 ] ; then
|
|||
fi
|
||||
ls -l -s $SD/$NICK.pem
|
||||
fi
|
||||
exit 0
|
||||
|
||||
declare -a RARGS
|
||||
if [ "$DEBUG" = 1 ] ; then
|
||||
|
|
Loading…
Reference in a new issue