Initial commit

This commit is contained in:
Giulio 2020-04-22 01:36:22 +02:00
commit 42e1a0e539
4 changed files with 81 additions and 0 deletions

43
certstream_consumer.py Executable file
View File

@ -0,0 +1,43 @@
import redis
import json
r = redis.Redis()
count = 0
rules = {}
while True:
if count % 1000 == 0:
count = 0
todel = 1
while (toadd := r.lpop('toadd')) is not None:
toadd = json.loads(toadd.decode('ascii'))
rules[toadd['id']] = toadd['value']
while (todel := r.lpop('todel')) is not None:
try:
del rules[todel.decode('ascii')]
except:
pass
domain = r.blpop('certstream')[1].decode('ascii')
for rule in rules.values():
notify = False
if rule['t'] == 0:
if rule['v'] in domain:
notify = True
elif rule['t'] == 1:
if domain.startswith(rule['v']):
notify = True
elif rule['t'] == 2:
if domain.endswith(rule['v']):
notify = True
if notify:
print(domain)
r.rpush('notifications', json.dumps({"domain": domain, "chats": rule['c']}))
count += 1

11
certstream_producer.py Executable file
View File

@ -0,0 +1,11 @@
import certstream
import redis
import sys
r = redis.Redis()
def enqueue(message, context):
for domain in message['data']['leaf_cert']['all_domains']:
r.rpush('certstream', domain)
certstream.listen_for_events(enqueue, url='wss://certstream.calidog.io/')

12
notifications_consumer.py Executable file
View File

@ -0,0 +1,12 @@
import redis
import json
import os
r = redis.Redis()
token = os.environ.get('token')
while True:
notification = json.loads(r.blpop('notifications')[1].decode('ascii'))
print(notification)
for chat in notification['chats']:
requests.get("https://api.telegram.org/bot{}/sendMessage".format(token), params={"chatid": chat, "text": "New cert for *{}*".format(domain), "parse_mode": "Markdown"})

15
rules_test.py Executable file
View File

@ -0,0 +1,15 @@
import redis
import json
r = redis.Redis()
rules = [
{"id": "22", "value": {"t": 0, "v": ".edu", "c": 1234567}},
{"id": "27", "value": {"t": 2, "v": ".int", "c": 1234567}},
{"id": "232", "value": {"t": 0, "v": ".sy", "c": 1234567}}
]
for rule in rules:
r.rpush("toadd", json.dumps(rule))
r.rpush("todel", "22")