mirror of https://gitlab.com/bashrc2/epicyon
Tidying detection of encrypted messages
parent
df0accd677
commit
c88bdf1cd9
|
@ -29,6 +29,7 @@ from announce import sendAnnounceViaServer
|
||||||
from pgp import pgpDecrypt
|
from pgp import pgpDecrypt
|
||||||
from pgp import hasLocalPGPkey
|
from pgp import hasLocalPGPkey
|
||||||
from pgp import pgpEncryptToActor
|
from pgp import pgpEncryptToActor
|
||||||
|
from pgp import isPGPEncrypted
|
||||||
|
|
||||||
|
|
||||||
def _waitForKeypress(timeout: int, debug: bool) -> str:
|
def _waitForKeypress(timeout: int, debug: bool) -> str:
|
||||||
|
@ -518,16 +519,16 @@ def runNotificationsClient(baseDir: str, proxyType: str, httpPrefix: str,
|
||||||
else:
|
else:
|
||||||
messageStr = speakerJson['say'] + '. ' + \
|
messageStr = speakerJson['say'] + '. ' + \
|
||||||
speakerJson['imageDescription']
|
speakerJson['imageDescription']
|
||||||
if speakerJson.get('id'):
|
encryptedMessage = False
|
||||||
|
if speakerJson.get('id') and \
|
||||||
|
isPGPEncrypted(messageStr):
|
||||||
|
encryptedMessage = True
|
||||||
messageStr = pgpDecrypt(messageStr,
|
messageStr = pgpDecrypt(messageStr,
|
||||||
speakerJson['id'])
|
speakerJson['id'])
|
||||||
|
|
||||||
content = messageStr
|
content = messageStr
|
||||||
if speakerJson.get('content'):
|
if speakerJson.get('content'):
|
||||||
if speakerJson.get('id'):
|
if not encryptedMessage:
|
||||||
content = pgpDecrypt(speakerJson['content'],
|
|
||||||
speakerJson['id'])
|
|
||||||
else:
|
|
||||||
content = speakerJson['content']
|
content = speakerJson['content']
|
||||||
|
|
||||||
# say the speaker's name
|
# say the speaker's name
|
||||||
|
|
35
pgp.py
35
pgp.py
|
@ -52,7 +52,7 @@ def getPGPpubKey(actorJson: {}) -> str:
|
||||||
continue
|
continue
|
||||||
if propertyValue['type'] != 'PropertyValue':
|
if propertyValue['type'] != 'PropertyValue':
|
||||||
continue
|
continue
|
||||||
if '--BEGIN PGP PUBLIC KEY' not in propertyValue['value']:
|
if not containsPGPPublicKey(propertyValue['value']):
|
||||||
continue
|
continue
|
||||||
return propertyValue['value']
|
return propertyValue['value']
|
||||||
return ''
|
return ''
|
||||||
|
@ -139,7 +139,7 @@ def setPGPpubKey(actorJson: {}, PGPpubKey: str) -> None:
|
||||||
if not PGPpubKey:
|
if not PGPpubKey:
|
||||||
removeKey = True
|
removeKey = True
|
||||||
else:
|
else:
|
||||||
if '--BEGIN PGP PUBLIC KEY' not in PGPpubKey:
|
if not containsPGPPublicKey(PGPpubKey):
|
||||||
removeKey = True
|
removeKey = True
|
||||||
if '<' in PGPpubKey:
|
if '<' in PGPpubKey:
|
||||||
removeKey = True
|
removeKey = True
|
||||||
|
@ -318,7 +318,7 @@ def _pgpEncrypt(content: str, recipientPubKey: str) -> str:
|
||||||
if not encryptResult:
|
if not encryptResult:
|
||||||
return None
|
return None
|
||||||
encryptResult = encryptResult.decode('utf-8')
|
encryptResult = encryptResult.decode('utf-8')
|
||||||
if '--BEGIN PGP MESSAGE--' not in encryptResult:
|
if not isPGPEncrypted(encryptResult):
|
||||||
return None
|
return None
|
||||||
return encryptResult
|
return encryptResult
|
||||||
|
|
||||||
|
@ -343,9 +343,8 @@ def _getPGPPublicKeyFromActor(handle: str, actorJson=None) -> str:
|
||||||
continue
|
continue
|
||||||
if not isinstance(tag['value'], str):
|
if not isinstance(tag['value'], str):
|
||||||
continue
|
continue
|
||||||
if '--BEGIN PGP PUBLIC KEY BLOCK--' in tag['value']:
|
if containsPGPPublicKey(tag['value']):
|
||||||
if '--END PGP PUBLIC KEY BLOCK--' in tag['value']:
|
return tag['value']
|
||||||
return tag['value']
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -370,17 +369,33 @@ def pgpEncryptToActor(content: str, toHandle: str) -> str:
|
||||||
return _pgpEncrypt(content, recipientPubKey)
|
return _pgpEncrypt(content, recipientPubKey)
|
||||||
|
|
||||||
|
|
||||||
|
def isPGPEncrypted(content: str) -> bool:
|
||||||
|
"""Returns true if the given content is PGP encrypted
|
||||||
|
"""
|
||||||
|
if '--BEGIN PGP MESSAGE--' in content:
|
||||||
|
if '--END PGP MESSAGE--' in content:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def containsPGPPublicKey(content: str) -> bool:
|
||||||
|
"""Returns true if the given content contains a PGP public key
|
||||||
|
"""
|
||||||
|
if '--BEGIN PGP PUBLIC KEY BLOCK--' in content:
|
||||||
|
if '--END PGP PUBLIC KEY BLOCK--' in content:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def pgpDecrypt(content: str, fromHandle: str) -> str:
|
def pgpDecrypt(content: str, fromHandle: str) -> str:
|
||||||
""" Encrypt using your default pgp key to the given recipient
|
""" Encrypt using your default pgp key to the given recipient
|
||||||
fromHandle can be a handle or actor url
|
fromHandle can be a handle or actor url
|
||||||
"""
|
"""
|
||||||
if '--BEGIN PGP MESSAGE--' not in content:
|
if not isPGPEncrypted(content):
|
||||||
return content
|
return content
|
||||||
|
|
||||||
# if the public key is also included within the message then import it
|
# if the public key is also included within the message then import it
|
||||||
startBlock = '--BEGIN PGP PUBLIC KEY BLOCK--'
|
if containsPGPPublicKey(content):
|
||||||
endBlock = '--END PGP PUBLIC KEY BLOCK--'
|
|
||||||
if startBlock in content and endBlock in content:
|
|
||||||
pubKey = extractPGPPublicKey(content)
|
pubKey = extractPGPPublicKey(content)
|
||||||
else:
|
else:
|
||||||
pubKey = _getPGPPublicKeyFromActor(content, fromHandle)
|
pubKey = _getPGPPublicKeyFromActor(content, fromHandle)
|
||||||
|
|
3
tests.py
3
tests.py
|
@ -103,6 +103,7 @@ from webapp_post import prepareHtmlPostNickname
|
||||||
from webapp_utils import markdownToHtml
|
from webapp_utils import markdownToHtml
|
||||||
from speaker import speakerReplaceLinks
|
from speaker import speakerReplaceLinks
|
||||||
from pgp import extractPGPPublicKey
|
from pgp import extractPGPPublicKey
|
||||||
|
from pgp import containsPGPPublicKey
|
||||||
|
|
||||||
testServerAliceRunning = False
|
testServerAliceRunning = False
|
||||||
testServerBobRunning = False
|
testServerBobRunning = False
|
||||||
|
@ -3439,6 +3440,8 @@ def testExtractPGPPublicKey():
|
||||||
'=gv5G\n' + \
|
'=gv5G\n' + \
|
||||||
'-----END PGP PUBLIC KEY BLOCK-----'
|
'-----END PGP PUBLIC KEY BLOCK-----'
|
||||||
testStr = "Some introduction\n\n" + pubKey + "\n\nSome message."
|
testStr = "Some introduction\n\n" + pubKey + "\n\nSome message."
|
||||||
|
assert containsPGPPublicKey(testStr)
|
||||||
|
assert not containsPGPPublicKey('String without a pgp key')
|
||||||
result = extractPGPPublicKey(testStr)
|
result = extractPGPPublicKey(testStr)
|
||||||
assert result
|
assert result
|
||||||
assert result == pubKey
|
assert result == pubKey
|
||||||
|
|
Loading…
Reference in New Issue