53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
|
import secrets
|
||
|
import db
|
||
|
import dns.resolver
|
||
|
import os
|
||
|
import dotenv
|
||
|
|
||
|
dotenv.load_dotenv()
|
||
|
avatars = {}
|
||
|
|
||
|
def add_user(domain,token):
|
||
|
db.add_token(token,domain)
|
||
|
|
||
|
def get_user(token):
|
||
|
return db.get_token(token)
|
||
|
|
||
|
def remove_user(token):
|
||
|
db.delete_token(token)
|
||
|
|
||
|
def generate_token(length=32):
|
||
|
token = secrets.token_hex(length // 2)
|
||
|
return token
|
||
|
|
||
|
def get_avatar(domain):
|
||
|
global avatars
|
||
|
if domain in avatars:
|
||
|
return avatars[domain]
|
||
|
else:
|
||
|
avatars[domain] = lookup_avatar(domain)
|
||
|
return avatars[domain]
|
||
|
|
||
|
def lookup_avatar(domain):
|
||
|
resolver = dns.resolver.Resolver()
|
||
|
resolver.nameservers = [os.getenv("DNS_SERVER")]
|
||
|
resolver.port = int(os.getenv("DNS_SERVER_PORT"))
|
||
|
try:
|
||
|
# Query the DNS record
|
||
|
response = resolver.resolve(domain, "TXT")
|
||
|
for record in response:
|
||
|
# If starts with profile avatar=
|
||
|
record = record.to_text().replace('"','')
|
||
|
if record.startswith("profile avatar="):
|
||
|
# Return the URL
|
||
|
return record.replace("profile avatar=","")
|
||
|
|
||
|
|
||
|
except dns.resolver.NXDOMAIN:
|
||
|
return "assets/img/favicon-32x32.png"
|
||
|
except dns.exception.DNSException as e:
|
||
|
return "assets/img/favicon-32x32.png"
|
||
|
|
||
|
|
||
|
|
||
|
return "assets/img/favicon-32x32.png"
|