예제 #1
0
파일: bm.py 프로젝트: pinnaculum/galacteek
async def bmContactAdd(bmAddress: str,
                       fullname: str,
                       separator: str = '',
                       groupName: str = '',
                       did=None):
    from galacteek.services.net.bitmessage import bmAddressValid

    try:
        assert bmAddressValid(bmAddress) is True
        assert len(fullname) in range(1, 96)

        group = None
        if groupName:
            group = await BitMessageContactGroup.filter(name=groupName).first()
            if not group:
                group = BitMessageContactGroup(name=groupName)
                await group.save()

        contact = BitMessageContact(bmAddress=bmAddress,
                                    fullname=fullname,
                                    cSeparator=separator,
                                    did=did,
                                    group=group)
        await contact.save()
    except Exception as cerr:
        log.debug(f'Could not add BM contact {bmAddress}: {cerr}')
    else:
        return contact
예제 #2
0
    async def loadMailBoxes(self):
        for root, dirs, files in os.walk(str(self.mailBoxesPath)):
            for dir in dirs:
                bma = dir

                if not bmAddressValid(bma):
                    continue

                fp = Path(root).joinpath(bma)
                await self._cMailBox(bma, fp)

                log.debug(f'Loaded mailbox {dir}')
예제 #3
0
    async def createKey(self):
        """
        Create a BitMessage key via notbit-keygen
        """

        code, data = await shellExec('notbit-keygen')
        if data:
            key = data.strip()
            log.debug(f'Bitmessage key generate result: {key}')

            if bmAddressValid(key):
                log.debug(f'Generate bitmessage key {key}')
                return key
            else:
                log.debug(f'Invalid key: {key}')
        else:
            log.debug('Bitmessage key generatation: exec failed')
예제 #4
0
    async def onSend(self, *args):
        if not bmAddressValid(self.recipient):
            return await messageBoxAsync('Invalid recipient BM address')

        # curMailDir = self.messengerWidget.bmCurrentMailDir
        curMailDir = None

        result = await self.app.s.bmService.mailer.send(
            self.ui.msgFrom.currentText(),
            self.ui.msgTo.text(),
            self.ui.msgSubject.text(),
            self.messageBody,
            mailDir=curMailDir)

        if result is True:
            self.sendSuccess.emit(self.ui.msgTo.text())
        else:
            await messageBoxAsync('Send error !')
예제 #5
0
    async def watchMailDir(self):
        while True:
            await asyncio.sleep(cParentGet('mdirWatcher.sleepInterval'))

            log.debug(f'NotBit maildir ({self.clearMailDirPath}): reading')

            for key in self.clearMailDir.iterkeys():
                try:
                    message = self.clearMailDir[key]
                    recipient = message['To']
                    bmAddr, domain = recipient.split('@')
                    assert domain == 'bitmessage'
                    assert bmAddressValid(bmAddr)
                except email.errors.MessageParseError as err:
                    log.debug(f'Error parsing message {key}: {err}')
                    continue
                except Exception as err:
                    log.debug(f'Unknown error parsing message {key}: {err}')
                    continue
                else:
                    # Check if we have a mailbox for this recipient
                    mbox = self.mailBoxGet(bmAddr)

                    if not mbox:
                        log.debug(f'No mailbox for {recipient}')
                        await asyncio.sleep(0.05)
                        continue

                    log.debug(f'Found mailbox for {recipient}')
                    if await mbox.store(message):
                        # Delete the message from notbit's maildir
                        log.debug('Transferred message to destination maildir')

                        self.clearMailDir.remove(key)
                    else:
                        log.debug('Error transferring message to maildir')

                    await asyncio.sleep(0.1)
예제 #6
0
 def onRecpChanged(self, text):
     if bmAddressValid(text) and 0:
         self.ui.msgSubject.setFocus(Qt.OtherFocusReason)