#!/usr/bin/python3 import configparser import concurrent.futures import core import model class PyWhoisD(): """Main class. It reads the configuration options and starts the server""" def __init__(self): self.config = configparser.ConfigParser() self.config.read('pywhoisd.conf') self.data = None self.daemon = None self.classic_server = None self.web_server = None self.executor = concurrent.futures.ThreadPoolExecutor(max_workers=2) # What kind of storage are we using? def config_data(self): """Config data sources. At the moment only XML is supported. """ mode = self.config['Storage']['mode'] if mode == 'xml': self.data = model.DataXML(self.config) def config_daemon(self): """Config common information source for all configured servers""" self.config_data() self.daemon = core.Daemon(self.data) def web(self): """Returns true if web server is enabled""" return self.config['Servers']['web'] == 'yes' def classic(self): """Returns true if classic whois server is enabled""" return self.config['Servers']['classic'] == 'yes' def config_servers(self): """Sets up server configuration from config files""" if self.classic(): self.classic_server = core.ClassicServer(self.config, self.daemon) else: print("[+] Classic server is not enabled") if self.web(): self.web_server = core.WebServer(self.config, self.daemon) else: print("[+] Web server is not enabled") def start_servers(self): """Properly configure and start configured servers""" self.config_servers() if self.classic_server: print("[+] Starting classic whois server") self.executor.submit(self.classic_server.serve_forever) if self.web_server: self.executor.submit(self.web_server.serve_forever) def main(self): self.config_daemon() self.start_servers() # Wait for running server to finish. Probably never. self.executor.shutdown() if __name__ == "__main__": pwd = PyWhoisD() pwd.main()