#QuickWho: GUI for whois

#MIT license.
#(c) 2016 WordTech Communications LLC

##let's get started, import our modules and initialize some variables

from tkinter import *
from tkinter import font
from tkinter import filedialog
from tkinter import messagebox
import os
import sys
from tkinter import ttk as Tile
import time
import pickle
import bwidget
import re
import pythonwhois
import webbrowser
import urllib.request, urllib.error, urllib.parse
import socket
import json
import shutil
import hashlib
import tempfile
import ToolTip
from distutils.dir_util import copy_tree



#custom class for configuring hyperlinks, based on http://stackoverflow.com/questions/3781670/tkinter-text-highlighting-in-python
class CustomText(Text):
    '''A text widget with a new method, HighlightPattern 

    example:

    text = CustomText()
    text.tag_configure("red",foreground="#ff0000")
    text.HighlightPattern("this should be red", "red")

    The highlight_pattern method is a simplified python 
    version of the tcl code at http://wiki.tcl.tk/3246
    '''
    def __init__(self, *args, **kwargs):
        Text.__init__(self, *args, **kwargs)

    def highlight_pattern(self, pattern, tag, start="1.0", end="end", regexp=False):
        '''Apply the given tag to all text that matches the given pattern

        If 'regexp' is set to True, pattern will be treated as a regular expression
        '''

        start = self.index(start)
        end = self.index(end)
        self.mark_set("matchStart",start)
        self.mark_set("matchEnd",start)
        self.mark_set("searchLimit", end)

        count = StringVar()
        while True:
            index = self.search(pattern, "matchEnd","searchLimit",
                                count=count, regexp=regexp)
            if index == "": break
            self.mark_set("matchStart", index)
            self.mark_set("matchEnd", "%s+%sc" % (index,count.get()))
            self.tag_add(tag, "matchStart","matchEnd")
            


