diff --git a/daemon.py b/daemon.py index 43062572d..6b8c61a40 100644 --- a/daemon.py +++ b/daemon.py @@ -29,6 +29,8 @@ from webfinger import webfingerUpdate from mastoapiv1 import mastoApiV1Response from metadata import metaDataNodeInfo from metadata import metadataCustomEmoji +from enigma import getEnigmaPubKey +from enigma import setEnigmaPubKey from pgp import getEmailAddress from pgp import setEmailAddress from pgp import getPGPpubKey @@ -5379,6 +5381,18 @@ class PubServer(BaseHTTPRequestHandler): setCwtchAddress(actorJson, '') actorChanged = True + # change Enigma public key + currentEnigmaPubKey = getEnigmaPubKey(actorJson) + if fields.get('enigmapubkey'): + if fields['enigmapubkey'] != currentEnigmaPubKey: + setEnigmaPubKey(actorJson, + fields['enigmapubkey']) + actorChanged = True + else: + if currentEnigmaPubKey: + setEnigmaPubKey(actorJson, '') + actorChanged = True + # change PGP public key currentPGPpubKey = getPGPpubKey(actorJson) if fields.get('pgp'): @@ -7039,6 +7053,7 @@ class PubServer(BaseHTTPRequestHandler): isGroup = False donateUrl = None websiteUrl = None + EnigmaPubKey = None PGPpubKey = None PGPfingerprint = None xmppAddress = None @@ -7076,6 +7091,7 @@ class PubServer(BaseHTTPRequestHandler): jamiAddress = getJamiAddress(actorJson) cwtchAddress = getCwtchAddress(actorJson) emailAddress = getEmailAddress(actorJson) + EnigmaPubKey = getEnigmaPubKey(actorJson) PGPpubKey = getPGPpubKey(actorJson) PGPfingerprint = getPGPfingerprint(actorJson) if actorJson.get('alsoKnownAs'): @@ -7110,6 +7126,7 @@ class PubServer(BaseHTTPRequestHandler): ssbAddress, blogAddress, toxAddress, briarAddress, jamiAddress, cwtchAddress, + EnigmaPubKey, PGPpubKey, PGPfingerprint, emailAddress, self.server.dormantMonths, diff --git a/enigma.py b/enigma.py new file mode 100644 index 000000000..ee782719b --- /dev/null +++ b/enigma.py @@ -0,0 +1,74 @@ +__filename__ = "enigma.py" +__author__ = "Bob Mottram" +__license__ = "AGPL3+" +__version__ = "1.2.0" +__maintainer__ = "Bob Mottram" +__email__ = "bob@libreserver.org" +__status__ = "Production" +__module_group__ = "Profile Metadata" + + +def getEnigmaPubKey(actorJson: {}) -> str: + """Returns Enigma public key for the given actor + """ + if not actorJson.get('attachment'): + return '' + for propertyValue in actorJson['attachment']: + if not propertyValue.get('name'): + continue + if not propertyValue['name'].lower().startswith('enigma'): + continue + if not propertyValue.get('type'): + continue + if not propertyValue.get('value'): + continue + if propertyValue['type'] != 'PropertyValue': + continue + return propertyValue['value'] + return '' + + +def setEnigmaPubKey(actorJson: {}, enigmaPubKey: str) -> None: + """Sets a Enigma public key for the given actor + """ + removeKey = False + if not enigmaPubKey: + removeKey = True + + if not actorJson.get('attachment'): + actorJson['attachment'] = [] + + # remove any existing value + propertyFound = None + for propertyValue in actorJson['attachment']: + if not propertyValue.get('name'): + continue + if not propertyValue.get('type'): + continue + if not propertyValue['name'].lower().startswith('enigma'): + continue + propertyFound = propertyValue + break + if propertyFound: + actorJson['attachment'].remove(propertyValue) + if removeKey: + return + + for propertyValue in actorJson['attachment']: + if not propertyValue.get('name'): + continue + if not propertyValue.get('type'): + continue + if not propertyValue['name'].lower().startswith('enigma'): + continue + if propertyValue['type'] != 'PropertyValue': + continue + propertyValue['value'] = enigmaPubKey + return + + newenigmaPubKey = { + "name": "Enigma", + "type": "PropertyValue", + "value": enigmaPubKey + } + actorJson['attachment'].append(newenigmaPubKey) diff --git a/webapp_person_options.py b/webapp_person_options.py index 0cc572040..6c61c7daa 100644 --- a/webapp_person_options.py +++ b/webapp_person_options.py @@ -49,6 +49,7 @@ def htmlPersonOptions(defaultTimeline: str, briarAddress: str, jamiAddress: str, cwtchAddress: str, + EnigmaPubKey: str, PGPpubKey: str, PGPfingerprint: str, emailAddress: str, @@ -226,6 +227,9 @@ def htmlPersonOptions(defaultTimeline: str, if cwtchAddress: optionsStr += \ '
Cwtch: ' + removeHtml(cwtchAddress) + '
\n' + if EnigmaPubKey: + optionsStr += \ + 'Enigma: ' + removeHtml(EnigmaPubKey) + '
\n' if PGPfingerprint: optionsStr += 'PGP: ' + \
removeHtml(PGPfingerprint).replace('\n', '
') + '
Cwtch:
\n' + if EnigmaPubKey: + donateSection += \ + 'Enigma:
\n' if PGPfingerprint: donateSection += \ 'PGP: ' + \ @@ -1853,6 +1859,7 @@ def _htmlEditProfileContactInfo(nickname: str, cwtchAddress: str, PGPfingerprint: str, PGPpubKey: str, + EnigmaPubKey: str, translate: {}) -> str: """Contact Information section of edit profile screen """ @@ -1869,6 +1876,10 @@ def _htmlEditProfileContactInfo(nickname: str, editProfileForm += editTextField('Briar', 'briarAddress', briarAddress) editProfileForm += editTextField('Jami', 'jamiAddress', jamiAddress) editProfileForm += editTextField('Cwtch', 'cwtchAddress', cwtchAddress) + enigmaUrl = 'https://github.com/enigma-reloaded/enigma-reloaded' + editProfileForm += \ + editTextField('Enigma', + 'enigmapubkey', EnigmaPubKey) editProfileForm += editTextField(translate['PGP Fingerprint'], 'openpgp', PGPfingerprint) editProfileForm += \ @@ -2079,7 +2090,8 @@ def htmlEditProfile(cssCache: {}, translate: {}, baseDir: str, path: str, notifyLikes = notifyReactions = '' hideLikeButton = hideReactionButton = mediaInstanceStr = '' blogsInstanceStr = newsInstanceStr = movedTo = twitterStr = '' - bioStr = donateUrl = websiteUrl = emailAddress = PGPpubKey = '' + bioStr = donateUrl = websiteUrl = emailAddress = '' + PGPpubKey = EnigmaPubKey = '' PGPfingerprint = xmppAddress = matrixAddress = '' ssbAddress = blogAddress = toxAddress = jamiAddress = '' cwtchAddress = briarAddress = manuallyApprovesFollowers = '' @@ -2099,6 +2111,7 @@ def htmlEditProfile(cssCache: {}, translate: {}, baseDir: str, path: str, jamiAddress = getJamiAddress(actorJson) cwtchAddress = getCwtchAddress(actorJson) emailAddress = getEmailAddress(actorJson) + EnigmaPubKey = getEnigmaPubKey(actorJson) PGPpubKey = getPGPpubKey(actorJson) PGPfingerprint = getPGPfingerprint(actorJson) if actorJson.get('name'): @@ -2240,7 +2253,7 @@ def htmlEditProfile(cssCache: {}, translate: {}, baseDir: str, path: str, ssbAddress, toxAddress, briarAddress, jamiAddress, cwtchAddress, PGPfingerprint, - PGPpubKey, translate) + PGPpubKey, EnigmaPubKey, translate) # Customize images and banners editProfileForm += _htmlEditProfileBackground(newsInstance, translate)