Nathan Woodburn
79b210c8a7
All checks were successful
Build Docker / Build Main Image (push) Successful in 33s
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" |