import re ROOT_PATH = '/srv/darknet-lantern/' STATIC_PATH = ROOT_PATH + 'www/' TEMPLATE_PATH = ROOT_PATH + 'templates/' PARTICIPANT_DIR = STATIC_PATH + 'participants/' OFFICIAL_PARTICIPANTS_FILE = STATIC_PATH + '.official_participants' WEBRING_CSV_FILE = 'webring-participants.csv' LOCAL_DIR = '' # Assign on script startup LOCAL_INSTANCE = '' # Assign on script startup PROXIES = { 'http': 'socks5h://127.0.0.1:9050', 'https': 'socks5h://127.0.0.1:9050' } CSV_FILES = [ 'verified.csv', 'unverified.csv', 'blacklist.csv', 'sensitive.csv', 'webring-participants.csv' ] ############ REGEX ############ # name should contain only up to 64 alphanumeric characters VALID_NAME_PATTERN = re.compile(r"^[A-Za-z0-9]{1,64}$") # pattern for regular urls (https://stackoverflow.com/a/3809435) CLEARNET_URL_PATTERN = re.compile( r"https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]" r"{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)" ) # pattern for onion urls (56 bytes of base32 alphabet + .onion) # it works also without http(s)://, so just the hostname will also go through ONION_URL_PATTERN = re.compile( r"^(https?:\/\/)?([a-zA-Z0-9-]+\.)*[a-z2-7-]{56}\.onion[^\s]*$" ) # pattern for simplex chatroom links SIMPLEX_CHATROOM_PATTERN = re.compile( r"(?:https?:\/\/(?:simplex\.chat|[^\/]+)|simplex:)\/(?:contact|invitation)#\/\?v=[\d-]+" r"&smp=[^&]+(?:&[^=]+=[^&]*)*(?:&data=\{[^}]*\})?" ) # pattern for smp or xftp simplex server ((smp|xftp):// 44 byte key @ url [:port]) SIMPLEX_SERVER_PATTERN = re.compile( r"^(smp|xftp):\/\/([a-zA-Z0-9\-_+=]{44})@([a-z2-7]{56}\.onion|" r"([a-zA-Z0-9\-\.]+\.[a-zA-Z0-9\-\.]+))" r"{1,}(?::[1-9][0-9]{0,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|" r"65[0-4][0-9]{2}|655[0-3][0-9]|6553[0-5])?$" )