add function to automatically lookup a homeserver admins email address, either the easy way (MSC1929) or the hard way (Your domain registrars whois email)

This commit is contained in:
PC-Admin 2023-07-24 01:44:41 +08:00
parent 3ad8469b5f
commit 63dc5bd6d8
3 changed files with 62 additions and 1 deletions

View File

@ -19,6 +19,13 @@ You can hard code the server URL, federation port and access token into the [har
Your access token can be found in Element > Settings > Help & About, your user account must first be upgraded to a server admin. Your access token can be found in Element > Settings > Help & About, your user account must first be upgraded to a server admin.
This script also requires you to install the following PIP packages:
```
pip3 install python-whois
pip3 install requests
pip3 install pyAesCrypt
```
*** ***
## Upgrade user to 'server admin' ## Upgrade user to 'server admin'

View File

@ -57,6 +57,7 @@ while pass_token == False:
print("40) Delete and block a specific media.\t\t\t\t70) Generate user report.") print("40) Delete and block a specific media.\t\t\t\t70) Generate user report.")
print("41) Purge remote media repository up to a certain date.\t\t71) Decrypt user report .zip file.") print("41) Purge remote media repository up to a certain date.\t\t71) Decrypt user report .zip file.")
print("42) Prepare database for copying events of multiple rooms.") print("42) Prepare database for copying events of multiple rooms.")
print("43) Lookup homeserver admin contact email.")
print("\n#### rdlist ####") print("\n#### rdlist ####")
print("50) Block all rooms with specific rdlist tags.") print("50) Block all rooms with specific rdlist tags.")
print("51) Block all rooms with recommended rdlist tags.") print("51) Block all rooms with recommended rdlist tags.")
@ -139,6 +140,8 @@ while pass_token == False:
server_commands.purge_remote_media_repo() server_commands.purge_remote_media_repo()
elif menu_input == "42": elif menu_input == "42":
server_commands.prepare_database_copy_of_multiple_rooms() server_commands.prepare_database_copy_of_multiple_rooms()
elif menu_input == "43":
server_commands.lookup_homeserver_admin_email('')
elif menu_input == "50": elif menu_input == "50":
rdlist_commands.block_all_rooms_with_rdlist_tags(False,'','','','','') rdlist_commands.block_all_rooms_with_rdlist_tags(False,'','','','','')
elif menu_input == "51": elif menu_input == "51":

View File

@ -1,8 +1,10 @@
import os
import subprocess import subprocess
import csv import csv
import time import time
import os import json
import whois
import requests import requests
import datetime import datetime
import hardcoded_variables import hardcoded_variables
@ -136,3 +138,52 @@ def prepare_database_copy_of_multiple_rooms():
print(chown_command_process.stdout) print(chown_command_process.stdout)
print("\nThe sql query files have been generated, as postgres user in container run:\n# docker exec -it matrix-postgres /bin/bash\nbash-5.0$ export PGPASSWORD=your-db-password\nbash-5.0$ for f in /var/lib/postgresql/data/ramdisk/*/dump_room_data.sql; do psql --host=127.0.0.1 --port=5432 --username=synapse -w -f $f; done\n\nAfter copying the data to a cloud location law enforcement can access, clean up the ramdisk like so:\n# rm -r /matrix/postgres/data/ramdisk/*\n# umount /matrix/postgres/data/ramdisk") print("\nThe sql query files have been generated, as postgres user in container run:\n# docker exec -it matrix-postgres /bin/bash\nbash-5.0$ export PGPASSWORD=your-db-password\nbash-5.0$ for f in /var/lib/postgresql/data/ramdisk/*/dump_room_data.sql; do psql --host=127.0.0.1 --port=5432 --username=synapse -w -f $f; done\n\nAfter copying the data to a cloud location law enforcement can access, clean up the ramdisk like so:\n# rm -r /matrix/postgres/data/ramdisk/*\n# umount /matrix/postgres/data/ramdisk")
def lookup_homeserver_admin_email(preset_homeserver):
if preset_homeserver == '':
homeserver = input("\nEnter the base URL to collect the admin contact details (Example: matrix.org): ")
elif preset_homeserver != '':
homeserver = preset_homeserver
# Check target homserver for MSC1929 support email
url = f"https://{homeserver}/.well-known/matrix/support"
try:
response = requests.get(url)
except requests.exceptions.RequestException as e:
print(f"Error: Unable to connect to server {homeserver}. Trying WHOIS data...")
response = None
# If the request was successful, the status code will be 200
if response and response.status_code == 200:
# Parse the response as JSON
data = json.loads(response.text)
# Extract the emails from the admins field and remove duplicates
admin_emails = list({admin['email_address'] for admin in data['admins']})
print("Admin contact emails for " + homeserver + " are: " + str(admin_emails))
# Create a dictionary with homeserver as key and emails as value
email_dict = {homeserver: admin_emails}
# Convert the dictionary to a JSON string and print it
email_json = json.dumps(email_dict, indent=4)
print("Admin contact emails for " + homeserver + " in JSON format: " + email_json)
return email_dict, False
else:
print(f"Error: Unable to collect admin email from server {homeserver}")
print("Attempting to collect admin email from WHOIS data...")
# Get WHOIS data
try:
w = whois.whois(homeserver)
if w.emails:
print("Admin contact email(s) for " + homeserver + " are: " + str(w.emails))
return {homeserver: list(w.emails)}, True
else:
print(f"Error: Unable to collect admin email from WHOIS data for {homeserver}")
return None, False
except:
print(f"Error: Unable to collect WHOIS data for {homeserver}")
return None, False