mirror of https://gitlab.com/bashrc2/epicyon
Private pinned posts are not really feasible with the existing authorized get requests
parent
8cbbefea9d
commit
aa1a6b97c5
71
daemon.py
71
daemon.py
|
@ -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):
|
||||||
|
|
36
posts.py
36
posts.py
|
@ -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
|
||||||
|
|
|
@ -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"> ' + \
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue