def __init__(self, router, endpoint): self.router = router self.endpoint = endpoint self.keys = router.keys self.maildir = 'spool/' + encode(endpoint.public.bytes) self.addressBook = YamlMap('config/dustmail-addressbook.yaml') self.done = Event() self.commandDone = Event() self.book = YamlMap('config/dustmail-addressbook.yaml') dustmailConfig = YamlMap('config/dustmail-config.yaml') try: destAddress = dustmailConfig['tracker'] except: entry = self.addInvite() destAddress = entry['tracker'] dustmailConfig['tracker'] = destAddress dest, outport, v6 = decodeAddress(destAddress) host = getPublicIP(v6) inport = dustmailConfig['port'] invite = self.keys.generateInvite(inport, v6=v6)
def __init__(self, router, endpoint): self.router = router self.endpoint = endpoint self.keys = router.keys self.maildir = 'spool/' + encode(endpoint.public.bytes) self.addressBook = YamlMap('config/dustmail-addressbook.yaml') self.done = Event() self.commandDone = Event() self.book = YamlMap('config/dustmail-addressbook.yaml') dustmailConfig = YamlMap('config/dustmail-config.yaml') try: destAddress = dustmailConfig['tracker'] except: entry = self.addInvite() destAddress = entry['tracker'] dustmailConfig['tracker'] = destAddress dest, outport, v6 = decodeAddress(destAddress) print('Registering with tracker...') self.tracker = TrackerClient(self.router, addr=(dest, outport)) host = getPublicIP(v6) inport = dustmailConfig['port'] self.tracker.putPeerForEndpoint(encode(self.endpoint.public.bytes), [ encode(self.endpoint.public.bytes), encodeAddress((host, inport)) ]) invite = self.keys.generateInvite(inport, v6=v6) self.tracker.putInviteForPeer(encodeAddress((host, inport)), encode(invite.message)) self.trackback = self.router.getService('trackback')
def sendMessage(self, message): print('sendMessage ' + str(message)) onion = OnionPacket() onion.decodeOnionPacket(self.router.keys.getKeypair(), decode(message)) frm = encode(onion.sender) to = encode(onion.receiver) print('frm: ' + str(frm)) print('to: ' + str(to)) if not os.path.exists(self.maildir + '/' + to): os.mkdir(self.maildir + '/' + to) filename = None while not filename or os.path.exists(filename): filename = self.makeName(frm, to) f = open(filename, 'w') f.write(message) f.close() notifyPrefs = YamlMap('config/dustmail-notify.yaml') try: mailAddr = notifyPrefs[to] addressBook = YamlMap('config/dustmail-addressbook.yaml') frmName = self.nameForPubkey(addressBook, frm) if not frmName: frmName = frm notifier = Notifier('*****@*****.**') notifier.notify( mailAddr, 'New DustMail Message', "You have a DustMail message from " + frmName + ".") except KeyError: print('No notification set')
def gotInvite(self, invite): time.sleep(1) print() ps = input("Print, Save, or Email [P/s/e]? ") passwd = input("Encrypt invite with password: "******"Save invite to filename: ").strip() if filename != '': f = open(filename, 'wb') f.write(packet.packet) f.close() elif ps == 'e': frm = input("Your email: ") to = input("Recipient email: ") name = input("Your name on DustMail: ") body = """ You have been invited to communicate with %s via DustMail. Use the following invite code: %s """ % (name, encode(packet.packet)) emailConfig = YamlMap('config/emailServer.yaml') try: smtpHost = emailConfig['smtpHost'] except: smtpHost = input("SMTP Host: ") emailConfig['smtpHost'] = smtpHost notifier = Notifier(frm) notifier.notify(to, 'DustMail Invite', body) else: print() print(encode(packet.packet)) print() self.commandDone.set()
def __init__(self, keys): self.keys=keys self.state=YamlMap('config/trackback.yaml') self.callbacks={}
keys.loadKeypair('config/id.yaml') except: print('Generating server keypair...') keys.createKeypair() keys.saveKeypair('config/id.yaml') keys.loadKnownHosts('config/knownhosts.yaml') keys.loadIncomingInvites('config/incoming_invites.ip') keys.loadOutgoingInvites('config/outgoing_invites.ip') router = PacketRouter(v6, inport, keys, passwd) router.connect(trackerAddr[0], trackerAddr[1]) tracker = TrackerClient(router) router.start() keypair = keys.getKeypair() pubkey = keypair.public invite = keys.generateInvite(inport, v6=v6) tracker.putInviteForPeer(encodeAddress((host, inport)), encode(invite.message)) endpoints = YamlMap('config/endpoints.yaml') for key in endpoints.values(): tracker.putPeerForEndpoint( key, [encode(pubkey.bytes), encodeAddress((host, inport))]) wait()
def __init__(self, router): self.state = YamlMap('config/trackback.yaml')
print('a: add invite') print('i: make invite') print('s: send message') self.commandDone.set() if __name__ == '__main__': if len(sys.argv) > 1 and sys.argv[1] == '-d': passwd = sys.argv[2] headless = True else: passwd = input("Password: ") headless = False dustmailConfig = YamlMap('config/dustmail-config.yaml') try: inport = int(dustmailConfig['port']) except: inport = randomPort() dustmailConfig['port'] = inport print('Loading keys...') keys = KeyManager() keys.setInvitePassword(passwd) keys.loadKnownHosts('config/knownhosts.yaml') try: keys.loadKeypair('config/id.yaml') except:
def __init__(self, router, addr): print('new TrackerHandler ' + str(addr)) self.router = router self.addr = addr self.state = YamlMap('config/tracker.yaml')
keys.loadOutgoingInvites('config/outgoing_invites.ip') endpoint = keys.loadEndpoint(os.path.expanduser('~/.dust/endpoint.yaml')) pf = input("Load invite from Paste or File [P/f]? ") if pf == 'f': filename = input("Load invite from filename: ").strip() f = open(filename, 'rb') data = f.read() f.close() else: data = decode(input("Past invite: ")) passwd = input("Decrypt invite with password: "******"pubkey: " + encode(packet.pubkey)) print("invite: " + encode(packet.invite)) invite = InviteMessage() invite.decodeInviteMessage(packet.invite) keys.addInvite(invite) name = input("Name for this endpoint: ") book = YamlMap('config/dustmail-addressbook.yaml') try: entry = book[name] except: entry = {} entry['pubkey'] = encode(packet.pubkey) entry['tracker'] = encodeAddress((invite.ip, invite.port)) book[name] = entry