def _create_new_identity(self): """ Generate new Private key and new identity file. Reads some extra info from config files. """ login = strng.to_bin(bpio.ReadTextFile(settings.UserNameFilename())) externalIP = strng.to_bin(misc.readExternalIP()) or b'127.0.0.1' if self.free_idurls[0].count(b'127.0.0.1'): externalIP = b'127.0.0.1' lg.out( 4, 'id_registrator._create_new_identity %s %s ' % (login, externalIP)) my_id.forgetLocalIdentity() my_id.eraseLocalIdentity(do_backup=True) key.ForgetMyKey(erase_file=True, do_backup=True) key.InitMyKey() if not key.isMyKeyReady(): key.GenerateNewKey() lg.out(4, ' my key is ready') ident = my_id.buildDefaultIdentity(name=login, ip=externalIP, idurls=self.free_idurls) my_identity_xmlsrc = ident.serialize(as_text=True) newfilename = settings.LocalIdentityFilename() + '.new' bpio.WriteTextFile(newfilename, my_identity_xmlsrc) try: id_url.identity_cached(ident) except: lg.exc() self.new_identity = ident lg.out( 4, ' wrote %d bytes to %s' % (len(my_identity_xmlsrc), newfilename))
def _create_new_identity(self): """ Generate new Private key and new identity file. Reads some extra info from config files. """ login = strng.to_bin(bpio.ReadTextFile(settings.UserNameFilename())) externalIP = strng.to_bin(misc.readExternalIP()) or b'127.0.0.1' if self.free_idurls[0].count(b'127.0.0.1'): externalIP = b'127.0.0.1' lg.out( 4, 'id_registrator._create_new_identity %s %s ' % (login, externalIP)) key.InitMyKey() if not key.isMyKeyReady(): key.GenerateNewKey() lg.out(4, ' my key is ready') ident = my_id.buildDefaultIdentity(name=login, ip=externalIP, idurls=self.free_idurls) # my_id.rebuildLocalIdentity( # identity_object=ident, revision_up=True, save_identity=False) # localIP = bpio.ReadTextFile(settings.LocalIPFilename()) my_identity_xmlsrc = ident.serialize(as_text=True) newfilename = settings.LocalIdentityFilename() + '.new' bpio.WriteTextFile(newfilename, my_identity_xmlsrc) self.new_identity = ident lg.out( 4, ' wrote %d bytes to %s' % (len(my_identity_xmlsrc), newfilename))
def doSaveMyName(self, arg): """ Action method. """ try: login = arg['username'] except: login = arg[0] if len(arg) > 1: self.preferred_servers = map(lambda s: s.strip(), arg[1].split(',')) if not self.known_servers: self.known_servers = known_servers.by_host() if not self.preferred_servers: try: from main import config for srv in str(config.conf().getData('services/identity-propagate/preferred-servers')).split(','): if srv.strip(): self.preferred_servers.append(srv.strip()) except: pass self.min_servers = max( settings.MinimumIdentitySources(), config.conf().getInt('services/identity-propagate/min-servers') or settings.MinimumIdentitySources()) self.max_servers = min( settings.MaximumIdentitySources(), config.conf().getInt('services/identity-propagate/max-servers') or settings.MaximumIdentitySources()) lg.out(4, 'id_registrator.doSaveMyName [%s]' % login) lg.out(4, ' known_servers=%s' % self.known_servers) lg.out(4, ' preferred_servers=%s' % self.preferred_servers) lg.out(4, ' min_servers=%s' % self.min_servers) lg.out(4, ' max_servers=%s' % self.max_servers) bpio.WriteFile(settings.UserNameFilename(), login)
def doSaveMyName(self, *args, **kwargs): """ Action method. """ login = kwargs['username'] self.preferred_servers = [ s.strip() for s in kwargs.get('preferred_servers', []) ] if not self.known_servers: self.known_servers = known_servers.by_host() if not self.preferred_servers: try: for srv in str(config.conf().getData( 'services/identity-propagate/preferred-servers') ).split(','): if srv.strip(): self.preferred_servers.append(srv.strip()) except: pass self.min_servers = max( settings.MinimumIdentitySources(), config.conf().getInt('services/identity-propagate/min-servers') or settings.MinimumIdentitySources()) self.max_servers = min( settings.MaximumIdentitySources(), config.conf().getInt('services/identity-propagate/max-servers') or settings.MaximumIdentitySources()) lg.out(4, 'id_registrator.doSaveMyName [%s]' % login) lg.out(4, ' known_servers=%s' % self.known_servers) lg.out(4, ' preferred_servers=%s' % self.preferred_servers) lg.out(4, ' min_servers=%s' % self.min_servers) lg.out(4, ' max_servers=%s' % self.max_servers) bpio.WriteTextFile(settings.UserNameFilename(), login)
def _create_new_identity(self): """ Generate new Private key and new identity file. Reads some extra info from config files. """ login = bpio.ReadTextFile(settings.UserNameFilename()) externalIP = misc.readExternalIP( ) # bpio.ReadTextFile(settings.ExternalIPFilename()) lg.out( 4, 'id_registrator._create_new_identity %s %s ' % (login, externalIP)) key.InitMyKey() lg.out(4, ' my key is ready') ident = my_id.buildDefaultIdentity(name=login, ip=externalIP, idurls=self.free_idurls) # localIP = bpio.ReadTextFile(settings.LocalIPFilename()) my_identity_xmlsrc = ident.serialize() newfilename = settings.LocalIdentityFilename() + '.new' bpio.WriteFile(newfilename, my_identity_xmlsrc) self.new_identity = ident lg.out( 4, ' wrote %d bytes to %s' % (len(my_identity_xmlsrc), newfilename))
def msg(self, msgid, arg=None): msg = self.MESSAGES.get(msgid, ['', 'black']) text = msg[0] % { 'login': bpio.ReadTextFile(settings.UserNameFilename()), 'externalip': misc.readExternalIP(), # bpio.ReadTextFile(settings.ExternalIPFilename()), 'localip': bpio.ReadTextFile(settings.LocalIPFilename()), } color = 'black' if len(msg) == 2: color = msg[1] return text, color
def msg(self, msgid, *args, **kwargs): msg = self.MESSAGES.get(msgid, ['', 'black']) text = msg[0] % { 'login': strng.to_bin( bpio.ReadTextFile(settings.UserNameFilename())), 'externalip': strng.to_bin(misc.readExternalIP()), 'localip': strng.to_bin( bpio.ReadTextFile(settings.LocalIPFilename())), } color = 'black' if len(msg) == 2: color = msg[1] return text, color
def doRequestServers(self, *args, **kwargs): """ Action method. """ login = bpio.ReadTextFile(settings.UserNameFilename()) def _cb(xmlsrc, idurl, host): if not xmlsrc: if self.preferred_servers and host in self.preferred_servers: if self.preferred_servers[0] == host: self.free_idurls.insert(0, idurl) else: self.free_idurls.insert(1, idurl) else: self.free_idurls.append(idurl) self.registrations.remove(idurl) self.automat('id-not-exist', idurl) else: lg.out(4, ' EXIST: %s' % idurl) self.registrations.remove(idurl) self.automat('id-exist', idurl) def _eb(err, idurl, host): lg.out(4, ' NOT EXIST: %s' % idurl) if self.preferred_servers and host in self.preferred_servers: if self.preferred_servers[0] == host: self.free_idurls.insert(0, idurl) else: self.free_idurls.insert(1, idurl) else: self.free_idurls.append(idurl) self.registrations.remove(idurl) self.automat('id-not-exist', idurl) for host in self.good_servers: webport, tcpport = known_servers.by_host().get( host, (settings.IdentityWebPort(), settings.IdentityServerPort())) if webport == 80: webport = '' idurl = nameurl.UrlMake('http', strng.to_text(host), webport, login + '.xml') lg.out(4, ' %s' % idurl) d = net_misc.getPageTwisted(idurl, timeout=7) d.addCallback(_cb, idurl, host) d.addErrback(_eb, idurl, host) self.registrations.append(idurl) lg.out( 4, 'id_registrator.doRequestServers login=%s registrations=%d' % (login, len(self.registrations)))
def __init__(self): self.installer_state_to_page = { 'AT_STARTUP': self.renderSelectPage, 'WHAT_TO_DO?': self.renderSelectPage, 'INPUT_NAME': self.renderInputNamePage, 'REGISTER': self.renderRegisterNewUserPage, 'AUTHORIZED': self.renderRegisterNewUserPage, 'LOAD_KEY': self.renderLoadKeyPage, 'RECOVER': self.renderRestorePage, 'RESTORED': self.renderRestorePage, 'WIZARD': self.renderWizardPage, 'DONE': self.renderLastPage, } self.install_wizard_state_to_page = { 'READY': self.renderWizardStartPage, 'STORAGE': self.renderWizardStoragePage, 'CONTACTS': self.renderWizardContactsPage, 'LAST_PAGE': self.renderLastPage, 'DONE': self.renderLastPage, } self.data = { 'username': bpio.ReadTextFile(settings.UserNameFilename()).strip(), 'pksize': settings.DefaultPrivateKeySize(), 'needed': str(int(settings.DefaultNeededBytes() / (1024 * 1024))), 'donated': str(int(settings.DefaultDonatedBytes() / (1024 * 1024))), 'suppliers': str(settings.DefaultDesiredSuppliers()), 'customersdir': unicode(settings.getCustomersFilesDir()), 'localbackupsdir': unicode(settings.getLocalBackupsDir()), 'restoredir': unicode(settings.getRestoreDir()), 'idurl': '', 'keysrc': '', 'name': '', 'surname': '', 'nickname': '', } installer.A('init')
def doSaveName(self, arg): settings.setPrivateKeySize(arg['pksize']) bpio.WriteTextFile(settings.UserNameFilename(), arg['username'])
def doVerifyAndRestore(self, arg): global _WorkingKey lg.out(4, 'identity_restorer.doVerifyAndRestore') remote_identity_src = arg if os.path.isfile(settings.KeyFileName()): lg.out( 4, 'identity_restorer.doVerifyAndRestore will backup and remove ' + settings.KeyFileName()) bpio.backup_and_remove(settings.KeyFileName()) if os.path.isfile(settings.LocalIdentityFilename()): lg.out( 4, 'identity_restorer.doVerifyAndRestore will backup and remove ' + settings.LocalIdentityFilename()) bpio.backup_and_remove(settings.LocalIdentityFilename()) try: remote_ident = identity.identity(xmlsrc=remote_identity_src) local_ident = identity.identity(xmlsrc=remote_identity_src) except: # lg.exc() reactor.callLater(0.1, self.automat, 'restore-failed', ('remote identity have incorrect format', 'red')) return lg.out( 4, 'identity_restorer.doVerifyAndRestore checking remote identity') try: res = remote_ident.isCorrect() except: lg.exc() res = False if not res: lg.out( 4, 'identity_restorer.doVerifyAndRestore remote identity is not correct FAILED!!!!' ) reactor.callLater(0.1, self.automat, 'restore-failed', ('remote identity format is not correct', 'red')) return lg.out( 4, 'identity_restorer.doVerifyAndRestore validate remote identity') try: res = remote_ident.Valid() except: lg.exc() res = False if not res: lg.out( 4, 'identity_restorer.doVerifyAndRestore validate remote identity FAILED!!!!' ) reactor.callLater(0.1, self.automat, 'restore-failed', ('remote identity is not valid', 'red')) return key.ForgetMyKey() bpio.WriteFile(settings.KeyFileName(), _WorkingKey) try: key.InitMyKey() except: key.ForgetMyKey() # lg.exc() try: os.remove(settings.KeyFileName()) except: pass reactor.callLater(0.1, self.automat, 'restore-failed', ('private key is not valid', 'red')) return try: local_ident.sign() except: # lg.exc() reactor.callLater(0.1, self.automat, 'restore-failed', ('error while signing identity', 'red')) return if remote_ident.signature != local_ident.signature: reactor.callLater( 0.1, self.automat, 'restore-failed', ('signature did not match, key verification failed!', 'red')) return my_id.setLocalIdentity(local_ident) my_id.saveLocalIdentity() bpio.WriteFile(settings.UserNameFilename(), my_id.getIDName()) if os.path.isfile(settings.KeyFileName() + '.backup'): lg.out( 4, 'identity_restorer.doVerifyAndRestore will remove backup file for ' + settings.KeyFileName()) bpio.remove_backuped_file(settings.KeyFileName()) if os.path.isfile(settings.LocalIdentityFilename() + '.backup'): lg.out( 4, 'identity_restorer.doVerifyAndRestore will remove backup file for ' + settings.LocalIdentityFilename()) bpio.remove_backuped_file(settings.LocalIdentityFilename()) reactor.callLater(0.1, self.automat, 'restore-success')