Initial commit
This commit is contained in:
commit
42e1a0e539
43
certstream_consumer.py
Executable file
43
certstream_consumer.py
Executable 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
11
certstream_producer.py
Executable 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
12
notifications_consumer.py
Executable 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
15
rules_test.py
Executable 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")
|
Loading…
Reference in New Issue
Block a user