forked from indymedia/epicyon
Follow logic
parent
ae41a0996e
commit
d2ca3af3ec
158
daemon.py
158
daemon.py
|
@ -40,6 +40,7 @@ from inbox import runInboxQueue
|
||||||
from inbox import savePostToInboxQueue
|
from inbox import savePostToInboxQueue
|
||||||
from follow import getFollowingFeed
|
from follow import getFollowingFeed
|
||||||
from follow import outboxUndoFollow
|
from follow import outboxUndoFollow
|
||||||
|
from follow import sendFollowRequest
|
||||||
from auth import authorize
|
from auth import authorize
|
||||||
from auth import createPassword
|
from auth import createPassword
|
||||||
from auth import createBasicAuthHeader
|
from auth import createBasicAuthHeader
|
||||||
|
@ -69,6 +70,8 @@ from shares import getSharesFeedForPerson
|
||||||
from shares import outboxShareUpload
|
from shares import outboxShareUpload
|
||||||
from shares import outboxUndoShareUpload
|
from shares import outboxUndoShareUpload
|
||||||
from shares import addShare
|
from shares import addShare
|
||||||
|
from utils import getNicknameFromActor
|
||||||
|
from utils import getDomainFromActor
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
@ -104,15 +107,19 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.send_header('WWW-Authenticate', 'title="Login to Epicyon", Basic realm="epicyon"')
|
self.send_header('WWW-Authenticate', 'title="Login to Epicyon", Basic realm="epicyon"')
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
|
||||||
def _set_headers(self,fileFormat: str) -> None:
|
def _set_headers(self,fileFormat: str,cookie: str) -> None:
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header('Content-type', fileFormat)
|
self.send_header('Content-type', fileFormat)
|
||||||
|
if cookie:
|
||||||
|
self.send_header('Cookie', cookie)
|
||||||
self.send_header('Host', self.server.domainFull)
|
self.send_header('Host', self.server.domainFull)
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
|
||||||
def _redirect_headers(self,redirect: str) -> None:
|
def _redirect_headers(self,redirect: str,cookie: str) -> None:
|
||||||
self.send_response(303)
|
self.send_response(303)
|
||||||
self.send_header('Content-type', 'text/html')
|
self.send_header('Content-type', 'text/html')
|
||||||
|
if cookie:
|
||||||
|
self.send_header('Cookie', cookie)
|
||||||
self.send_header('Location', redirect)
|
self.send_header('Location', redirect)
|
||||||
self.send_header('Host', self.server.domainFull)
|
self.send_header('Host', self.server.domainFull)
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
@ -390,6 +397,10 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print(str(self.headers))
|
print(str(self.headers))
|
||||||
|
|
||||||
|
cookie=None
|
||||||
|
if self.headers.get('Cookie'):
|
||||||
|
cookie=self.headers['Cookie']
|
||||||
|
|
||||||
# check authorization
|
# check authorization
|
||||||
authorized = self._isAuthorized()
|
authorized = self._isAuthorized()
|
||||||
if authorized:
|
if authorized:
|
||||||
|
@ -430,7 +441,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if os.path.isfile('epicyon-profile.css'):
|
if os.path.isfile('epicyon-profile.css'):
|
||||||
with open('epicyon-profile.css', 'r') as cssfile:
|
with open('epicyon-profile.css', 'r') as cssfile:
|
||||||
css = cssfile.read()
|
css = cssfile.read()
|
||||||
self._set_headers('text/css')
|
self._set_headers('text/css',cookie)
|
||||||
self.wfile.write(css.encode('utf-8'))
|
self.wfile.write(css.encode('utf-8'))
|
||||||
return
|
return
|
||||||
# image on login screen
|
# image on login screen
|
||||||
|
@ -438,7 +449,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
mediaFilename= \
|
mediaFilename= \
|
||||||
self.server.baseDir+'/accounts/login.png'
|
self.server.baseDir+'/accounts/login.png'
|
||||||
if os.path.isfile(mediaFilename):
|
if os.path.isfile(mediaFilename):
|
||||||
self._set_headers('image/png')
|
self._set_headers('image/png',cookie)
|
||||||
with open(mediaFilename, 'rb') as avFile:
|
with open(mediaFilename, 'rb') as avFile:
|
||||||
mediaBinary = avFile.read()
|
mediaBinary = avFile.read()
|
||||||
self.wfile.write(mediaBinary)
|
self.wfile.write(mediaBinary)
|
||||||
|
@ -448,7 +459,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
mediaFilename= \
|
mediaFilename= \
|
||||||
self.server.baseDir+'/accounts/login-background.png'
|
self.server.baseDir+'/accounts/login-background.png'
|
||||||
if os.path.isfile(mediaFilename):
|
if os.path.isfile(mediaFilename):
|
||||||
self._set_headers('image/png')
|
self._set_headers('image/png',cookie)
|
||||||
with open(mediaFilename, 'rb') as avFile:
|
with open(mediaFilename, 'rb') as avFile:
|
||||||
mediaBinary = avFile.read()
|
mediaBinary = avFile.read()
|
||||||
self.wfile.write(mediaBinary)
|
self.wfile.write(mediaBinary)
|
||||||
|
@ -458,7 +469,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
mediaFilename= \
|
mediaFilename= \
|
||||||
self.server.baseDir+'/accounts/follow-background.png'
|
self.server.baseDir+'/accounts/follow-background.png'
|
||||||
if os.path.isfile(mediaFilename):
|
if os.path.isfile(mediaFilename):
|
||||||
self._set_headers('image/png')
|
self._set_headers('image/png',cookie)
|
||||||
with open(mediaFilename, 'rb') as avFile:
|
with open(mediaFilename, 'rb') as avFile:
|
||||||
mediaBinary = avFile.read()
|
mediaBinary = avFile.read()
|
||||||
self.wfile.write(mediaBinary)
|
self.wfile.write(mediaBinary)
|
||||||
|
@ -474,11 +485,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.baseDir+'/media/'+mediaStr
|
self.server.baseDir+'/media/'+mediaStr
|
||||||
if os.path.isfile(mediaFilename):
|
if os.path.isfile(mediaFilename):
|
||||||
if mediaFilename.endswith('.png'):
|
if mediaFilename.endswith('.png'):
|
||||||
self._set_headers('image/png')
|
self._set_headers('image/png',cookie)
|
||||||
elif mediaFilename.endswith('.jpg'):
|
elif mediaFilename.endswith('.jpg'):
|
||||||
self._set_headers('image/jpeg')
|
self._set_headers('image/jpeg',cookie)
|
||||||
else:
|
else:
|
||||||
self._set_headers('image/gif')
|
self._set_headers('image/gif',cookie)
|
||||||
with open(mediaFilename, 'rb') as avFile:
|
with open(mediaFilename, 'rb') as avFile:
|
||||||
mediaBinary = avFile.read()
|
mediaBinary = avFile.read()
|
||||||
self.wfile.write(mediaBinary)
|
self.wfile.write(mediaBinary)
|
||||||
|
@ -496,11 +507,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.baseDir+'/sharefiles/'+mediaStr
|
self.server.baseDir+'/sharefiles/'+mediaStr
|
||||||
if os.path.isfile(mediaFilename):
|
if os.path.isfile(mediaFilename):
|
||||||
if mediaFilename.endswith('.png'):
|
if mediaFilename.endswith('.png'):
|
||||||
self._set_headers('image/png')
|
self._set_headers('image/png',cookie)
|
||||||
elif mediaFilename.endswith('.jpg'):
|
elif mediaFilename.endswith('.jpg'):
|
||||||
self._set_headers('image/jpeg')
|
self._set_headers('image/jpeg',cookie)
|
||||||
else:
|
else:
|
||||||
self._set_headers('image/gif')
|
self._set_headers('image/gif',cookie)
|
||||||
with open(mediaFilename, 'rb') as avFile:
|
with open(mediaFilename, 'rb') as avFile:
|
||||||
mediaBinary = avFile.read()
|
mediaBinary = avFile.read()
|
||||||
self.wfile.write(mediaBinary)
|
self.wfile.write(mediaBinary)
|
||||||
|
@ -516,7 +527,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.baseDir+'/img/icons/'+mediaStr
|
self.server.baseDir+'/img/icons/'+mediaStr
|
||||||
if os.path.isfile(mediaFilename):
|
if os.path.isfile(mediaFilename):
|
||||||
if mediaFilename.endswith('.png'):
|
if mediaFilename.endswith('.png'):
|
||||||
self._set_headers('image/png')
|
self._set_headers('image/png',cookie)
|
||||||
with open(mediaFilename, 'rb') as avFile:
|
with open(mediaFilename, 'rb') as avFile:
|
||||||
mediaBinary = avFile.read()
|
mediaBinary = avFile.read()
|
||||||
self.wfile.write(mediaBinary)
|
self.wfile.write(mediaBinary)
|
||||||
|
@ -539,11 +550,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.domain+'/'+avatarFile
|
self.server.domain+'/'+avatarFile
|
||||||
if os.path.isfile(avatarFilename):
|
if os.path.isfile(avatarFilename):
|
||||||
if avatarFile.endswith('.png'):
|
if avatarFile.endswith('.png'):
|
||||||
self._set_headers('image/png')
|
self._set_headers('image/png',cookie)
|
||||||
elif avatarFile.endswith('.jpg'):
|
elif avatarFile.endswith('.jpg'):
|
||||||
self._set_headers('image/jpeg')
|
self._set_headers('image/jpeg',cookie)
|
||||||
else:
|
else:
|
||||||
self._set_headers('image/gif')
|
self._set_headers('image/gif',cookie)
|
||||||
with open(avatarFilename, 'rb') as avFile:
|
with open(avatarFilename, 'rb') as avFile:
|
||||||
avBinary = avFile.read()
|
avBinary = avFile.read()
|
||||||
self.wfile.write(avBinary)
|
self.wfile.write(avBinary)
|
||||||
|
@ -588,11 +599,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if ';' in followStr:
|
if ';' in followStr:
|
||||||
followActor=followStr.split(';')[0]
|
followActor=followStr.split(';')[0]
|
||||||
followProfileUrl=followStr.split(';')[1]
|
followProfileUrl=followStr.split(';')[1]
|
||||||
self._login_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlFollowConfirm(self.server.baseDir,originPathStr,followActor,followProfileUrl).encode())
|
self.wfile.write(htmlFollowConfirm(self.server.baseDir,originPathStr,followActor,followProfileUrl).encode())
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
self._redirect_headers(originPathStr)
|
self._redirect_headers(originPathStr,cookie)
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -602,7 +613,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.path.endswith('/newfollowers') or \
|
self.path.endswith('/newfollowers') or \
|
||||||
self.path.endswith('/newdm') or \
|
self.path.endswith('/newdm') or \
|
||||||
self.path.endswith('/newshare')):
|
self.path.endswith('/newshare')):
|
||||||
self._login_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlNewPost(self.server.baseDir,self.path).encode())
|
self.wfile.write(htmlNewPost(self.server.baseDir,self.path).encode())
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -632,14 +643,14 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if postJsonObject.get('likes'):
|
if postJsonObject.get('likes'):
|
||||||
postJsonObject['likes']={}
|
postJsonObject['likes']={}
|
||||||
if 'text/html' in self.headers['Accept']:
|
if 'text/html' in self.headers['Accept']:
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlIndividualPost( \
|
self.wfile.write(htmlIndividualPost( \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.cachedWebfingers,self.server.personCache, \
|
self.server.cachedWebfingers,self.server.personCache, \
|
||||||
nickname,self.server.domain,self.server.port, \
|
nickname,self.server.domain,self.server.port, \
|
||||||
postJsonObject).encode('utf-8'))
|
postJsonObject).encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(postJsonObject).encode('utf-8'))
|
self.wfile.write(json.dumps(postJsonObject).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -674,10 +685,10 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
'totalItems': 0,
|
'totalItems': 0,
|
||||||
'type': 'OrderedCollection'}
|
'type': 'OrderedCollection'}
|
||||||
if 'text/html' in self.headers['Accept']:
|
if 'text/html' in self.headers['Accept']:
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlPostReplies(repliesJson).encode('utf-8'))
|
self.wfile.write(htmlPostReplies(repliesJson).encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(repliesJson).encode('utf-8'))
|
self.wfile.write(json.dumps(repliesJson).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -745,10 +756,10 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
repliesJson['orderedItems'].append(postJsonObject)
|
repliesJson['orderedItems'].append(postJsonObject)
|
||||||
# send the replies json
|
# send the replies json
|
||||||
if 'text/html' in self.headers['Accept']:
|
if 'text/html' in self.headers['Accept']:
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlPostReplies(repliesJson).encode('utf-8'))
|
self.wfile.write(htmlPostReplies(repliesJson).encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(repliesJson).encode('utf-8'))
|
self.wfile.write(json.dumps(repliesJson).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -768,7 +779,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
personLookup(self.server.domain,self.path.replace('/roles',''), \
|
personLookup(self.server.domain,self.path.replace('/roles',''), \
|
||||||
self.server.baseDir)
|
self.server.baseDir)
|
||||||
if getPerson:
|
if getPerson:
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlProfile(self.server.baseDir, \
|
self.wfile.write(htmlProfile(self.server.baseDir, \
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
True, \
|
True, \
|
||||||
|
@ -779,7 +790,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.personCache, \
|
self.server.personCache, \
|
||||||
actorJson['roles']).encode('utf-8'))
|
actorJson['roles']).encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(actorJson['roles']).encode('utf-8'))
|
self.wfile.write(json.dumps(actorJson['roles']).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -799,7 +810,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
personLookup(self.server.domain,self.path.replace('/skills',''), \
|
personLookup(self.server.domain,self.path.replace('/skills',''), \
|
||||||
self.server.baseDir)
|
self.server.baseDir)
|
||||||
if getPerson:
|
if getPerson:
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlProfile(self.server.baseDir, \
|
self.wfile.write(htmlProfile(self.server.baseDir, \
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
True, \
|
True, \
|
||||||
|
@ -810,7 +821,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.personCache, \
|
self.server.personCache, \
|
||||||
actorJson['skills']).encode('utf-8'))
|
actorJson['skills']).encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(actorJson['skills']).encode('utf-8'))
|
self.wfile.write(json.dumps(actorJson['skills']).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -837,14 +848,14 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if postJsonObject.get('likes'):
|
if postJsonObject.get('likes'):
|
||||||
postJsonObject['likes']={}
|
postJsonObject['likes']={}
|
||||||
if 'text/html' in self.headers['Accept']:
|
if 'text/html' in self.headers['Accept']:
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlIndividualPost( \
|
self.wfile.write(htmlIndividualPost( \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.cachedWebfingers,self.server.personCache, \
|
self.server.cachedWebfingers,self.server.personCache, \
|
||||||
nickname,self.server.domain,self.server.port, \
|
nickname,self.server.domain,self.server.port, \
|
||||||
postJsonObject).encode('utf-8'))
|
postJsonObject).encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(postJsonObject).encode('utf-8'))
|
self.wfile.write(json.dumps(postJsonObject).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -877,7 +888,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
maxPostsInFeed, 'inbox', \
|
maxPostsInFeed, 'inbox', \
|
||||||
True,self.server.ocapAlways)
|
True,self.server.ocapAlways)
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlInbox(self.server.session, \
|
self.wfile.write(htmlInbox(self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
self.server.cachedWebfingers, \
|
self.server.cachedWebfingers, \
|
||||||
|
@ -887,7 +898,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.port, \
|
self.server.port, \
|
||||||
inboxFeed).encode('utf-8'))
|
inboxFeed).encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(inboxFeed).encode('utf-8'))
|
self.wfile.write(json.dumps(inboxFeed).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -923,7 +934,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
authorized, \
|
authorized, \
|
||||||
self.server.ocapAlways)
|
self.server.ocapAlways)
|
||||||
|
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlOutbox(self.server.session, \
|
self.wfile.write(htmlOutbox(self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
self.server.cachedWebfingers, \
|
self.server.cachedWebfingers, \
|
||||||
|
@ -933,7 +944,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.port, \
|
self.server.port, \
|
||||||
outboxFeed).encode('utf-8'))
|
outboxFeed).encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(outboxFeed).encode('utf-8'))
|
self.wfile.write(json.dumps(outboxFeed).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -960,7 +971,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.session= \
|
self.server.session= \
|
||||||
createSession(self.server.domain,self.server.port,self.server.useTor)
|
createSession(self.server.domain,self.server.port,self.server.useTor)
|
||||||
|
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlProfile(self.server.baseDir, \
|
self.wfile.write(htmlProfile(self.server.baseDir, \
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
authorized, \
|
authorized, \
|
||||||
|
@ -973,7 +984,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(shares).encode('utf-8'))
|
self.wfile.write(json.dumps(shares).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -999,7 +1010,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.session= \
|
self.server.session= \
|
||||||
createSession(self.server.domain,self.server.port,self.server.useTor)
|
createSession(self.server.domain,self.server.port,self.server.useTor)
|
||||||
|
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlProfile(self.server.baseDir, \
|
self.wfile.write(htmlProfile(self.server.baseDir, \
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
authorized, \
|
authorized, \
|
||||||
|
@ -1012,7 +1023,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(following).encode('utf-8'))
|
self.wfile.write(json.dumps(following).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -1036,7 +1047,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
print('DEBUG: creating new session')
|
print('DEBUG: creating new session')
|
||||||
self.server.session= \
|
self.server.session= \
|
||||||
createSession(self.server.domain,self.server.port,self.server.useTor)
|
createSession(self.server.domain,self.server.port,self.server.useTor)
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlProfile(self.server.baseDir, \
|
self.wfile.write(htmlProfile(self.server.baseDir, \
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
authorized, \
|
authorized, \
|
||||||
|
@ -1049,7 +1060,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(followers).encode('utf-8'))
|
self.wfile.write(json.dumps(followers).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -1063,7 +1074,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
print('DEBUG: creating new session')
|
print('DEBUG: creating new session')
|
||||||
self.server.session= \
|
self.server.session= \
|
||||||
createSession(self.server.domain,self.server.port,self.server.useTor)
|
createSession(self.server.domain,self.server.port,self.server.useTor)
|
||||||
self._set_headers('text/html')
|
self._set_headers('text/html',cookie)
|
||||||
self.wfile.write(htmlProfile(self.server.baseDir, \
|
self.wfile.write(htmlProfile(self.server.baseDir, \
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
authorized, \
|
authorized, \
|
||||||
|
@ -1073,7 +1084,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.cachedWebfingers, \
|
self.server.cachedWebfingers, \
|
||||||
self.server.personCache).encode('utf-8'))
|
self.server.personCache).encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
self.wfile.write(json.dumps(getPerson).encode('utf-8'))
|
self.wfile.write(json.dumps(getPerson).encode('utf-8'))
|
||||||
self.server.GETbusy=False
|
self.server.GETbusy=False
|
||||||
return
|
return
|
||||||
|
@ -1087,7 +1098,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
# check that the file exists
|
# check that the file exists
|
||||||
filename=self.server.baseDir+self.path
|
filename=self.server.baseDir+self.path
|
||||||
if os.path.isfile(filename):
|
if os.path.isfile(filename):
|
||||||
self._set_headers('application/json')
|
self._set_headers('application/json',None)
|
||||||
with open(filename, 'r', encoding='utf-8') as File:
|
with open(filename, 'r', encoding='utf-8') as File:
|
||||||
content = File.read()
|
content = File.read()
|
||||||
contentJson=json.loads(content)
|
contentJson=json.loads(content)
|
||||||
|
@ -1309,7 +1320,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
return
|
return
|
||||||
self.server.lastPOST=currTimePOST
|
self.server.lastPOST=currTimePOST
|
||||||
|
|
||||||
self.server.POSTbusy=True
|
self.server.POSTbusy=True
|
||||||
if not self.headers.get('Content-type'):
|
if not self.headers.get('Content-type'):
|
||||||
print('Content-type header missing')
|
print('Content-type header missing')
|
||||||
|
@ -1321,6 +1332,10 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
# remove any trailing slashes from the path
|
# remove any trailing slashes from the path
|
||||||
self.path=self.path.replace('/outbox/','/outbox').replace('/inbox/','/inbox').replace('/shares/','/shares').replace('/sharedInbox/','/sharedInbox')
|
self.path=self.path.replace('/outbox/','/outbox').replace('/inbox/','/inbox').replace('/shares/','/shares').replace('/sharedInbox/','/sharedInbox')
|
||||||
|
|
||||||
|
cookie=None
|
||||||
|
if self.headers.get('Cookie'):
|
||||||
|
cookie=self.headers['Cookie']
|
||||||
|
|
||||||
# check authorization
|
# check authorization
|
||||||
authorized = self._isAuthorized()
|
authorized = self._isAuthorized()
|
||||||
if authorized:
|
if authorized:
|
||||||
|
@ -1329,6 +1344,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
else:
|
else:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('POST Not authorized')
|
print('POST Not authorized')
|
||||||
|
print(str(self.headers))
|
||||||
|
|
||||||
# if this is a POST to teh outbox then check authentication
|
# if this is a POST to teh outbox then check authentication
|
||||||
self.outboxAuthenticated=False
|
self.outboxAuthenticated=False
|
||||||
|
@ -1386,12 +1402,52 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# decision to follow in the web interface is confirmed
|
||||||
|
if authorized and self.path.endswith('/followconfirm'):
|
||||||
|
originPathStr=self.path.split('/followconfirm')[0]
|
||||||
|
followerNickname=getNicknameFromActor(originPathStr)
|
||||||
|
length = int(self.headers['Content-length'])
|
||||||
|
followConfirmParams=self.rfile.read(length).decode('utf-8')
|
||||||
|
if '&submitYes=' in followConfirmParams:
|
||||||
|
followingActor=followConfirmParams.replace('%3A',':').replace('%2F','/').split('actor=')[1]
|
||||||
|
if '&' in followingActor:
|
||||||
|
followingActor=followingActor.split('&')[0]
|
||||||
|
followingNickname=getNicknameFromActor(followingActor)
|
||||||
|
followingDomain,followingPort=getDomainFromActor(followingActor)
|
||||||
|
if followerNickname==followingNickname and \
|
||||||
|
followingDomain==self.server.domain and \
|
||||||
|
followingPort==self.server.port:
|
||||||
|
if self.server.debug:
|
||||||
|
print('You cannot follow yourself!')
|
||||||
|
else:
|
||||||
|
if self.server.debug:
|
||||||
|
print('Sending follow request from '+followerNickname+' to '+followingActor)
|
||||||
|
sendFollowRequest(self.server.session, \
|
||||||
|
self.server.baseDir, \
|
||||||
|
followerNickname, \
|
||||||
|
self.server.domain,self.server.port, \
|
||||||
|
self.server.httpPrefix, \
|
||||||
|
followingNickname, \
|
||||||
|
followingDomain, \
|
||||||
|
followingPort,self.server.httpPrefix, \
|
||||||
|
False,self.server.federationList, \
|
||||||
|
self.server.sendThreads, \
|
||||||
|
self.server.postLog, \
|
||||||
|
self.server.cachedWebfingers, \
|
||||||
|
self.server.personCache, \
|
||||||
|
self.server.debug)
|
||||||
|
else:
|
||||||
|
print('Follow no')
|
||||||
|
self._redirect_headers(originPathStr,cookie)
|
||||||
|
self.server.POSTbusy=False
|
||||||
|
return
|
||||||
|
|
||||||
postState=self._receiveNewPost(authorized,'newpost')
|
postState=self._receiveNewPost(authorized,'newpost')
|
||||||
if postState!=0:
|
if postState!=0:
|
||||||
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]
|
||||||
self._redirect_headers('/users/'+nickname+'/outbox')
|
self._redirect_headers('/users/'+nickname+'/outbox',cookie)
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
return
|
return
|
||||||
postState=self._receiveNewPost(authorized,'newunlisted')
|
postState=self._receiveNewPost(authorized,'newunlisted')
|
||||||
|
@ -1399,31 +1455,31 @@ 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]
|
||||||
self._redirect_headers('/users/'+self.postToNickname+'/outbox')
|
self._redirect_headers('/users/'+self.postToNickname+'/outbox',cookie)
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
return
|
return
|
||||||
postState=self._receiveNewPost(authorized,'newfollowers')
|
postState=self._receiveNewPost(authorized,'newfollowers')
|
||||||
if postState!=0:
|
if postState!=0:
|
||||||
if '/' in nickname:
|
if '/' in nickname:
|
||||||
nickname=nickname.split('/')[0]
|
nickname=nickname.split('/')[0]
|
||||||
self._redirect_headers('/users/'+self.postToNickname+'/outbox')
|
self._redirect_headers('/users/'+self.postToNickname+'/outbox',cookie)
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
return
|
return
|
||||||
postState=self._receiveNewPost(authorized,'newdm')
|
postState=self._receiveNewPost(authorized,'newdm')
|
||||||
if postState!=0:
|
if postState!=0:
|
||||||
if '/' in nickname:
|
if '/' in nickname:
|
||||||
nickname=nickname.split('/')[0]
|
nickname=nickname.split('/')[0]
|
||||||
self._redirect_headers('/users/'+self.postToNickname+'/outbox')
|
self._redirect_headers('/users/'+self.postToNickname+'/outbox',cookie)
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
return
|
return
|
||||||
postState=self._receiveNewPost(authorized,'newshare')
|
postState=self._receiveNewPost(authorized,'newshare')
|
||||||
if postState!=0:
|
if postState!=0:
|
||||||
if '/' in nickname:
|
if '/' in nickname:
|
||||||
nickname=nickname.split('/')[0]
|
nickname=nickname.split('/')[0]
|
||||||
self._redirect_headers('/users/'+self.postToNickname+'/shares')
|
self._redirect_headers('/users/'+self.postToNickname+'/shares',cookie)
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.path.endswith('/outbox') or self.path.endswith('/shares'):
|
if self.path.endswith('/outbox') or self.path.endswith('/shares'):
|
||||||
if '/users/' in self.path:
|
if '/users/' in self.path:
|
||||||
if authorized:
|
if authorized:
|
||||||
|
|
|
@ -427,7 +427,7 @@ def followedAccountAccepts(session,baseDir: str,httpPrefix: str, \
|
||||||
def sendFollowRequest(session,baseDir: str, \
|
def sendFollowRequest(session,baseDir: str, \
|
||||||
nickname: str,domain: str,port: int,httpPrefix: str, \
|
nickname: str,domain: str,port: int,httpPrefix: str, \
|
||||||
followNickname: str,followDomain: str, \
|
followNickname: str,followDomain: str, \
|
||||||
followPort: bool,followHttpPrefix: str, \
|
followPort: int,followHttpPrefix: str, \
|
||||||
clientToServer: bool,federationList: [], \
|
clientToServer: bool,federationList: [], \
|
||||||
sendThreads: [],postLog: [],cachedWebfingers: {}, \
|
sendThreads: [],postLog: [],cachedWebfingers: {}, \
|
||||||
personCache: {},debug : bool) -> {}:
|
personCache: {},debug : bool) -> {}:
|
||||||
|
|
|
@ -428,8 +428,8 @@ def individualPostAsHtml(session,wfRequest: {},personCache: {}, \
|
||||||
avatarDropdown= \
|
avatarDropdown= \
|
||||||
' <a href="'+postJsonObject['actor']+'">' \
|
' <a href="'+postJsonObject['actor']+'">' \
|
||||||
' <img src="'+avatarUrl+'" title="Show profile" alt="Avatar"'+avatarPosition+'/></a>'
|
' <img src="'+avatarUrl+'" title="Show profile" alt="Avatar"'+avatarPosition+'/></a>'
|
||||||
#if fullDomain+'/users/'+nickname not in postJsonObject['actor']:
|
if fullDomain+'/users/'+nickname not in postJsonObject['actor']:
|
||||||
avatarDropdown= \
|
avatarDropdown= \
|
||||||
' <div class="dropdown-timeline">' \
|
' <div class="dropdown-timeline">' \
|
||||||
' <img src="'+avatarUrl+'" alt="Avatar"'+avatarPosition+'/>' \
|
' <img src="'+avatarUrl+'" alt="Avatar"'+avatarPosition+'/>' \
|
||||||
' <div class="dropdown-timeline-content">' \
|
' <div class="dropdown-timeline-content">' \
|
||||||
|
@ -537,7 +537,7 @@ def htmlFollowConfirm(baseDir: str,originPathStr: str,followActor: str,followPro
|
||||||
followStr+=' <img src="'+followProfileUrl+'"/></a>'
|
followStr+=' <img src="'+followProfileUrl+'"/></a>'
|
||||||
followStr+=' <p class="followText">Follow '+getNicknameFromActor(followActor)+'@'+followDomain+' ?</p>'
|
followStr+=' <p class="followText">Follow '+getNicknameFromActor(followActor)+'@'+followDomain+' ?</p>'
|
||||||
followStr+= \
|
followStr+= \
|
||||||
' <form method="POST" action="'+originPathStr+'?followconfirm">' \
|
' <form method="POST" action="'+originPathStr+'/followconfirm">' \
|
||||||
' <input type="hidden" name="actor" value="'+followActor+'">' \
|
' <input type="hidden" name="actor" value="'+followActor+'">' \
|
||||||
' <button type="submit" class="button" name="submitYes">Yes</button>' \
|
' <button type="submit" class="button" name="submitYes">Yes</button>' \
|
||||||
' <a href="'+originPathStr+'"><button class="button">No</button></a>' \
|
' <a href="'+originPathStr+'"><button class="button">No</button></a>' \
|
||||||
|
|
Loading…
Reference in New Issue