2023-03-20 15:59:06 +00:00
|
|
|
# -*- coding: utf-8 -*- ############################################################### SOF
|
|
|
|
###########################################################################################
|
|
|
|
|
|
|
|
???AUTHSASL???
|
|
|
|
|
|
|
|
###########################################################################################
|
|
|
|
###########################################################################################
|
|
|
|
|
|
|
|
#####################
|
|
|
|
if SERVICES_AUTHSASL:
|
|
|
|
#####################
|
|
|
|
|
|
|
|
import irc3,os,sys,base64
|
2023-03-20 18:37:19 +00:00
|
|
|
from tool_colors_plugin import colorform as print
|
2023-03-20 15:59:06 +00:00
|
|
|
|
|
|
|
#######################################################################################
|
|
|
|
#######################################################################################
|
|
|
|
|
|
|
|
def getenv(s):
|
|
|
|
try:
|
|
|
|
s = os.environ[s]
|
|
|
|
return s
|
|
|
|
except:
|
|
|
|
error_type="environmental variable error"
|
|
|
|
error_reason=f"exported {s} not found"
|
|
|
|
print(f"{error_type}: {error_reason}")
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
#######################################################################################
|
|
|
|
#######################################################################################
|
|
|
|
|
|
|
|
BOT_SASL_USERNAME=getenv('BOT_SASL_USERNAME')
|
|
|
|
BOT_SASL_PASSWORD=getenv('BOT_SASL_PASSWORD')
|
|
|
|
|
|
|
|
#######################################################################################
|
|
|
|
#######################################################################################
|
|
|
|
|
|
|
|
@irc3.plugin
|
|
|
|
class DR1PSASL:
|
|
|
|
|
|
|
|
###################################################################################
|
|
|
|
###################################################################################
|
|
|
|
|
|
|
|
def __init__(self, bot):
|
2023-03-26 20:46:52 +00:00
|
|
|
print('[ loaded ]')
|
2023-03-20 15:59:06 +00:00
|
|
|
self.bot=bot
|
|
|
|
self.auth=(f'{BOT_SASL_USERNAME}\0{BOT_SASL_USERNAME}\0{BOT_SASL_PASSWORD}')
|
|
|
|
self.auth=base64.encodebytes(self.auth.encode('utf8'))
|
|
|
|
self.auth=self.auth.decode('utf8').rstrip('\n')
|
|
|
|
self.events = [
|
|
|
|
irc3.event(r'^:\S+ CAP \S+ LS :(?P<data>.*)', self.cap_ls),
|
|
|
|
irc3.event(r'^:\S+ CAP \S+ ACK sasl', self.cap_ack),
|
|
|
|
irc3.event(r'AUTHENTICATE +', self.authenticate),
|
|
|
|
irc3.event(r'^:\S+ 903 \S+ :Authentication successful',self.cap_end),
|
|
|
|
]
|
|
|
|
|
|
|
|
###################################################################################
|
|
|
|
###################################################################################
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def reload(cls, old):
|
|
|
|
return cls(old.bot)
|
|
|
|
|
|
|
|
###################################################################################
|
|
|
|
###################################################################################
|
|
|
|
|
|
|
|
def before_reload(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
###################################################################################
|
|
|
|
###################################################################################
|
|
|
|
|
|
|
|
def after_reload(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
###################################################################################
|
|
|
|
###################################################################################
|
|
|
|
|
|
|
|
def connection_ready(self, *args, **kwargs):
|
2023-03-20 18:37:19 +00:00
|
|
|
print('[ CAP LS ]')
|
2023-03-20 15:59:06 +00:00
|
|
|
self.bot.send('CAP LS\r\n')
|
|
|
|
self.bot.attach_events(*self.events)
|
|
|
|
|
|
|
|
###################################################################################
|
|
|
|
###################################################################################
|
|
|
|
|
|
|
|
def cap_ls(self, data=None, **kwargs):
|
2023-03-20 18:37:19 +00:00
|
|
|
print('[ CAP REQ :sasl ]')
|
2023-03-20 15:59:06 +00:00
|
|
|
if 'sasl' in data.lower():
|
|
|
|
self.bot.send_line('CAP REQ :sasl')
|
|
|
|
else:
|
|
|
|
self.cap_end()
|
|
|
|
|
|
|
|
###################################################################################
|
|
|
|
###################################################################################
|
|
|
|
|
|
|
|
def cap_ack(self, **kwargs):
|
2023-03-20 18:37:19 +00:00
|
|
|
print('[ AUTHENTICATE PLAIN ]')
|
2023-03-20 15:59:06 +00:00
|
|
|
self.bot.send_line('AUTHENTICATE PLAIN')
|
|
|
|
|
|
|
|
###################################################################################
|
|
|
|
###################################################################################
|
|
|
|
|
|
|
|
def authenticate(self, **kwargs):
|
2023-03-20 18:37:19 +00:00
|
|
|
print(f'[ AUTHENTICATE <CENSORED> ]')
|
2023-03-20 15:59:06 +00:00
|
|
|
self.bot.send_line(f'AUTHENTICATE {self.auth}\n')
|
|
|
|
|
|
|
|
###################################################################################
|
|
|
|
###################################################################################
|
|
|
|
|
|
|
|
def cap_end(self, **kwargs):
|
2023-03-20 18:37:19 +00:00
|
|
|
print('[ CAP END ]')
|
2023-03-20 15:59:06 +00:00
|
|
|
self.bot.send_line('CAP END\r\n')
|
|
|
|
self.bot.detach_events(*self.events)
|
|
|
|
|
|
|
|
###########################################################################################
|
|
|
|
####################################################################################### EOF
|