def get_gale_sys_env(): pygaledir = gale_env.get('PYGALE_DIR', os.path.join(userinfo.home_dir, '.gale')) fname = os.path.join(pygaledir, PYGALE_CONF) if os.path.exists(fname): gale_env.load_file(fname) result = 'Reading PyGale settings from ' + fname else: # Assume some reasonable defaults try: gale_env.set('GALE_SYS_DIR', os.path.join(string.strip( os.popen('gale-config --prefix', 'r').read()), 'etc', 'gale')) except: # Can't find gale-config; Gale probably isn't installed if sys.platform == 'win32': gale_env.set('GALE_SYS_DIR', get_start_dir()) else: gale_env.set('GALE_SYS_DIR', '/usr/local/etc/gale') conffile = os.path.join(gale_env.get('GALE_SYS_DIR'), 'conf') if os.path.exists(conffile): confvars = gale_env.parse_sys_conf(conffile) result = 'Reading Gale settings from ' + conffile else: confvars = {} result = 'No existing Gale configuration found' if confvars.has_key('GALE_DOMAIN'): gale_env.set('GALE_DOMAIN', confvars['GALE_DOMAIN']) return result
def check(): pygaledir = gale_env.get('PYGALE_DIR', os.path.join(userinfo.home_dir, '.gale')) conf_file = os.path.join(pygaledir, PYGALE_CONF) if os.path.exists(conf_file): gale_env.load_file(conf_file) if gale_env.get('PYGALE_VERSION', '1.0') >= version.VERSION: return run_gui_setup()
def run_gui_setup(): print get_gale_sys_env() root = Tkinter.Tk() if sys.platform == 'win32': wizard = WizardDialog(root, [GetPygaleDir, GetGaleDomain, GetGaleUser, EnterUser]) else: wizard = WizardDialog(root, [GetPygaleDir, GetGaleSysDir, GetGaleDomain, GetGaleUser, EnterUser]) wizard.wait_window(wizard) if not wizard.finished: sys.exit(0) write_settings() # Copy private key file user, domain = string.split(os.path.basename( wizard.vars['sig_name']),'@', 1) gale_dir = gale_env.get('GALE_DIR', os.path.join(userinfo.home_dir, '.gale')) private_dir = os.path.join(gale_dir, 'auth', 'private') target_file = os.path.join(private_dir, os.path.basename(wizard.vars['sig_file_name'])) if not os.path.exists(target_file): shutil.copy(wizard.vars['sig_file_name'], target_file) else: print 'Not overwriting existing private key:', target_file # Quit root.destroy()
def next(self): sig_name = self.gale_user.get() gale_env.set('GALE_ID', sig_name) gale_dir = gale_env.get('GALE_DIR', os.path.join(userinfo.home_dir, '.gale')) privkey = os.path.join(gale_dir, 'auth', 'private', sig_name) privkey_gpri = os.path.join(gale_dir, 'auth', 'private', sig_name + '.gpri') self.vars['sig_name'] = sig_name if os.path.exists(privkey_gpri): file_exists = 1 sigfile = privkey_gpri elif os.path.exists(privkey): file_exists = 1 sigfile = privkey else: file_exists = 0 sigfile = None next_is_sigscreen = self.wizard.next_screen_is(self, FindSignature) if not file_exists and not next_is_sigscreen: self.wizard.add_screen_after(self, FindSignature) elif not file_exists and next_is_sigscreen: pass elif file_exists and not next_is_sigscreen: pass elif file_exists and next_is_sigscreen: self.wizard.del_screen_after(self) if file_exists: self.vars['sig_file_name'] = sigfile
def __init__(self, master, wizard, vars): Tkinter.Frame.__init__(self, master) self.wizard = wizard self.vars = vars self.title = 'PyGale configuration' self.galedir = gale_env.get('PYGALE_DIR', os.path.join(userinfo.home_dir, '.gale')) if not os.path.exists(self.galedir): create_str = "\n\nThis directory does not exist. I'll " +\ 'create it for you.\n' else: create_str = '\n\nGood! This directory already exists.\n' conffile = os.path.join(self.galedir, PYGALE_CONF) if os.path.exists(conffile): create_str = create_str + "I'll read the settings from " +\ 'your existing conf file.\n' gale_env.load_file(conffile) self.label = Tkinter.Label(self, wraplength=310, anchor='nw', justify='left', text= 'PyGale configuration, version %s\n\n' % version.VERSION + 'By default, this configuration will be stored in the ' + '.gale directory in your home directory. Optionally, you ' + 'can set the environment variable PYGALE_DIR to a directory ' + 'where the configuration file will be stored.\n\n' + 'Your Gale directory is: ' + self.galedir + create_str )
def __init__(self, master, wizard, vars): Tkinter.Frame.__init__(self, master) self.wizard = wizard self.vars = vars self.gale_sys_dir = Tkinter.StringVar() self.title = 'PyGale configuration' self.gale_sys_dir.set(gale_env.get('GALE_SYS_DIR', '/usr/local/etc/gale')) self.label = Tkinter.Label(self, wraplength = 310, anchor = 'nw', justify = 'left', text = "Gale system directory\n\nThis directory contains the public key cache and other Gale-specific data. It can and should be shared between Gale users on the same machine or network. If you have an existing Gale installation, enter its path here. Otherwise, I will create this directory for you.") self.entry = Tkinter.Entry(self, textvariable = self.gale_sys_dir)
def __init__(self, master, wizard, vars): Tkinter.Frame.__init__(self, master) self.title = 'Select User Name' self.vars = vars self.user_name = Tkinter.StringVar() # Use (in order) GALE_NAME or our username fullname = gale_env.get('GALE_NAME', userinfo.user_name) self.user_name.set(fullname) self.grid_propagate(0) self.grid_rowconfigure(0, weight = 1) self.grid_rowconfigure(1, weight = 1) self.grid_columnconfigure(0, weight = 1) self.user_label = Tkinter.Label(self, wraplength = 310, anchor = 'nw', justify = 'left', text = "Enter your user name. This is a free form string that accompanies every puff. People generally use their full name (e.g. Joe Smith).") self.user_entry = Tkinter.Entry(self, textvariable = self.user_name)
def __init__(self, master, wizard, vars): Tkinter.Frame.__init__(self, master) self.wizard = wizard self.vars = vars self.title = 'Enter Gale Domain' self.gale_domain = Tkinter.StringVar() domain = gale_env.get('GALE_DOMAIN', None) if domain is None: domain = socket.gethostbyaddr(socket.gethostname())[0] self.gale_domain.set(domain) self.grid_propagate(0) self.grid_rowconfigure(0, weight = 1) self.grid_rowconfigure(1, weight = 1) self.grid_columnconfigure(0, weight = 1) self.label = Tkinter.Label(self, wraplength = 310, anchor = 'nw', justify = 'left', text = "Gale domain\n\nEnter your Gale domain here (for example, gale.org). If you don't know what this is, contact your local Gale administrator. This domain will be appended to all non-qualified locations, and it determines which Gale server you will connect to.") self.entry = Tkinter.Entry(self, textvariable = self.gale_domain)
def write_settings(): print GALE_SYS_DIR = gale_env.get('GALE_SYS_DIR') conditional_mkdir(GALE_SYS_DIR, 0755) conditional_mkdir(os.path.join(GALE_SYS_DIR, 'auth'), 0755) conditional_mkdir(os.path.join(GALE_SYS_DIR, 'auth', 'cache'), 0777) conditional_mkdir(os.path.join(GALE_SYS_DIR, 'auth', 'local'), 01777) conditional_mkdir(os.path.join(GALE_SYS_DIR, 'auth', 'private'), 0755) conditional_mkdir(os.path.join(GALE_SYS_DIR, 'auth', 'trusted'), 0755) root_key_path = os.path.join(GALE_SYS_DIR, 'auth', 'trusted', 'ROOT') if not os.path.exists(root_key_path): try: f = open(root_key_path, 'wb') f.write(ROOT.rootkey) f.close() os.chmod(root_key_path, 0644) except: print '#' * 50 print 'Trouble installing the ROOT key in its proper location.' print 'WARNING! Puffs will not be verified!' print '#' * 50 galedir = gale_env.get('GALE_DIR', os.path.join(userinfo.home_dir, '.gale')) conditional_mkdir(galedir) conditional_mkdir(os.path.join(galedir, 'auth')) conditional_mkdir(os.path.join(galedir, 'auth', 'local')) conditional_mkdir(os.path.join(galedir, 'auth', 'private')) conditional_mkdir(os.path.join(galedir, 'auth', 'trusted')) pygaledir = gale_env.get('PYGALE_DIR', os.path.join(userinfo.home_dir, '.gale')) fname = os.path.join(pygaledir, PYGALE_CONF) print 'Writing configuration ...', f = open(fname, 'w') f.write('PYGALE_VERSION %s\n' % version.VERSION) f.write('GALE_SYS_DIR %s\n' % gale_env.get('GALE_SYS_DIR')) f.write('GALE_ID %s\n' % gale_env.get('GALE_ID')) f.write('GALE_DOMAIN %s\n' % gale_env.get('GALE_DOMAIN')) f.write('GALE_NAME %s\n' % gale_env.get('GALE_NAME')) f.close() print 'done' print 'To modify this configuration, edit', fname
def __init__(self, master, wizard, vars): Tkinter.Frame.__init__(self, master) self.vars = vars self.title = 'Find Signature' self.sig_file_name = Tkinter.StringVar() sig_name = self.vars['sig_name'] gale_dir = gale_env.get('GALE_DIR', os.path.join(userinfo.home_dir, '.gale')) sig_file = os.path.join(gale_dir, 'auth', 'private', sig_name) sig_file_gpri = sig_file + '.gpri' if os.path.exists(sig_file_gpri): self.sig_file_name.set(sig_file_gpri) elif os.path.exists(sig_file): self.sig_file_name.set(sig_file) self.grid_propagate(0) self.grid_rowconfigure(0, weight = 1) self.grid_rowconfigure(1, weight = 1) self.grid_columnconfigure(0, weight = 1) self.grid_columnconfigure(1, weight = 0) self.label = Tkinter.Label(self, wraplength = 310, anchor = 'nw', justify = 'left', text = "The Gale id you have specified requires a private key file. I was unable to find it at either '%s' or '%s'. Enter the location of your private key file." % (sig_file_gpri, sig_file)) self.browse_button = Tkinter.Button(self, command = self.browse, text= 'Browse', width = 10) self.entry = Tkinter.Entry(self, textvariable = self.sig_file_name)
def run_setup(): print get_gale_sys_env() print print 'PyGale configuration' galedir = gale_env.get('PYGALE_DIR', os.path.join(userinfo.home_dir, '.gale')) if not os.path.exists(galedir): print 'Creating directory', galedir # make PYGALE_DIR make_path(galedir) conffile = os.path.join(galedir, PYGALE_CONF) if os.path.exists(conffile): print 'Reading settings from %s' % conffile gale_env.load_file(conffile) gale_sys_dir = gale_env.get('GALE_SYS_DIR', '/usr/local/etc/gale') print print 'Gale system directory' print 'This directory contains the public key cache and other Gale-' print 'specific data. It can and should be shared between Gale users' print 'on the same machine or network. If you have an existing Gale' print 'installation, enter its path here. Otherwise, I will create' print 'this directory for you.' gsd = raw_input('Gale system directory [%s]: ' % gale_sys_dir) if gsd: gale_sys_dir = gsd gale_env.set('GALE_SYS_DIR', gale_sys_dir) print print 'Gale domain' print 'Enter the default domain to be appended to unqualified locations.' print 'It also determines the Gale server you connect to.' print "If you don't know what this is, contact your local Gale" print 'administrator.' domain = gale_env.get('GALE_DOMAIN', None) if domain is None: try: domain = socket.gethostbyaddr(socket.gethostname())[0] except: domain = 'NODOMAIN' gd = raw_input('Gale domain [%s]: ' % domain) if gd: domain = gd gale_env.set('GALE_DOMAIN', domain) print print 'Gale ID' print 'Enter the id that identifies you to other Gale users. You must' print 'have a valid public/private key pair for this id.' gale_user = pygale.gale_user() gu = raw_input('Gale ID [%s]: ' % gale_user) if gu: gale_user = gu gale_env.set('GALE_ID', gale_user) # check for private key file privkey = os.path.join(galedir, 'auth', 'private', gale_user) privkey_gpri = os.path.join(galedir, 'auth', 'private', gale_user + '.gpri') file_exists = 0 if os.path.exists(privkey_gpri) or os.path.exists(privkey): file_exists = 1 while not file_exists: print print 'The Gale ID you have specified requires a private key file.' print 'Normally it would exist as one of these files:' print ' ', privkey_gpri print ' ', privkey print 'Please enter the location of your private key file.' pkf = raw_input('Private key file: ') if not os.path.exists(pkf): continue if pkf == privkey or pkf == privkey_gpri: file_exists = 1 continue print 'Copying private key to %s' % privkey_gpri if not os.path.exists(os.path.dirname(privkey_gpri)): make_path(os.path.dirname(privkey_gpri)) shutil.copy(pkf, privkey_gpri) file_exists = 1 # select user name print print 'Enter your name. This is a freeform string that accompanies' print 'every puff. People generally use their full name (e.g., Joe' print 'Smith).' # Use (in order) GALE_NAME or our username fullname = gale_env.get('GALE_NAME', userinfo.user_name) gn = raw_input('Name [%s]: ' % fullname) if gn: fullname = gn gale_env.set('GALE_NAME', fullname) # write write_settings()