class quickwhoApp(Tk):

    def __init__(self, parent):
        Tk.__init__(self, parent)
        try:
            self.tk.call('console', 'hide')
        except TclError:
            pass
        self.setAppName('QuickWho', '6.4')
        self.makeImages()
        if self.isAqua():
            from_directory=os.path.join(os.path.dirname(os.path.abspath( __file__ )), 'QuickWho - Get Domain Info.workflow')
            to_directory = os.path.expanduser('~/Library/Services/QuickWho - Get Domain Info.workflow')
            copy_tree(from_directory, to_directory)
            self.tk.call('package', 'require', 'tclservices')
            self.tk.call('package', 'require', 'cocoaprint')
            self.tk.createcommand('getDomain', self.getDomain)
           
        self.tk.call('package', 'require', 'softwareupdate')
        self.tk.call('softwareupdate::setVersion', self.appname, self.appversion)  
        self.tk.call('package', 'require', 'xplat')
        self.prefsdir = str(self.tk.call('xplat::appconfig', 'QuickWho'))
        self.cachedir = tempfile.gettempdir()
        
        if sys.platform == "darwin": self.accelkey = "Command-"
        else: self.accelkey ="Control-"

        self.drawGUI()
        self.tk.call('package', 'require', 'machelp')
        if self.isAqua():
            self.createcommand('::tk::mac::ShowHelp', self.showHelp)
        self.tk.call('machelp::setAppName', self.appname, self.appversion)
  
        self.printfile=os.path.join(self.cachedir, 'whois_output.txt')
        self.readLic(self.appname, self.appversion)
        

    #test for Windows
    def isWindows(self):
        return  'win32' in self.tk.call('tk', 'windowingsystem')

    def isAqua(self):
        return 'aqua' in self.tk.call('tk', 'windowingsystem')

    #launch url
    def launchurl(self, url):
        self.tk.call('xplat::launch', url)


    #make the images
    def makeImages(self):

        self.tk.call('package', 'require', 'Img')
        execdir = os.path.dirname(sys.argv[0])

        #icon data
        icondata = """
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
      """

        self.logo = PhotoImage("logo", data=icondata)

        #mac icon
        mac_icon_data = """
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"""

        self.maclogo = PhotoImage("maclogo", data = mac_icon_data)
 
        #magnifying glass for search field
        glassdata = """
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2Fy
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANtJREFUSMe1VFENxSAMRMKTMglIQMIk
TAIOJqESJgEJSEDCJGy8pB+koaxtoMn9lbv2OHBOV3tFqngIckWs+Dlj+YrSIaa4
cQj11I8SICXfOocTinpEYGwTbZLJoWPQG9Ci1q7hnQRCHgUDqc5A01gUd5ZIukSN
p0KAbsFW2xQUAptFQJNtLxVIllx33g1bpyZyzGBJmqI/LgH5IbUWmC/gGmwSSW/R
krd2AU4X0MreR+gt5FLsq8gzvgMzOaAlNCkweowaclPlleQOY5dXkX+JTCHnRKaS
U5Fp5C86L9wRPiT2awAAAABJRU5ErkJggg==

      """

        self.searchphoto = PhotoImage("glass", data=glassdata)
        self.smallsearch = self.searchphoto.zoom(3,3).subsample(4,4)

        compassdata = """
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2Fy
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMlJREFUSMfllUERwyAQAFdCJFRCJCAh
EiIBCXVQCZFQCZGAhEqIBPrhcWUOuBTyaW/mHgzL7YWQABAH5Eol4tWSeLVEAo52
SD5YJD0CB2wtSa+AlmSEoCoZJShJugQ+rZEZRgos+YcCTjbxowIHLCcK5nxV4MX4
bii+KnxRoP0dN2AqFNe+3GdNUMqQSSZg/+aYyi7y7g5gThkMfFEg990r80c2fjT4
j4XalbcoRWtXZM4TgVd69FLMicm3y8KzV04JyosNwM3IhzfI6jKVHXCO+wAAAABJ
RU5ErkJggg==


"""
        self.compassphoto = PhotoImage("compass", data=compassdata)

    #aboutwindow

    def aboutWindow(self):
       
        messagebox.showinfo(title='About QuickWho',   message='QuickWho: Domain Name Service', 
		icon='info', parent=self, detail='Version 6.4\n(c) 2018 WordTech Communications LLC')
        

    #draw the GUI
    def drawGUI(self):

        self.title('QuickWho')
        self.option_add('*tearOff', FALSE)
        if self.isWindows():
            self.tk.call('wm', 'iconphoto', self, '-default', self.logo)
        else:
            self.tk.call('wm', 'iconphoto', self, '-default', self.maclogo)
 
        #make the menu
        self.mb = Menu(self)

        if self.isAqua():
            self.createcommand('::tk::mac::Quit', self.closeApp)
            self.createcommand('::tk::mac::ReopenApplication', self.reopenApp)
            self.protocol('WM_DELETE_WINDOW', self.hideWindow)
            self.bind("<{}-W>".format(self.accelkey), lambda event: self.hideWindow())
            self.bind("<{}-w>".format(self.accelkey), lambda event: self.hideWindow())
        self.bind("<{}-q>".format(self.accelkey), lambda event: self.closeApp())
        self.bind("<{}-Q>".format(self.accelkey), lambda event: self.closeApp())
        
        if self.isAqua():
            self.applemenu = Menu(self.mb, name='apple')
            self.mb.add_cascade(label='QuickWho', menu=self.applemenu)
            self.applemenu.add_command(label='About QuickWho', command=self.aboutWindow)
            self.applemenu.add_command(label='License', command=self.getLic)
            self.applemenu.add_command(label='Check for Updates', command=self.checkUpdate)
            self.applemenu.add_separator()
            
        self.infomenu = Menu(self.mb)
        self.mb.add_cascade(label='Whois', menu=self.infomenu)
        self.infomenu.add_command(label='Get Information', accelerator=self.accelkey + 'I', command=self.getInfo)
        self.bind("<{}-I>".format(self.accelkey), lambda event: self.getInfo())
        self.bind("<{}-i>".format(self.accelkey), lambda event: self.getInfo())
        self.infomenu.add_command(label='Save Log', command=self.saveLog, accelerator=self.accelkey + 'S')
        self.bind("<{}-s>".format(self.accelkey),lambda event: self.saveLog())
        self.bind("<{}-S>".format(self.accelkey), lambda event: self.saveLog())
        self.infomenu.add_separator()
        if self.isAqua():
            self.infomenu.add_command(label="Page Setup", command=self.pageSetup)
        self.infomenu.add_command(label='Print Log', accelerator=self.accelkey +'P', command=lambda: self.printLog())
        self.bind("<{}-p>".format(self.accelkey), lambda event: self.printLog())
        self.bind("<{}-P>".format(self.accelkey), lambda event: self.printLog())
        if self.isWindows():
            self.infomenu.add_command(label="Exit", command=self.closeApp)
            
        self.helpmenu = Menu(self.mb, name='help')
        self.mb.add_cascade(label='Help', menu=self.helpmenu)
        if self.isWindows():
            self.helpmenu.add_command(label='Help', command=self.showHelp)
        self.helpmenu.add_command(label='Contact Code by Kevin', command=self.getHelp)
        self.helpmenu.add_command(label='Web Site', command=self.getWebSite)
        if self.isWindows():  
            self.helpmenu.add_command(label='About QuickWho', command=self.aboutWindow)
            self.helpmenu.add_command(label='License', command=self.getLic)
            self.helpmenu.add_command(label='Check for Updates', command=self.checkUpdate)
 
        self.configure(menu=self.mb)


        self.mainframe = Tile.Frame(self)
        self.mainframe.pack(side=TOP, fill=BOTH, expand=YES)
        
        #main frame
        self.bottomframe=Tile.Frame(self.mainframe)
        self.bottomframe.pack(side=BOTTOM, fill=BOTH, expand=YES)


        #configure the searchfield
        style = Tile.Style()

        style.element_create("ImgEntry.icon", "image", self.smallsearch,
        padding=[20, 0, 0, 0], sticky="")

        self.tk.eval("ttk::style layout ImgEntry {Entry.field -children { ImgEntry.icon -side left Entry.padding -children {  Entry.textarea } }}")
        self.topframe = Tile.Frame(self.mainframe, padding=3)
        self.topframe.pack(side=TOP, fill=BOTH, expand=NO)


        self.informationbutton = Tile.Button(self.topframe, style='Toolbutton', takefocus=0, image=self.searchphoto, command=self.getInfo)
        self.t2 = ToolTip.ToolTip(self.informationbutton, 'Get whois information')
        self.informationbutton.pack(side=LEFT, fill=BOTH, expand=NO)

        self.webbutton = Tile.Button(self.topframe, style='Toolbutton', takefocus=0, image=self.compassphoto, command=self.saveLog)
        self.t3=ToolTip.ToolTip(self.webbutton, 'Save whois data to file')
        self.webbutton.pack(side=LEFT, fill=BOTH, expand=NO)

        self.searchterm = StringVar()
        self.searchfield = Tile.Entry(self.topframe, style = 'ImgEntry', textvariable=self.searchterm)

        self.searchfield.bind('<Return>', lambda event: self.getInfo())
        if self.isAqua():
            self.tk.call('tclservices::registerservicewidget', self.searchfield)
        self.searchfield.bind('<ButtonRelease-1>', lambda event: self.checkEntrySelection())
        self.searchfield.pack(side='right', fill=BOTH, expand=NO)

        self.status=StringVar()

        self.bottomlabel=Tile.Label(self.topframe, text='', textvariable=self.status, padding=2)
        self.bottomlabel.pack(side=RIGHT, fill=BOTH, expand=YES, anchor='e')

        self.status.set('No domain results displayed')
 
        #the rest of the GUI
        self.windowsep = Tile.Separator(self.mainframe, orient='vertical')
        self.windowsep.pack(side=BOTTOM, fill=BOTH, expand=NO)


        self.bottom_pw = Tile.PanedWindow(self.bottomframe, orient='horizontal')
        self.bottom_pw.pack(side=TOP, fill=BOTH, expand=YES)

        self.bottomleft=Tile.Frame(self.bottom_pw)
        self.bottomleft.pack(fill=BOTH, expand=YES)

        self.bottomright = Tile.Frame(self.bottom_pw)
        self.bottomright.pack(fill=BOTH, expand=YES)

        self.textdisplay = CustomText(self.bottomright,
                                borderwidth=0,
                                wrap='word',
                                background='white',
                                highlightcolor='SlateGray3',
                                )

        self.textdisplay.pack(side=LEFT, fill=BOTH, expand=YES)
        self.textdisplay.configure(state='disabled')
                            
        self.textscroll = Tile.Scrollbar(self.bottomright)
        self.textscroll.pack(side=RIGHT, fill=Y, expand=NO)

        self.textdisplay.configure(yscrollcommand=self.textscroll.set)
        self.textscroll.configure(command=self.textdisplay.yview)

        self.lefttop = Tile.Frame(self.bottomleft)
        self.lefttop.pack(side=TOP, fill=BOTH, expand=YES)
        self.bottomcanvas = Canvas(self.lefttop, background='white')
        self.bottomcanvas.pack(fill=BOTH, expand=YES, side=LEFT)

        self.t1=ToolTip.ToolTip(self.bottomcanvas, 'Geolocation map for domain')
        
        self.bottom_pw.add(self.bottomright)
        self.bottom_pw.add(self.bottomleft)

        self.wm_geometry('1100x600')

    #check for selection in entry widget
    def checkEntrySelection (self):
        if self.isAqua():
            if self.searchfield.selection_present():
                string=self.tk.call('ttk::entry::EntrySelection', self.searchfield)
                self.updateClipboard(string)
            else:
                return
        
    ##write selected text to clipboard
    def updateClipboard (self, selection):
        if self.isAqua():
            self.clipboard_clear()
            self.clipboard_append(selection)


    def geo_ip_lookup(self, domain):

        service = 'http://ip-api.com/'
        kind = '/json/'
        ip = domain

        url = service + kind + ip
        return json.loads(urllib.request.urlopen(url).read().decode('utf-8'))

        
    #get the whois data
    def getInfo(self):
     
        if self.searchfield.get() == "":
            return

        domain = self.searchterm.get()

        self.status.set('Displaying domain information for ' + (str(domain.strip('='))))
        self.clearData()

        #First, check to make sure domain name isn't hijacked by squatters, cf 'apple.com', add '=' if it is.
        try:
            self.pyurl = pythonwhois.get_whois(domain, normalized=True)
        except:
            self.inserturltext('Unable to retrieve some domain information for ' + (str(domain.strip('='))) + '.\n\n')
    
            try:
                 self.bottomcanvas.delete(self.displaymap)
                 self.map.destroy()
            except:
                 pass
             
        #Ok, we have a usable domain. Retrieve and parse data. 
        try:
            self.pyurl = pythonwhois.get_whois(domain, normalized=True)
            self.search_ip = domain.strip('=')
            self.domaindata =  self.geo_ip_lookup(self.search_ip)
            try:
                self.latitude = self.domaindata['lat']
                self.longitude = self.domaindata['lon']
            except(KeyError, TypeError):
                self.inserturltext('Unable to retrieve map or domain data.\n\n')
                return

            #Isolate image creation from the domain text output.
            try:
                base_url = "http://open.mapquestapi.com/staticmap/v4/getmap?key=Fmjtd%7Cluubn9u82h%2Cr2%3Do5-902lq0&size=600,600&zoom=10&imageType=png&center="
                final_url = base_url+str(self.latitude)+","+str(self.longitude)
                f = urllib.request.urlopen(final_url)
                baseimage = os.path.join(self.cachedir, 'mapquest.png')
                mapimage = open(baseimage ,'wb')
                mapimage.write(f.read())
                mapimage.close()
                self.map=PhotoImage(file=baseimage)
                self.displaymap=self.bottomcanvas.create_image(0,0, image=self.map, anchor='nw')
            except:
                self.inserturltext('Unable to retrieve map data for ' + self.searchterm.get() + '.\n\n')
                self.inserturltext('* * * * *\n\n')
                
            #Finally, display the text output.
            try:     
                self.inserturltext(
                "Administrative Contact:\n",\
                "\t" + "Name: "+ self.pyurl["contacts"]["admin"]["name"] + "\n",\
                "\t" + "E-mail: "+ self.pyurl["contacts"]["admin"]["email"] + "\n",\
                "\t" + "Organization: "+ self.pyurl["contacts"]["admin"]["organization"] + "\n",\
                "\t" + "Phone: "+ self.pyurl["contacts"]["admin"]["phone"] + "\n",\
                "\t" + "Street: "+ self.pyurl["contacts"]["admin"]["street"] + "\n",\
                "\t" + "City: "+ self.pyurl["contacts"]["admin"]["city"] + "\n",\
                "\t" + "State: "+ self.pyurl["contacts"]["admin"]["state"] + "\n",\
                "\t" + "Postal Code: "+ self.pyurl["contacts"]["admin"]["postalcode"] + "\n\n"
                )

                self.inserturltext(
                "Registrant Contacts:\n",\
                "\t" + "Name: "+ self.pyurl["contacts"]["registrant"]["name"] + "\n",\
                "\t" + "E-mail: "+ self.pyurl["contacts"]["registrant"]["email"] + "\n",\
                "\t" + "Organization: "+ self.pyurl["contacts"]["registrant"]["organization"] + "\n",\
                "\t" + "Phone: "+ self.pyurl["contacts"]["registrant"]["phone"] + "\n",\
                "\t" + "Street: "+ self.pyurl["contacts"]["registrant"]["street"] + "\n",\
                "\t" + "City: "+ self.pyurl["contacts"]["registrant"]["city"] + "\n",\
                "\t" + "State: "+ self.pyurl["contacts"]["registrant"]["state"] + "\n",\
                "\t" + "Postal Code: "+ self.pyurl["contacts"]["registrant"]["postalcode"] + "\n\n"
                )

                self.inserturltext(
                "Technical Contact:\n",\
                "\t" + "Name: "+ self.pyurl["contacts"]["tech"]["name"] + "\n",\
                "\t" + "E-mail: "+ self.pyurl["contacts"]["tech"]["email"] + "\n",\
                "\t" + "Organization: "+ self.pyurl["contacts"]["tech"]["organization"] + "\n",\
                "\t" + "Phone: "+ self.pyurl["contacts"]["tech"]["phone"] + "\n",\
                "\t" + "Street: "+ self.pyurl["contacts"]["tech"]["street"] + "\n",\
                "\t" + "City: "+ self.pyurl["contacts"]["tech"]["city"] + "\n",\
                "\t" + "State: "+ self.pyurl["contacts"]["tech"]["state"] + "\n",\
                "\t" + "Postal Code: "+ self.pyurl["contacts"]["tech"]["postalcode"] + "\n\n"
                )

                self.inserturltext("Creation Date: " + "\t" +  ", ".join(['%s' % i for i in self.pyurl["creation_date"]]) + "\n")
                self.inserturltext("Expiration Date: "+ "\t"  + ", ".join(['%s' % i for i in self.pyurl["expiration_date"]]) + "\n") 
                self.inserturltext("Name Servers: " + "\t"  + ", ".join(['%s' % i for i in self.pyurl["nameservers"]]) + "\n" )
                self.inserturltext("Updated: " + "\t" + ", ".join(['%s' % i for i in self.pyurl["updated_date"]]) + "\n") 
                self.inserturltext("Whois Server: " + "\t" +  ", ".join(['%s' % i for i in self.pyurl["whois_server"]]) + "\n")
                self.inserturltext('IP Address:\t\t ' + self.domaindata['query'] + '\n\n')
                self.inserturltext('Latitude:\t\t ' + str(self.domaindata['lat']) + '\n')
                self.inserturltext('Longitude:\t\t ' +  str(self.domaindata['lon']) + '\n')
                self.inserturltext('City:\t\t ' + self.domaindata['city'] + '\n')
                self.inserturltext('Region:\t\t '+ self.domaindata['region'] + '\n')
                self.inserturltext('Country:\t\t ' + self.domaindata['country'] + '\n\n')

                self.inserturltext('* * * * *\n\n')
                self.inserturltext('Geolocation powered by http://ip-api.com')
                self.inserturltext('\n\n')
                self.update()

            except (KeyError, TypeError):
                self.inserturltext('\n'.join(self.pyurl['raw']) + '\n\n')
                self.inserturltext('* * * * *\n\n')
                self.inserturltext('Geolocation powered by http://ip-api.com')
                self.inserturltext('\n\n')
                self.update()
 
        #If everything goes haywire, return an error message.
        except:
            raise
            self.inserturltext('Unable to retrieve domain information for' + (str(domain.strip('='))) + '.\n\n')
            try:
                self.bottomcanvas.delete(self.displaymap)
                self.map.destroy()
            except:
                raise
                self.inserturltext('Unable to retrieve map data.\n\n')
                
 
    #insert text into urltext widget
    def inserturltext(self, *args):
        text="".join(args)
        self.textdisplay.configure(state='normal')                       
        self.textdisplay.tag_configure("hyper",foreground="blue")
        mail = ('[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*@[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)+') #('^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$')
        web =  ('((https?):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)')
        self.textdisplay.highlight_pattern(web, "hyper", regexp=True)
        self.textdisplay.highlight_pattern(mail, "hyper", regexp=True)
        self.textdisplay.tag_bind("hyper", "<Button-1>", lambda event: self.clickLink(self.textdisplay, event.x, event.y, 'hyper'))
        self.textdisplay.insert(END, text)
        self.textdisplay.configure(state='disabled')

    #bind hyperlinks in text widget
    def clickLink(self, widget, x, y, tag):

        widget.configure(cursor='hand2')
        i = widget.index( "@%d,%d" % (x, y))
        text = self.tk.call(widget, 'tag', 'prevrange', tag, i)
        link = widget.get(text[0], text[1])

        if 'http' in link:
            self.launchurl(link)
        elif '@' in link:
            newlink = "mailto:" + link
            self.launchurl(newlink)
        widget.configure(cursor='arrow')
       
    #clear text display
    def clearData(self):
        self.textdisplay.configure(state='normal')
        self.textdisplay.delete('1.0', END)
        self.textdisplay.configure(state='disabled')
        try:
            self.bottomcanvas.delete(self.displaymap)
            self.map.destroy()
        except:
            pass

    #get all text
    def getData(self):
        return self.textdisplay.get('1.0', END)
      

    #set app name and version at startup
    def setAppName(self, appname, appversion):
        self.appname = appname
        self.appversion = appversion
        return self.appname, self.appversion
            
    #read license
    def readLic(self, application, appversion):
       self.tk.call('package', 'require', 'regproc')
       self.tk.call('regproc::readLic', self.appname,  self.appversion)


    #get the serial number from the user
    def getLic(self):
        self.tk.call('package', 'require', 'regproc')
        self.tk.call('regproc::getReg')


    #check to see if new verson of software exists
    def checkUpdate(self):
        self.tk.call('package', 'require', 'softwareupdate')
        self.tk.call('softwareupdate::setIcon', self.logo)
        self.tk.call('softwareupdate::checkVersion', self.appname,  self.appversion)
        
    #e-mail the developer for help
    def getHelp(self):
        self.tk.call('machelp::usermail')

    #get web site
    def getWebSite(self):
        self.tk.call('machelp::appweb')

    #show help
    def showHelp(self):
        self.tk.call('machelp::userhelp')

    #save data in log to file  
    def saveLog(self):
        
        filename = filedialog.asksaveasfilename(title='Save Log Output', initialdir=os.path.expanduser('~/'), initialfile='QuickWho log.txt', parent=self)
        if filename == "":
             return
        else:
            alltext=self.getData()
            finaltext = open(filename, 'w').write(alltext)
            

    #page setup dialog for printing
    def pageSetup(self):
        if self.isAqua():
            self.tk.call('cocoaprint::pagesetup', self)
            
    #print data in log file
    def printLog(self):
        alltext=self.getData()
        fo=open(self.printfile, 'w')
        fo.write(alltext)
        fo.close()
        if self.isWindows():
            self.tk.call('xplat::print', self.printfile)
        if self.isAqua():
            htmlcmd = 'textutil ' + ' -convert ' + ' html ' + '"' + self.printfile + '"' + ' -output ' + '"' + os.path.join(self.cachedir, 'whois.html') + '"'
            os.system(htmlcmd)
            pdfcmd = '/usr/sbin/cupsfilter' + ' -i ' + ' text/html ' +  '"' + os.path.join(self.cachedir, 'whois.html') +  '"' + ' > ' +  '"' +   os.path.join(self.cachedir, 'whois.pdf') +  '"'
            os.system(pdfcmd)
            pdf = os.path.join(self.cachedir, 'whois.pdf')
            self.tk.call('cocoaprint::print', pdf, self)

    #binding to the "quit" command
    def closeApp(self):
        sys.exit()

    #binding to the "reopen app" event
    def reopenApp(self):
        if self.wm_state("withdrawn"):
            self.wm_deiconify()
            self.wm_state("normal")
            self.lift()
        else:
            self.wm_deiconify()
            self.lift()

    #dummy def for hiding windows
    def hideWindow(self):
        self.wm_state('withdrawn')

    #expose basic functionality to AppleScript    
    def getDomain(self, domain):
        self.searchfield.delete(0, 'end')
        self.searchfield.insert(0, domain)
        self.getInfo()
        alltext=self.getData()     
        return alltext

if __name__== '__main__':
    app = quickwhoApp(None)
    app.mainloop()
    
