Better handling of non-standard actor paths

merge-requests/8/head
Bob Mottram 2020-10-24 12:07:22 +01:00
parent 2ae4150ba1
commit de99260805
2 changed files with 45 additions and 13 deletions

View File

@ -278,7 +278,12 @@ def getNoOfFollows(baseDir: str, nickname: str, domain: str,
'.' in line and \ '.' in line and \
not line.startswith('http'): not line.startswith('http'):
ctr += 1 ctr += 1
elif line.startswith('http') and '/users/' in line: elif ((line.startswith('http') or
line.startswith('dat')) and
('/users/' in line or
'/profile/' in line or
'/accounts/' in line or
'/channel/' in line)):
ctr += 1 ctr += 1
return ctr return ctr
@ -487,7 +492,7 @@ def storeFollowRequest(baseDir: str,
nicknameToFollow: str, domainToFollow: str, port: int, nicknameToFollow: str, domainToFollow: str, port: int,
nickname: str, domain: str, fromPort: int, nickname: str, domain: str, fromPort: int,
followJson: {}, followJson: {},
debug: bool) -> bool: debug: bool, personUrl: str) -> bool:
"""Stores the follow request for later use """Stores the follow request for later use
""" """
accountsDir = baseDir + '/accounts/' + \ accountsDir = baseDir + '/accounts/' + \
@ -539,17 +544,23 @@ def storeFollowRequest(baseDir: str,
# add to a file which contains a list of requests # add to a file which contains a list of requests
approveFollowsFilename = accountsDir + '/followrequests.txt' approveFollowsFilename = accountsDir + '/followrequests.txt'
# store either nick@domain or the full person/actor url
approveHandleStored = approveHandle
if '/users/' not in personUrl:
approveHandleStored = personUrl
if os.path.isfile(approveFollowsFilename): if os.path.isfile(approveFollowsFilename):
if approveHandle not in open(approveFollowsFilename).read(): if approveHandle not in open(approveFollowsFilename).read():
with open(approveFollowsFilename, 'a+') as fp: with open(approveFollowsFilename, 'a+') as fp:
fp.write(approveHandle + '\n') fp.write(approveHandleStored + '\n')
else: else:
if debug: if debug:
print('DEBUG: ' + approveHandle + print('DEBUG: ' + approveHandleStored +
' is already awaiting approval') ' is already awaiting approval')
else: else:
with open(approveFollowsFilename, "w+") as fp: with open(approveFollowsFilename, "w+") as fp:
fp.write(approveHandle + '\n') fp.write(approveHandleStored + '\n')
# store the follow request in its own directory # store the follow request in its own directory
# We don't rely upon the inbox because items in there could expire # We don't rely upon the inbox because items in there could expire
@ -690,7 +701,7 @@ def receiveFollowRequest(session, baseDir: str, httpPrefix: str,
return storeFollowRequest(baseDir, return storeFollowRequest(baseDir,
nicknameToFollow, domainToFollow, port, nicknameToFollow, domainToFollow, port,
nickname, domain, fromPort, nickname, domain, fromPort,
messageJson, debug) messageJson, debug, messageJson['actor'])
else: else:
print('Follow request does not require approval') print('Follow request does not require approval')
# update the followers # update the followers

View File

@ -98,8 +98,29 @@ def manualApproveFollowRequest(session, baseDir: str,
print('Manual follow accept: follow requests file ' + print('Manual follow accept: follow requests file ' +
approveFollowsFilename + ' not found') approveFollowsFilename + ' not found')
return return
# is the handle in the requests file? # is the handle in the requests file?
if approveHandle not in open(approveFollowsFilename).read(): approveFollowsStr = ''
with open(approveFollowsFilename, 'r') as fpFollowers:
approveFollowsStr = fpFollowers.read()
exists = True
approveHandleFull = approveHandle
if approveHandle not in approveFollowsStr:
exists = False
elif '@' in approveHandle:
reqNick = approveHandle.split('@')[0]
reqDomain = approveHandle.split('@')[1].strip()
reqPrefix = httpPrefix + '://' + reqDomain
if reqPrefix + '/profile/' + reqNick not in approveFollowsStr:
exists = False
approveHandleFull = reqPrefix + '/profile/' + reqNick
elif reqPrefix + '/channel/' + reqNick not in approveFollowsStr:
exists = False
approveHandleFull = reqPrefix + '/channel/' + reqNick
elif reqPrefix + '/accounts/' + reqNick not in approveFollowsStr:
exists = False
approveHandleFull = reqPrefix + '/accounts/' + reqNick
if not exists:
print('Manual follow accept: ' + approveHandle + print('Manual follow accept: ' + approveHandle +
' not in requests file ' + approveFollowsFilename) ' not in requests file ' + approveFollowsFilename)
return return
@ -157,28 +178,28 @@ def manualApproveFollowRequest(session, baseDir: str,
# update the followers # update the followers
print('Manual follow accept: updating ' + followersFilename) print('Manual follow accept: updating ' + followersFilename)
if os.path.isfile(followersFilename): if os.path.isfile(followersFilename):
if approveHandle not in open(followersFilename).read(): if approveHandleFull not in open(followersFilename).read():
try: try:
with open(followersFilename, 'r+') as followersFile: with open(followersFilename, 'r+') as followersFile:
content = followersFile.read() content = followersFile.read()
followersFile.seek(0, 0) followersFile.seek(0, 0)
followersFile.write(approveHandle + '\n' + content) followersFile.write(approveHandleFull + '\n' + content)
except Exception as e: except Exception as e:
print('WARN: Manual follow accept. ' + print('WARN: Manual follow accept. ' +
'Failed to write entry to followers file ' + str(e)) 'Failed to write entry to followers file ' + str(e))
else: else:
print('WARN: Manual follow accept: ' + approveHandle + print('WARN: Manual follow accept: ' + approveHandleFull +
' already exists in ' + followersFilename) ' already exists in ' + followersFilename)
else: else:
print('Manual follow accept: first follower accepted for ' + print('Manual follow accept: first follower accepted for ' +
handle + ' is ' + approveHandle) handle + ' is ' + approveHandleFull)
followersFile = open(followersFilename, "w+") followersFile = open(followersFilename, "w+")
followersFile.write(approveHandle + '\n') followersFile.write(approveHandleFull + '\n')
followersFile.close() followersFile.close()
# only update the follow requests file if the follow is confirmed to be # only update the follow requests file if the follow is confirmed to be
# in followers.txt # in followers.txt
if approveHandle in open(followersFilename).read(): if approveHandleFull in open(followersFilename).read():
# mark this handle as approved for following # mark this handle as approved for following
approveFollowerHandle(accountDir, approveHandle) approveFollowerHandle(accountDir, approveHandle)
# update the follow requests with the handles not yet approved # update the follow requests with the handles not yet approved