relay_status/relaystatus.py

48 lines
1.7 KiB
Python
Raw Normal View History

2021-09-27 00:20:37 +00:00
import requests
import os
2021-09-27 02:18:20 +00:00
import datetime
2021-09-27 00:20:37 +00:00
import json
import jsondiff as jd
2021-09-27 02:18:20 +00:00
import smtplib
2021-09-27 00:20:37 +00:00
from jsondiff import diff
old_file = "onionoo_details"
url = "https://onionoo.torproject.org/details"
r = requests.get(url)
relays = json.loads(r.content)["relays"]
old_text = open(old_file, "r").read()
old_text = json.loads(old_text)["relays"]
diff1 = diff(old_text, relays, syntax='symmetric')
2021-09-27 02:18:20 +00:00
status = """From: relay status <relaystatus@encryptionin.space>
To: relaystatus@lists.encryptionin.space
Subject: Relay Status """ + datetime.datetime.now(datetime.utc).strftime('%Y-%m-%d %H') + """\n\n"""
2021-09-27 00:20:37 +00:00
for new_relay in diff1[jd.insert]:
exit = "no"
if new_relay[1]["exit_policy"][0] != "reject *:*":
exit = "yes"
2021-09-27 02:18:20 +00:00
status = status + "New relay: \"" + new_relay[1]["nickname"], "\", fingerpint: " + new_relay[1]["fingerprint"] + ", potential exit: " + exit + ", effective family size: " + str(len(new_relay[1]["effective_family"])) + "\n"
2021-09-27 00:20:37 +00:00
for updated_relay in diff1:
if updated_relay != jd.insert and updated_relay != jd.delete:
if "flags" in diff1[updated_relay]:
2021-09-27 02:18:20 +00:00
if "Exit" in diff1[updated_relay]["flags"][jd.insert]:
relay = old_text[updated_relay]
new_flags = ""
for flag in diff1[updated_relay]["flags"][jd.insert]:
new_flags = new_flags+flag[1]+","
status = status + "\"" + relay["nickname"] + "\" (" + relay["fingerprint"] + ") got new flag(s): \"" + new_flags + "\"\n"
2021-09-27 00:20:37 +00:00
with open(old_file, "w") as output:
output.write(r.text)
2021-09-27 02:18:20 +00:00
try:
smtp = smptlib.SMTP('localhost')
2021-09-27 02:21:54 +00:00
smtp.sendmail('relaystatus@encryptionin.space', ['relaystatus@lists.encryptionin.space'], status)
except SMTPException:
print("couldn't send")