36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from aiosmtpd.controller import Controller
|
|
import quopri
|
|
from loguru import logger
|
|
import re
|
|
from clicker import Clicker
|
|
import asyncio
|
|
|
|
URL_PATTERN = re.compile(b'"(https://www.netflix.com/account/update-primary-location.*?)"', re.DOTALL)
|
|
|
|
class NetflixHandler:
|
|
|
|
async def handle_DATA(self, session, envelope, *args):
|
|
logger.info('Message from %s' % envelope.mail_from)
|
|
data = quopri.decodestring(
|
|
envelope.content.decode('utf8', errors='replace')
|
|
)
|
|
if urls := URL_PATTERN.findall(data):
|
|
with Clicker() as browser:
|
|
url = urls[0]
|
|
logger.info(f'Found Update link: {url}')
|
|
try:
|
|
browser.click(url.decode())
|
|
except Exception as e:
|
|
logger.error(e)
|
|
return '250 Message accepted for delivery'
|
|
|
|
|
|
server = Controller(handler=NetflixHandler, hostname='0.0.0.0', port=1025)
|
|
server.start()
|
|
logger.info('Netflix-clicker start.')
|
|
while True:
|
|
try:
|
|
asyncio.run(asyncio.sleep(3))
|
|
except KeyboardInterrupt:
|
|
server.stop()
|