#!/usr/bin/env python3

# http://www.dnspython.org/
import dns.message

import sys
import base64
import getopt

def usage(msg=None):
    if msg:
        print(msg,file=sys.stderr)
    print("Usage: %s domain-name [type]" % sys.argv[0], file=sys.stderr)

try:
    use_base64 = False
    optlist, args = getopt.getopt (sys.argv[1:], "hb",
                                   ["help", "base64"])
    for option, value in optlist:
        if option == "--help" or option == "-h":
            usage()
            sys.exit(0)
        elif option == "--base64" or option == "-b":
            use_base64 = True
        else:
            error ("Unknown option " + option)
except getopt.error as reason:
    usage(reason)
    sys.exit(1)
if len(args) != 1 and len(args) != 2:
    usage("Wrong number of arguments")
    sys.exit(1)
name = args[0]
if len(args) == 1:
    type = 'AAAA'
else:
    type = args[1]
message = dns.message.make_query(name, dns.rdatatype.from_text(type))
message.id = 0 # DoH requests that
if use_base64:
    dns_req = base64.urlsafe_b64encode(message.to_wire()).decode('UTF8').rstrip('=')
else:
    dns_req = message.to_wire().decode()
sys.stdout.write(dns_req)
