Private pinned posts are not really feasible with the existing authorized get requests

merge-requests/30/head
Bob Mottram 2021-11-09 18:59:36 +00:00
parent 8cbbefea9d
commit aa1a6b97c5
4 changed files with 5 additions and 111 deletions

View File

@ -73,7 +73,6 @@ from person import removeAccount
from person import canRemovePost from person import canRemovePost
from person import personSnooze from person import personSnooze
from person import personUnsnooze from person import personUnsnooze
from posts import hasPrivatePinnedPost
from posts import getOriginalPostFromAnnounceUrl from posts import getOriginalPostFromAnnounceUrl
from posts import savePostToBox from posts import savePostToBox
from posts import getInstanceActorKey from posts import getInstanceActorKey
@ -101,7 +100,6 @@ from inbox import runInboxQueue
from inbox import runInboxQueueWatchdog from inbox import runInboxQueueWatchdog
from inbox import savePostToInboxQueue from inbox import savePostToInboxQueue
from inbox import populateReplies from inbox import populateReplies
from follow import isFollowerOfPerson
from follow import followerApprovalActive from follow import followerApprovalActive
from follow import isFollowingActor from follow import isFollowingActor
from follow import getFollowingFeed from follow import getFollowingFeed
@ -656,7 +654,7 @@ class PubServer(BaseHTTPRequestHandler):
return False return False
return True return True
def _secureModeActor(self) -> str: def _signedGETkeyId(self) -> str:
"""Returns the actor from the signed GET keyId """Returns the actor from the signed GET keyId
""" """
signature = None signature = None
@ -691,7 +689,7 @@ class PubServer(BaseHTTPRequestHandler):
if not self.server.secureMode and not force: if not self.server.secureMode and not force:
return True return True
keyId = self._secureModeActor() keyId = self._signedGETkeyId()
if not keyId: if not keyId:
if self.server.debug: if self.server.debug:
print('AUTH: secure mode, ' + print('AUTH: secure mode, ' +
@ -12987,52 +12985,6 @@ class PubServer(BaseHTTPRequestHandler):
nickname = self.path.split('/users/')[1] nickname = self.path.split('/users/')[1]
if '/' in nickname: if '/' in nickname:
nickname = nickname.split('/')[0] nickname = nickname.split('/')[0]
showPinned = True
# is the pinned post for followers only?
if hasPrivatePinnedPost(self.server.baseDir,
self.server.httpPrefix,
nickname, self.server.domain,
self.server.domainFull,
self.server.systemLanguage):
followerActor = self._secureModeActor()
if not followerActor:
showPinned = False
else:
followerNickname = getNicknameFromActor(followerActor)
followerDomain, followerPort = \
getDomainFromActor(followerActor)
followerDomainFull = \
getFullDomain(followerDomain, followerPort)
if not isFollowerOfPerson(self.server.baseDir,
nickname, self.server.domain,
followerNickname,
followerDomainFull):
showPinned = False
else:
# does their GET signature verify?
if not self._secureMode(True):
# GET request signature failed
showPinned = False
if not showPinned:
# follower check failed, so just return an empty collection
postContext = getIndividualPostContext()
actor = \
self.server.httpPrefix + '://' + \
self.server.domainFull + '/users/' + nickname
emptyCollectionJson = {
'@context': postContext,
'id': actor + '/collections/featured',
'orderedItems': [],
'totalItems': 0,
'type': 'OrderedCollection'
}
msg = json.dumps(emptyCollectionJson,
ensure_ascii=False).encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen, None, callingDomain, False)
self._write(msg)
return
# return the featured posts collection # return the featured posts collection
self._getFeaturedCollection(callingDomain, self._getFeaturedCollection(callingDomain,
self.server.baseDir, self.server.baseDir,
@ -15795,16 +15747,6 @@ class PubServer(BaseHTTPRequestHandler):
else: else:
return -1 return -1
elif postType == 'newfollowers': elif postType == 'newfollowers':
if not fields.get('pinToProfile'):
pinToProfile = False
else:
pinToProfile = True
# is the post message empty?
if not fields['message']:
# remove the pinned content from profile screen
undoPinnedPost(self.server.baseDir,
nickname, self.server.domain)
return 1
city = getSpoofedCity(self.server.city, city = getSpoofedCity(self.server.city,
self.server.baseDir, self.server.baseDir,
nickname, nickname,
@ -15844,15 +15786,6 @@ class PubServer(BaseHTTPRequestHandler):
if messageJson: if messageJson:
if fields['schedulePost']: if fields['schedulePost']:
return 1 return 1
if pinToProfile:
contentStr = \
getBaseContentFromPost(messageJson,
self.server.systemLanguage)
followersOnly = True
pinPost(self.server.baseDir,
nickname, self.server.domain, contentStr,
followersOnly)
return 1
if self._postToOutbox(messageJson, if self._postToOutbox(messageJson,
self.server.projectVersion, self.server.projectVersion,
nickname): nickname):

View File

@ -1570,18 +1570,6 @@ def pinPost(baseDir: str, nickname: str, domain: str,
with open(pinnedFilename, 'w+') as pinFile: with open(pinnedFilename, 'w+') as pinFile:
pinFile.write(pinnedContent) pinFile.write(pinnedContent)
privatePinnedFilename = accountDir + '/pinToProfile.private'
if followersOnly:
with open(privatePinnedFilename, 'w+') as pinFile:
pinFile.write('\n')
else:
if os.path.isfile(privatePinnedFilename):
try:
os.remove(privatePinnedFilename)
except BaseException:
print('EX: pinPost unable to delete private ' +
privatePinnedFilename)
def undoPinnedPost(baseDir: str, nickname: str, domain: str) -> None: def undoPinnedPost(baseDir: str, nickname: str, domain: str) -> None:
"""Removes pinned content for then given account """Removes pinned content for then given account
@ -1594,14 +1582,6 @@ def undoPinnedPost(baseDir: str, nickname: str, domain: str) -> None:
except BaseException: except BaseException:
print('EX: undoPinnedPost unable to delete ' + pinnedFilename) print('EX: undoPinnedPost unable to delete ' + pinnedFilename)
privatePinnedFilename = accountDir + '/pinToProfile.private'
if os.path.isfile(privatePinnedFilename):
try:
os.remove(privatePinnedFilename)
except BaseException:
print('EX: undoPinnedPost unable to delete private ' +
privatePinnedFilename)
def getPinnedPostAsJson(baseDir: str, httpPrefix: str, def getPinnedPostAsJson(baseDir: str, httpPrefix: str,
nickname: str, domain: str, nickname: str, domain: str,
@ -1667,22 +1647,6 @@ def jsonPinPost(baseDir: str, httpPrefix: str,
} }
def hasPrivatePinnedPost(baseDir: str, httpPrefix: str,
nickname: str, domain: str,
domainFull: str, systemLanguage: str) -> bool:
"""Whether the given account has a private pinned post
"""
pinnedPostJson = \
getPinnedPostAsJson(baseDir, httpPrefix,
nickname, domain,
domainFull, systemLanguage)
if not pinnedPostJson:
return False
if not isPublicPost(pinnedPostJson):
return True
return False
def regenerateIndexForBox(baseDir: str, def regenerateIndexForBox(baseDir: str,
nickname: str, domain: str, boxName: str) -> None: nickname: str, domain: str, boxName: str) -> None:
"""Generates an index for the given box if it doesn't exist """Generates an index for the given box if it doesn't exist

View File

@ -575,8 +575,7 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {},
'<input type="hidden" name="commentsEnabled" ' + \ '<input type="hidden" name="commentsEnabled" ' + \
'value="true">\n' 'value="true">\n'
if endpoint == 'newpost' or \ if endpoint == 'newpost':
endpoint == 'newfollowers':
dateAndLocation += \ dateAndLocation += \
'<p><input type="checkbox" class="profilecheckbox" ' + \ '<p><input type="checkbox" class="profilecheckbox" ' + \
'name="pinToProfile"><label class="labels"> ' + \ 'name="pinToProfile"><label class="labels"> ' + \

View File

@ -811,10 +811,8 @@ def htmlProfile(signingPrivateKeyPem: str,
# get pinned post content # get pinned post content
accountDir = acctDir(baseDir, nickname, domain) accountDir = acctDir(baseDir, nickname, domain)
pinnedFilename = accountDir + '/pinToProfile.txt' pinnedFilename = accountDir + '/pinToProfile.txt'
privatePinnedFilename = accountDir + '/pinToProfile.private'
pinnedContent = None pinnedContent = None
if os.path.isfile(pinnedFilename): if os.path.isfile(pinnedFilename):
if not os.path.isfile(privatePinnedFilename):
with open(pinnedFilename, 'r') as pinFile: with open(pinnedFilename, 'r') as pinFile:
pinnedContent = pinFile.read() pinnedContent = pinFile.read()