forked from indymedia/epicyon
Update webfinger aliases when profile is saved
parent
a604973716
commit
e8aeba7b4c
|
@ -20,6 +20,7 @@ from webfinger import parseHandle
|
||||||
from webfinger import webfingerMeta
|
from webfinger import webfingerMeta
|
||||||
from webfinger import webfingerNodeInfo
|
from webfinger import webfingerNodeInfo
|
||||||
from webfinger import webfingerLookup
|
from webfinger import webfingerLookup
|
||||||
|
from webfinger import webfingerUpdate
|
||||||
from metadata import metaDataInstance
|
from metadata import metaDataInstance
|
||||||
from metadata import metaDataNodeInfo
|
from metadata import metaDataNodeInfo
|
||||||
from pgp import getEmailAddress
|
from pgp import getEmailAddress
|
||||||
|
@ -5726,6 +5727,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if actorChanged:
|
if actorChanged:
|
||||||
randomizeActorImages(actorJson)
|
randomizeActorImages(actorJson)
|
||||||
saveJson(actorJson, actorFilename)
|
saveJson(actorJson, actorFilename)
|
||||||
|
webfingerUpdate(self.server.baseDir,
|
||||||
|
nickname,
|
||||||
|
self.server.domain,
|
||||||
|
self.server.onionDomain,
|
||||||
|
self.server.cachedWebfingers)
|
||||||
# also copy to the actors cache and
|
# also copy to the actors cache and
|
||||||
# personCache in memory
|
# personCache in memory
|
||||||
storePersonInCache(self.server.baseDir,
|
storePersonInCache(self.server.baseDir,
|
||||||
|
|
82
webfinger.py
82
webfinger.py
|
@ -267,3 +267,85 @@ def webfingerLookup(path: str, baseDir: str,
|
||||||
if not wfJson:
|
if not wfJson:
|
||||||
wfJson = {"nickname": "unknown"}
|
wfJson = {"nickname": "unknown"}
|
||||||
return wfJson
|
return wfJson
|
||||||
|
|
||||||
|
|
||||||
|
def webfingerUpdateFromProfile(wfJson: {}, actorJson: {}) -> bool:
|
||||||
|
"""Updates webfinger Email/blog/xmpp links from profile
|
||||||
|
Returns true if one or more tags has been changed
|
||||||
|
"""
|
||||||
|
if not actorJson.get('attachment'):
|
||||||
|
return False
|
||||||
|
|
||||||
|
changed = False
|
||||||
|
|
||||||
|
webfingerPropertyName = {
|
||||||
|
"xmpp": "xmpp",
|
||||||
|
"email": "mailto",
|
||||||
|
"ssb": "ssb",
|
||||||
|
"tox": "toxId"
|
||||||
|
}
|
||||||
|
|
||||||
|
for propertyValue in actorJson['attachment']:
|
||||||
|
if not propertyValue.get('name'):
|
||||||
|
continue
|
||||||
|
propertyName = propertyValue['name'].lower()
|
||||||
|
if not (propertyName.startswith('ssb') or
|
||||||
|
propertyName.startswith('xmpp') or
|
||||||
|
propertyName.startswith('email') or
|
||||||
|
propertyName.startswith('tox')):
|
||||||
|
continue
|
||||||
|
if not propertyValue.get('type'):
|
||||||
|
continue
|
||||||
|
if not propertyValue.get('value'):
|
||||||
|
continue
|
||||||
|
if propertyValue['type'] != 'PropertyValue':
|
||||||
|
continue
|
||||||
|
|
||||||
|
newValue = propertyValue['value'].strip()
|
||||||
|
aliasIndex = 0
|
||||||
|
found = False
|
||||||
|
for alias in wfJson['aliases']:
|
||||||
|
if alias.startswith(webfingerPropertyName[propertyName] + ':'):
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
aliasIndex += 1
|
||||||
|
newAlias = webfingerPropertyName[propertyName] + ':' + newValue
|
||||||
|
if found:
|
||||||
|
if wfJson['aliases'][aliasIndex] != newAlias:
|
||||||
|
changed = True
|
||||||
|
wfJson['aliases'][aliasIndex] = newAlias
|
||||||
|
else:
|
||||||
|
wfJson['aliases'].append(newAlias)
|
||||||
|
changed = True
|
||||||
|
return changed
|
||||||
|
|
||||||
|
|
||||||
|
def webfingerUpdate(baseDir: str, nickname: str, domain: str,
|
||||||
|
onionDomain: str,
|
||||||
|
cachedWebfingers: {}) -> None:
|
||||||
|
handle = nickname + '@' + domain
|
||||||
|
wfSubdir = '/wfendpoints'
|
||||||
|
if not os.path.isdir(baseDir + wfSubdir):
|
||||||
|
return
|
||||||
|
|
||||||
|
filename = baseDir + wfSubdir + '/' + handle.lower() + '.json'
|
||||||
|
onionify = False
|
||||||
|
if onionDomain:
|
||||||
|
if onionDomain in handle:
|
||||||
|
handle = handle.replace(onionDomain, domain)
|
||||||
|
onionify = True
|
||||||
|
if not onionify:
|
||||||
|
wfJson = loadJson(filename)
|
||||||
|
else:
|
||||||
|
wfJson = loadJsonOnionify(filename, domain, onionDomain)
|
||||||
|
if not wfJson:
|
||||||
|
return
|
||||||
|
|
||||||
|
actorFilename = baseDir + '/accounts/' + handle.lower() + '.json'
|
||||||
|
actorJson = loadJson(actorFilename)
|
||||||
|
if not actorJson:
|
||||||
|
return
|
||||||
|
|
||||||
|
if webfingerUpdateFromProfile(wfJson, actorJson):
|
||||||
|
if saveJson(wfJson, filename):
|
||||||
|
cachedWebfingers[handle] = wfJson
|
||||||
|
|
|
@ -79,7 +79,7 @@ def getBlogAddress(actorJson: {}) -> str:
|
||||||
for propertyValue in actorJson['attachment']:
|
for propertyValue in actorJson['attachment']:
|
||||||
if not propertyValue.get('name'):
|
if not propertyValue.get('name'):
|
||||||
continue
|
continue
|
||||||
if not propertyValue['name'].lower().startswith('Blog'):
|
if not propertyValue['name'].lower().startswith('blog'):
|
||||||
continue
|
continue
|
||||||
if not propertyValue.get('type'):
|
if not propertyValue.get('type'):
|
||||||
continue
|
continue
|
||||||
|
@ -116,7 +116,7 @@ def setBlogAddress(actorJson: {}, blogAddress: str) -> None:
|
||||||
continue
|
continue
|
||||||
if not propertyValue.get('type'):
|
if not propertyValue.get('type'):
|
||||||
continue
|
continue
|
||||||
if not propertyValue['name'].lower().startswith('Blog'):
|
if not propertyValue['name'].lower().startswith('blog'):
|
||||||
continue
|
continue
|
||||||
propertyFound = propertyValue
|
propertyFound = propertyValue
|
||||||
break
|
break
|
||||||
|
|
Loading…
Reference in New Issue