forked from indymedia/epicyon
Switching to person options screen
parent
eefacc4171
commit
ab0ff77f0d
160
daemon.py
160
daemon.py
|
@ -76,6 +76,7 @@ from roles import setRole
|
|||
from roles import clearModeratorStatus
|
||||
from skills import outboxSkills
|
||||
from availability import outboxAvailability
|
||||
from webinterface import htmlUnblockConfirm
|
||||
from webinterface import htmlPersonOptions
|
||||
from webinterface import htmlIndividualPost
|
||||
from webinterface import htmlProfile
|
||||
|
@ -514,32 +515,24 @@ class PubServer(BaseHTTPRequestHandler):
|
|||
self.path=='/users/'+self.server.domain:
|
||||
self.path='/inbox'
|
||||
|
||||
# Unfollow a person from the web interface by selecting Unfollow on the dropdown
|
||||
if htmlGET and '/users/' in self.path and '?unfollow=' in self.path:
|
||||
followStr=self.path.split('?unfollow=')[1]
|
||||
originPathStr=self.path.split('?unfollow=')[0]
|
||||
if ';' in followStr:
|
||||
followActor=followStr.split(';')[0]
|
||||
followProfileUrl=followStr.split(';')[1]
|
||||
# show the confirm follow screen
|
||||
msg=htmlUnfollowConfirm(self.server.baseDir,originPathStr,followActor,followProfileUrl).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
self.wfile.write(msg)
|
||||
self.server.GETbusy=False
|
||||
return
|
||||
self._redirect_headers(originPathStr,cookie)
|
||||
self.server.GETbusy=False
|
||||
return
|
||||
|
||||
# show the person options screen with view/follow/block/report
|
||||
if htmlGET and '/users/' in self.path:
|
||||
if '?options=' in self.path:
|
||||
optionsStr=self.path.split('?options=')[1]
|
||||
originPathStr=self.path.split('?options=')[0]
|
||||
if ';' in optionsStr:
|
||||
optionsActor=optionsStr.split(';')[0]
|
||||
optionsProfileUrl=optionsStr.split(';')[1]
|
||||
msg=htmlPersonOptions(self.server.baseDir,originPathStr,optionsActor,optionsProfileUrl).encode()
|
||||
optionsList=optionsStr.split(';')
|
||||
optionsActor=optionsList[0]
|
||||
optionsProfileUrl=optionsList[1]
|
||||
optionsLink=None
|
||||
if len(optionsList)>2:
|
||||
optionsLink=optionsList[2]
|
||||
msg=htmlPersonOptions(self.server.baseDir, \
|
||||
self.server.domain, \
|
||||
originPathStr, \
|
||||
optionsActor, \
|
||||
optionsProfileUrl,
|
||||
optionsLink).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
self.wfile.write(msg)
|
||||
self.server.GETbusy=False
|
||||
|
@ -790,42 +783,6 @@ class PubServer(BaseHTTPRequestHandler):
|
|||
self.server.GETbusy=False
|
||||
return
|
||||
|
||||
# follow a person from the web interface by selecting Follow on the dropdown
|
||||
if '/users/' in self.path:
|
||||
if '?follow=' in self.path:
|
||||
followStr=self.path.split('?follow=')[1]
|
||||
originPathStr=self.path.split('?follow=')[0]
|
||||
if ';' in followStr:
|
||||
followActor=followStr.split(';')[0]
|
||||
followProfileUrl=followStr.split(';')[1]
|
||||
# show the confirm follow screen
|
||||
msg=htmlFollowConfirm(self.server.baseDir,originPathStr,followActor,followProfileUrl).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
self.wfile.write(msg)
|
||||
self.server.GETbusy=False
|
||||
return
|
||||
self._redirect_headers(originPathStr,cookie)
|
||||
self.server.GETbusy=False
|
||||
return
|
||||
|
||||
# block a person from the web interface by selecting Block on the dropdown
|
||||
if '/users/' in self.path:
|
||||
if '?block=' in self.path:
|
||||
blockStr=self.path.split('?block=')[1]
|
||||
originPathStr=self.path.split('?block=')[0]
|
||||
if ';' in blockStr:
|
||||
blockActor=blockStr.split(';')[0]
|
||||
blockProfileUrl=blockStr.split(';')[1]
|
||||
# show the confirm block screen
|
||||
msg=htmlBlockConfirm(self.server.baseDir,originPathStr,blockActor,blockProfileUrl).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
self.wfile.write(msg)
|
||||
self.server.GETbusy=False
|
||||
return
|
||||
self._redirect_headers(originPathStr,cookie)
|
||||
self.server.GETbusy=False
|
||||
return
|
||||
|
||||
# hashtag search
|
||||
if self.path.startswith('/tags/'):
|
||||
pageNumber=1
|
||||
|
@ -879,24 +836,6 @@ class PubServer(BaseHTTPRequestHandler):
|
|||
self.server.GETbusy=False
|
||||
return
|
||||
|
||||
# Unblock a person from the web interface by selecting Unblock on the dropdown
|
||||
if htmlGET and '/users/' in self.path:
|
||||
if '?unblock=' in self.path:
|
||||
blockStr=self.path.split('?unblock=')[1]
|
||||
originPathStr=self.path.split('?unblock=')[0]
|
||||
if ';' in blockStr:
|
||||
blockActor=blockStr.split(';')[0]
|
||||
blockProfileUrl=blockStr.split(';')[1]
|
||||
# show the confirm unblock screen
|
||||
msg=htmlUnblockConfirm(self.server.baseDir,originPathStr,blockActor,blockProfileUrl).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
self.wfile.write(msg)
|
||||
self.server.GETbusy=False
|
||||
return
|
||||
self._redirect_headers(originPathStr,cookie)
|
||||
self.server.GETbusy=False
|
||||
return
|
||||
|
||||
# announce/repeat from the web interface
|
||||
if htmlGET and '?repeat=' in self.path:
|
||||
repeatUrl=self.path.split('?repeat=')[1]
|
||||
|
@ -1117,7 +1056,6 @@ class PubServer(BaseHTTPRequestHandler):
|
|||
self.path.endswith('/newfollowers') or \
|
||||
self.path.endswith('/newdm') or \
|
||||
self.path.endswith('/newreport') or \
|
||||
'/newreport?' in self.path or \
|
||||
self.path.endswith('/newshare')):
|
||||
msg=htmlNewPost(self.server.baseDir,self.path,inReplyToUrl,replyToList).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
|
@ -2661,6 +2599,78 @@ class PubServer(BaseHTTPRequestHandler):
|
|||
self.server.POSTbusy=False
|
||||
return
|
||||
|
||||
# an option was chosen from person options screen
|
||||
# view/follow/block/report
|
||||
if authorized and self.path.endswith('/personoptions'):
|
||||
originPathStr=self.path.split('/personoptions')[0]
|
||||
chooserNickname=getNicknameFromActor(originPathStr)
|
||||
length = int(self.headers['Content-length'])
|
||||
optionsConfirmParams=self.rfile.read(length).decode('utf-8').replace('%3A',':').replace('%2F','/')
|
||||
optionsActor=optionsConfirmParams.split('actor=')[1]
|
||||
optionsAvatarUrl=optionsConfirmParams.split('avatarUrl=')[1]
|
||||
if '&' in optionsActor:
|
||||
optionsActor=optionsActor.split('&')[0]
|
||||
optionsNickname=getNicknameFromActor(optionsActor)
|
||||
optionsDomain,optionsPort=getDomainFromActor(optionsActor)
|
||||
optionsDomainFull=optionsDomain
|
||||
if optionsPort:
|
||||
if optionsPort!=80 and optionsPort!=443:
|
||||
if ':' not in optionsDomain:
|
||||
optionsDomainFull=optionsDomain+':'+str(optionsPort)
|
||||
if chooserNickname==optionsNickname and \
|
||||
optionsDomain==self.server.domain and \
|
||||
optionsPort==self.server.port:
|
||||
if self.server.debug:
|
||||
print('You cannot perform an option action on yourself')
|
||||
|
||||
if '&submitView=' in optionsConfirmParams:
|
||||
if self.server.debug:
|
||||
print('Viewing '+optionsActor)
|
||||
self._redirect_headers(optionsActor,cookie)
|
||||
self.server.POSTbusy=False
|
||||
return
|
||||
if '&submitBlock=' in optionsConfirmParams:
|
||||
if self.server.debug:
|
||||
print('Adding block by '+chooserNickname+' of '+optionsActor)
|
||||
addBlock(self.server.baseDir,chooserNickname,self.server.domain, \
|
||||
optionsNickname,optionsDomainFull)
|
||||
if '&submitUnblock=' in optionsConfirmParams:
|
||||
if self.server.debug:
|
||||
print('Unblocking '+optionsActor)
|
||||
msg=htmlUnblockConfirm(self.server.baseDir,originPathStr,optionsActor,optionsAvatarUrl).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
self.wfile.write(msg)
|
||||
self.server.POSTbusy=False
|
||||
return
|
||||
if '&submitFollow=' in optionsConfirmParams:
|
||||
if self.server.debug:
|
||||
print('Following '+optionsActor)
|
||||
msg=htmlFollowConfirm(self.server.baseDir,originPathStr,optionsActor,optionsAvatarUrl).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
self.wfile.write(msg)
|
||||
self.server.POSTbusy=False
|
||||
return
|
||||
if '&submitUnfollow=' in optionsConfirmParams:
|
||||
if self.server.debug:
|
||||
print('Unfollowing '+optionsActor)
|
||||
msg=htmlUnfollowConfirm(self.server.baseDir,originPathStr,optionsActor,optionsAvatarUrl).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
self.wfile.write(msg)
|
||||
self.server.POSTbusy=False
|
||||
return
|
||||
if '&submitReport=' in optionsConfirmParams:
|
||||
if self.server.debug:
|
||||
print('Reporting '+optionsActor)
|
||||
msg=htmlNewPost(self.server.baseDir,self.path,None,[]).encode()
|
||||
self._set_headers('text/html',len(msg),cookie)
|
||||
self.wfile.write(msg)
|
||||
self.server.POSTbusy=False
|
||||
return
|
||||
|
||||
self._redirect_headers(originPathStr,cookie)
|
||||
self.server.POSTbusy=False
|
||||
return
|
||||
|
||||
postState=self._receiveNewPost(authorized,'newpost')
|
||||
if postState!=0:
|
||||
nickname=self.path.split('/users/')[1]
|
||||
|
|
|
@ -1231,31 +1231,18 @@ def individualPostAsHtml(baseDir: str, \
|
|||
' <img src="'+avatarUrl+'" title="Show profile" alt="Avatar"'+avatarPosition+'/></a>'
|
||||
|
||||
if showAvatarDropdown and fullDomain+'/users/'+nickname not in postJsonObject['actor']:
|
||||
# if not following then show "Follow" in the dropdown
|
||||
followUnfollowStr='<a href="/users/'+nickname+'?follow='+postJsonObject['actor']+';'+avatarUrl+'">Follow</a>'
|
||||
# if following then show "Unfollow" in the dropdown
|
||||
if isFollowingActor(baseDir,nickname,domain,postJsonObject['actor']):
|
||||
followUnfollowStr='<a href="/users/'+nickname+'?unfollow='+postJsonObject['actor']+';'+avatarUrl+'">Unfollow</a>'
|
||||
|
||||
blockUnblockStr='<a href="/users/'+nickname+'?block='+postJsonObject['actor']+';'+avatarUrl+'">Block</a>'
|
||||
# if blocking then show "Unblock" in the dropdown
|
||||
actorDomainFull=actorDomain
|
||||
if actorPort:
|
||||
if actorPort!=80 and actorPort!=443:
|
||||
if ':' not in actorDomain:
|
||||
actorDomainFull=actorDomain+':'+str(actorPort)
|
||||
if isBlocked(baseDir,nickname,domain,actorNickname,actorDomainFull):
|
||||
blockUnblockStr='<a href="/users/'+nickname+'?unblock='+postJsonObject['actor']+';'+avatarUrl+'">Unblock</a>'
|
||||
|
||||
reportStr=''
|
||||
if messageId:
|
||||
reportStr='<a href="/users/'+nickname+'/newreport?url='+messageId+';'+avatarUrl+'">Report</a>'
|
||||
|
||||
avatarDropdown= \
|
||||
' <div onclick="dropdown()" class="dropdown-timeline">' \
|
||||
' <a href="/users/'+nickname+'?options='+postJsonObject['actor']+';'+avatarUrl+'">' \
|
||||
' <img title="Show options for this person" src="'+avatarUrl+'" '+avatarPosition+'/></a>' \
|
||||
' </div>'
|
||||
avatarDropdown= \
|
||||
' <div class="dropdown-timeline">' \
|
||||
' <a href="/users/'+nickname+'?options='+postJsonObject['actor']+';'+avatarUrl+';'+messageId+'">' \
|
||||
' <img title="Show options for this person" src="'+avatarUrl+'" '+avatarPosition+'/></a>' \
|
||||
' </div>'
|
||||
else:
|
||||
avatarDropdown= \
|
||||
' <div class="dropdown-timeline">' \
|
||||
' <a href="/users/'+nickname+'?options='+postJsonObject['actor']+';'+avatarUrl+'">' \
|
||||
' <img title="Show options for this person" src="'+avatarUrl+'" '+avatarPosition+'/></a>' \
|
||||
' </div>'
|
||||
|
||||
publishedStr=postJsonObject['object']['published']
|
||||
if '.' not in publishedStr:
|
||||
|
@ -1605,15 +1592,38 @@ def htmlUnfollowConfirm(baseDir: str,originPathStr: str,followActor: str,followP
|
|||
followStr+=htmlFooter()
|
||||
return followStr
|
||||
|
||||
def htmlPersonOptions(baseDir: str,originPathStr: str,optionsActor: str,optionsProfileUrl: str) -> str:
|
||||
def htmlPersonOptions(baseDir: str,domain: str,originPathStr: str,optionsActor: str,optionsProfileUrl: str,optionsLink: str) -> str:
|
||||
"""Show options for a person: view/follow/block/report
|
||||
"""
|
||||
optionsDomain,port=getDomainFromActor(optionsActor)
|
||||
optionsDomain,optionsPort=getDomainFromActor(optionsActor)
|
||||
|
||||
if os.path.isfile(baseDir+'/img/options-background.png'):
|
||||
if not os.path.isfile(baseDir+'/accounts/options-background.png'):
|
||||
copyfile(baseDir+'/img/options-background.png',baseDir+'/accounts/options-background.png')
|
||||
|
||||
followStr='Follow'
|
||||
blockStr='Block'
|
||||
if originPathStr.startswith('/users/'):
|
||||
nickname=originPathStr.split('/users/')[1]
|
||||
if '/' in nickname:
|
||||
nickname=nickname.split('/')[0]
|
||||
if '?' in nickname:
|
||||
nickname=nickname.split('?')[0]
|
||||
followerDomain,followerPort=getDomainFromActor(optionsActor)
|
||||
if isFollowingActor(baseDir,nickname,domain,optionsActor):
|
||||
followStr='Unfollow'
|
||||
|
||||
optionsNickname=getNicknameFromActor(optionsActor)
|
||||
optionsDomainFull=optionsDomain
|
||||
if optionsPort:
|
||||
if optionsPort!=80 and optionsPort!=443:
|
||||
optionsDomainFull=optionsDomain+':'+str(optionsPort)
|
||||
if isBlocked(baseDir,nickname,domain,optionsNickname,optionsDomainFull):
|
||||
blockStr='Block'
|
||||
|
||||
optionsLinkStr=''
|
||||
if optionsLink:
|
||||
optionsLinkStr=' <input type="hidden" name="postUrl" value="'+optionsLink+'">'
|
||||
with open(baseDir+'/epicyon-follow.css', 'r') as cssFile:
|
||||
profileStyle = cssFile.read()
|
||||
optionsStr=htmlHeader(profileStyle)
|
||||
|
@ -1626,9 +1636,11 @@ def htmlPersonOptions(baseDir: str,originPathStr: str,optionsActor: str,optionsP
|
|||
optionsStr+= \
|
||||
' <form method="POST" action="'+originPathStr+'/personoptions">' \
|
||||
' <input type="hidden" name="actor" value="'+optionsActor+'">' \
|
||||
' <input type="hidden" name="avatarUrl" value="'+optionsProfileUrl+'">'+ \
|
||||
optionsLinkStr+ \
|
||||
' <button type="submit" class="button" name="submitView">View</button>' \
|
||||
' <button type="submit" class="button" name="submitFollow">Follow</button>' \
|
||||
' <button type="submit" class="button" name="submitBlock">Block</button>' \
|
||||
' <button type="submit" class="button" name="submit'+followStr+'">'+followStr+'</button>' \
|
||||
' <button type="submit" class="button" name="submit'+blockStr+'">'+blockStr+'</button>' \
|
||||
' <button type="submit" class="button" name="submitReport">Report</button>' \
|
||||
' </form>'
|
||||
optionsStr+='</center>'
|
||||
|
|
Loading…
Reference in New Issue