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
2021-09-30 01:00:23 +00:00
#import jsondiff as jd
2021-09-27 02:18:20 +00:00
import smtplib
2021-09-30 01:00:23 +00:00
#from jsondiff import diff
2021-09-27 00:20:37 +00:00
old_file = " onionoo_details "
url = " https://onionoo.torproject.org/details "
r = requests . get ( url )
relays = json . loads ( r . content ) [ " relays " ]
2021-09-29 22:29:38 +00:00
#sorted_relays = sorted(relays, key=lambda x : x['nickname'], reverse=True)
#old_text = open(old_file, "r").read()
#old_text = json.loads(old_text)["relays"]
#sorted_old = sorted(old_text, key=lambda x : x['nickname'], reverse=True)
2021-09-30 01:00:23 +00:00
email = " From: relay status <relaystatus@encryptionin.space> \n To: relaystatus@lists.encryptionin.space \n Subject: Relay Status " + datetime . datetime . now ( datetime . timezone . utc ) . strftime ( ' % Y- % m- %d % H ' ) + " \n \n "
2021-09-29 22:29:38 +00:00
status = " "
#diff takes too long
#print("beginning diff " + datetime.datetime.now().strftime("%H-%M-%S"))
#diff1 = diff(old_text, relays, syntax='symmetric')
#print("done diffing " + datetime.datetime.now().strftime("%H-%M-%S"))
#print("starting diff")
for new_relay in relays :
2021-09-30 16:13:02 +00:00
if datetime . datetime . strptime ( new_relay [ " first_seen " ] , " % Y- % m- %d % H: % M: % S " ) > ( datetime . datetime . utcnow ( ) - datetime . timedelta ( hours = 2 ) ) :
2021-09-29 22:29:38 +00:00
#added_relays += new_relay[1]["fingerprint"] + "\n"
exit = " no "
if new_relay [ " exit_policy " ] [ 0 ] != " reject *:* " :
exit = " yes "
#print("New relay: \"" + new_relay[1]["nickname"] + "\", fingerpint: " + new_relay[1]["fingerprint"] + ", potential exit: " + exit + ", effective family size: " + str(len(new_relay[1]["effective_family"])) + ", first seen: " + new_relay[1]["first_seen"] + "\n")
2021-09-30 16:26:06 +00:00
status + = " New relay: \" " + new_relay [ " nickname " ] + " \" , fingerpint: " + new_relay [ " fingerprint " ] + " , potential exit: " + exit + " , effective family size: " + str ( len ( new_relay [ " effective_family " ] ) - 1 ) + " \n "
2021-09-29 22:29:38 +00:00
#if jd.delete in diff1:
# for deleted_relay in diff1[jd.delete]:
# #deleted_relays += deleted_relay[1]["fingerprint"] + "\n"
# print("Deleted relay: \"" + deleted_relay[1]["nickname"] + "\", fingerpint: " + deleted_relay[1]["fingerprint"] + "\n")
# status += "Deleted relay: \"" + deleted_relay[1]["nickname"] + "\", fingerpint: " + deleted_relay[1]["fingerprint"] + "\n"
#for updated_relay in diff1:
# if updated_relay != jd.insert and updated_relay != jd.delete:
# try:
# if "flags" in diff1[updated_relay]:
# if jd.insert in diff1[updated_relay]["flags"]:
# 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 += "\"" + relay["nickname"] + "\" (" + relay["fingerprint"] + ") got new flag(s): \"" + new_flags + "\"\n"
# except:
# print(diff1[updated_relay])
#print(status)
#with open("status.txt", "a") as output:
# output.write(status)
#with open(old_file, "w") as output:
# output.write(r.text)
if status :
email + = status
try :
smtp = smtplib . SMTP ( ' localhost ' )
2021-09-30 16:17:33 +00:00
smtp . sendmail ( ' relaystatus@encryptionin.space ' , [ ' relaystatus@lists.encryptionin.space ' ] , email )
except :
2021-09-29 22:29:38 +00:00
print ( " couldn ' t send " )