def connect(self, name, rid: Optional[int] = None) -> Optional[int]: """ Connect to the node specified by name. :param name: name of the node to connect to :type name: str or (HA, tuple) :return: the uid of the remote estate, or None if a connect is not attempted """ # if not self.isKeySharing: # logger.debug("{} skipping join with {} because not key sharing". # format(self, name)) # return None if rid: remote = self.remotes[rid] else: if isinstance(name, (HA, tuple)): node_ha = name elif isinstance(name, str): node_ha = self.registry[name] else: raise AttributeError() remote = RemoteEstate(stack=self, ha=node_ha) self.addRemote(remote) # updates the store time so the join timer is accurate self.updateStamp() self.join(uid=remote.uid, cascade=True, timeout=30) logger.info("{} looking for {} at {}:{}".format( self, name or remote.name, *remote.ha), extra={"cli": "PLAIN"}) return remote.uid
def action(self): self.stats_req.value = deque() minionStack = self.road_stack.value # Create Master Stack self.store.stamp = 0.0 masterStack = RoadStack(store=self.store, name='master', ha=('', raeting.RAET_PORT), role='master', main=True, cleanremote=True, period=3.0, offset=0.5) self.event_stack.value = masterStack minionRemoteMaster = RemoteEstate(stack=minionStack, fuid=0, sid=0, ha=masterStack.local.ha) minionStack.addRemote(minionRemoteMaster) # Make life easier masterStack.keep.auto = raeting.AutoMode.always.value minionStack.keep.auto = raeting.AutoMode.always.value minionStack.join(minionRemoteMaster.uid) serviceRoads([minionStack, masterStack]) minionStack.allow(minionRemoteMaster.uid) serviceRoads([minionStack, masterStack])
def testPromiscuousConnection(tdir, keysAndNames): # Simulating node to client connection alphaSighex, alphaPrikey, alphaVerhex, alphaPubkey, alphaName, betaSighex, \ betaPrikey, betaVerhex, betaPubkey, betaName = keysAndNames alpha = RoadStack(name=alphaName, ha=genHa(), sigkey=alphaSighex, prikey=hexlify(alphaPrikey), auto=AutoMode.always, basedirpath=tdir) beta = RoadStack(name=betaName, ha=genHa(), main=True, sigkey=betaSighex, prikey=hexlify(betaPrikey), auto=AutoMode.always, basedirpath=tdir) try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.join(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def testRaetPreSharedKeysPromiscous(tdir): alphaSigner = NaclSigner() betaSigner = NaclSigner() logger.debug("Alpha's verkey {}".format(alphaSigner.verhex)) logger.debug("Beta's verkey {}".format(betaSigner.verhex)) alpha = RoadStack(name='alpha', ha=genHa(), sigkey=alphaSigner.keyhex, auto=AutoMode.always, basedirpath=tdir) beta = RoadStack(name='beta', ha=genHa(), sigkey=betaSigner.keyhex, main=True, auto=AutoMode.always, basedirpath=tdir) try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha, verkey=betaSigner.verhex) alpha.addRemote(betaRemote) alpha.allow(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def action(self, **kwa): ''' Join with all masters ''' stack = self.stack.value if stack and isinstance(stack, RoadStack): # minion should default refresh = (self.opts.value.get('raet_clear_remotes', True) or not stack.remotes) if refresh: for remote in stack.remotes.values(): stack.removeRemote(remote, clear=True) for master in self.masters: mha = master['external'] stack.addRemote( RemoteEstate( stack=stack, fuid=0, # vacuous join sid=0, # always 0 for join ha=mha)) # stack.join(uid=stack.remotes.values()[0].uid, timeout=0.0) for remote in stack.remotes.values(): stack.join(uid=remote.uid, timeout=0.0)
def connectTo(self, ha): remote = self.findInRemotesByHA(ha) if not remote: remote = RemoteEstate(stack=self, ha=ha) self.addRemote(remote) # updates the store time so the join timer is accurate self.updateStamp() self.join(uid=remote.uid, cascade=True, timeout=30)
def testRaetPreSharedKeysNonPromiscous(tdir): alphaSigner = SimpleSigner() betaSigner = SimpleSigner() alphaPrivateer = Privateer() betaPrivateer = Privateer() logger.debug("Alpha's verkey {}".format(alphaSigner.naclSigner.verhex)) logger.debug("Beta's verkey {}".format(betaSigner.naclSigner.verhex)) alpha = RoadStack(name='alpha', ha=genHa(), sigkey=alphaSigner.naclSigner.keyhex, prikey=alphaPrivateer.keyhex, auto=AutoMode.never, basedirpath=tdir) beta = RoadStack(name='beta', ha=genHa(), sigkey=betaSigner.naclSigner.keyhex, prikey=betaPrivateer.keyhex, main=True, auto=AutoMode.never, basedirpath=tdir) alpha.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": betaSigner.naclSigner.verhex, "pubhex": betaPrivateer.pubhex }, "beta") beta.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": alphaSigner.naclSigner.verhex, "pubhex": alphaPrivateer.pubhex }, "alpha") try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.allow(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def action(self, **kwa): ''' Receive any udp packets on server socket and put in rxes Send any packets in txes ''' stack = self.stack.value if stack and isinstance(stack, RoadStack): if not stack.remotes: stack.addRemote(RemoteEstate(stack=stack, fuid=0, # vacuous join sid=0, # always 0 for join ha=self.mha)) stack.join(uid=stack.remotes.values()[0].uid, timeout=0.0)
def testNonPromiscousConnectionWithOneKey(tdir, keysAndNames): # Simulating node to node connection alphaSighex, alphaPrikey, alphaVerhex, alphaPubkey, alphaName, betaSighex,\ betaPrikey, betaVerhex, betaPubkey, betaName = keysAndNames alpha = RoadStack(name=alphaName, ha=genHa(), sigkey=alphaSighex, prikey=hexlify(alphaPrikey), auto=AutoMode.never, basedirpath=tdir) beta = RoadStack(name=betaName, ha=genHa(), sigkey=betaSighex, prikey=hexlify(betaPrikey), main=True, auto=AutoMode.never, basedirpath=tdir) alpha.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": betaVerhex, "pubhex": hexlify(betaPubkey) }, betaName) beta.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": alphaVerhex, "pubhex": hexlify(alphaPubkey) }, alphaName) try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.allow(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def action(self, **kwa): ''' Join with all masters ''' stack = self.stack.value if stack and isinstance(stack, RoadStack): if not stack.remotes: for master in self.masters: mha = master['external'] stack.addRemote( RemoteEstate( stack=stack, fuid=0, # vacuous join sid=0, # always 0 for join ha=mha)) # stack.join(uid=stack.remotes.values()[0].uid, timeout=0.0) for remote in stack.remotes.values(): stack.join(uid=remote.uid, timeout=0.0)
def testPromiscuousConnection(tdir): alpha = RoadStack(name='alpha', ha=genHa(), auto=AutoMode.always, basedirpath=tdir) beta = RoadStack(name='beta', ha=genHa(), main=True, auto=AutoMode.always, basedirpath=tdir) try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.join(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def _doConnectByHA(self, ha, name=None): remote = RemoteEstate(stack=self.raetStack, ha=ha) self.raetStack.addRemote(remote) return self._doConnectRemote(remote, name)
def testConnectionWithHaChanged(tdir): console = getConsole() console.reinit(verbosity=console.Wordage.verbose) alphaSigner = SimpleSigner() betaSigner = SimpleSigner() alphaPrivateer = Privateer() betaPrivateer = Privateer() logger.debug("Alpha's verkey {}".format(alphaSigner.naclSigner.verhex)) logger.debug("Beta's verkey {}".format(betaSigner.naclSigner.verhex)) alpha = None def setupAlpha(ha): nonlocal alpha alpha = RoadStack(name='alpha', ha=ha, sigkey=alphaSigner.naclSigner.keyhex, prikey=alphaPrivateer.keyhex, auto=AutoMode.never, basedirpath=tdir) alpha.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": betaSigner.naclSigner.verhex, "pubhex": betaPrivateer.pubhex }, "beta") oldHa = genHa() setupAlpha(oldHa) beta = RoadStack(name='beta', ha=genHa(), sigkey=betaSigner.naclSigner.keyhex, prikey=betaPrivateer.keyhex, main=True, auto=AutoMode.never, basedirpath=tdir, mutable=True) beta.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": alphaSigner.naclSigner.verhex, "pubhex": alphaPrivateer.pubhex }, "alpha") try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.join(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) logger.debug("beta knows alpha as {}".format( getRemote(beta, "alpha").ha)) cleanup(alpha) newHa = genHa() logger.debug("alpha changing ha to {}".format(newHa)) setupAlpha(newHa) betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.join(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) logger.debug("beta knows alpha as {}".format( getRemote(beta, "alpha").ha)) finally: cleanup(alpha, beta)