from twisted.web.widgets import Form, Gadget, FORGET_IT from twisted.enterprise.row import RowObject, DBReflector from twisted.cred.util import challenge import md5 class License(RowObject): rowColumns = [ 'license_key', 'license_secret', 'license_type', 'license_user', 'license_email', 'license_org', 'license_dir', 'license_host', ] def __init__(self, license_key, license_secret, license_type, license_user, license_email, license_org, license_dir, license_host): self.assignKeyAttr('license_key', license_key) self.license_secret = license_secret self.license_type = license_type self.license_user = license_user self.license_email = license_email self.license_org = license_org self.license_dir = license_dir self.license_host = license_host licenseTypes = {"adamantium": "Adamantium License (Developer)", "mithril": "Mithril License (Personal)", "dilithium": "Dilithium License (Business)", "trilithium": "Trilithium License (Enterprise)"} _ltypes = licenseTypes.items() _ltypes.sort() class RegServer(Form): formFields = [ ['string', 'Administrator Name', 'license_user', '', 'Your Name.'], ['string', 'Organization Name', 'license_org', '', 'The name of the organization to create the license for.'], ['string', 'Email Address', 'license_email', '', 'Enter an e-mail address here if you want us to contact you.'], ['menu', 'License Type', 'license_type', _ltypes, 'Enter the type of license you desire.'], ['string', 'License Host', 'license_host', '', 'The hostname that you will be using this server on.'], ['string', 'Working Directory', 'license_dir', '', 'The directory on your host where Twisted will be run.', ]] title = "Twisted Daemon Registration Form" actionURI='twisted-registration' def __init__(self, dbpool): # Form.__init__(self) self.reflector = DBReflector(dbpool, [(License, "licenses", [("license_key", "varchar")])], self.populated) def populated(self, ignored): print 'regserver populated!!' keyfile = "KEYFILE" def process(self, write, request, submit, license_type, license_user, license_email, license_org, license_dir, license_host ): # Yay for single-threadedness. kf = open(self.keyfile).read() k = int(kf) f = open(self.keyfile, 'w') f.write(str(k + 1)) f.close() license_key = kf license_secret = md5.md5(challenge()).hexdigest() self.reflector.insertRow(License( license_key, license_secret, license_type, license_user, license_email, license_org, license_dir, license_host )) request.setHeader("content-type", "text/x-twisted-license") request.write(""" # Twisted Registration File # This is a site license file for a Twisted Server. It contains a globally # unique identifier and is intended to be used for one and only one persistent # Twisted process at a time. New license keys may be obtained at # http://twistedmatrix.com/license # While this license file was originally designed for twistd, it can be used # with other Twisted servers and clients that require a registration file as # well. Simply drop it into the directory where you will be running that # application, with the name 'twisted-registration' (no extension). # A unique identifier for this license key. LICENSE_KEY = %r # A secret key, associated with the license in a database. LICENSE_SECRET = %r # The type of license that you have registered for. LICENSE_TYPE = %r # A central point of contact for this license. LICENSE_USER = %r LICENSE_EMAIL = %r # The organization that this server was licensed to. LICENSE_ORG = %r # The directory that this license applies to. LICENSE_DIR = %r # The host name that this license applies to. LICENSE_HOST = %r """ % ( license_key, license_secret, licenseTypes.get(license_type) or license_type, license_user, license_email, license_org, license_dir, license_host )) request.finish() return [FORGET_IT]