Include content-length header from GET

master
Bob Mottram 2019-08-15 14:20:09 +01:00
parent 40809c2758
commit 1206ae72fa
1 changed files with 290 additions and 245 deletions

327
daemon.py
View File

@ -134,23 +134,17 @@ def readFollowList(filename: str):
return followlist return followlist
class PubServer(BaseHTTPRequestHandler): class PubServer(BaseHTTPRequestHandler):
def _login_headers(self,fileFormat: str) -> None: def _login_headers(self,fileFormat: str,length: int) -> None:
self.protocol_version='HTTP/1.1'
self.send_response(200) self.send_response(200)
self.send_header('Content-type', fileFormat) self.send_header('Content-type', fileFormat)
self.send_header('Content-Length', str(length))
self.send_header('Host', self.server.domainFull) self.send_header('Host', self.server.domainFull)
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,cookie: str) -> None: def _set_headers(self,fileFormat: str,length: int,cookie: str) -> None:
self.send_response(200) self.protocol_version='HTTP/1.1'
self.send_header('Content-type', fileFormat)
if cookie:
self.send_header('Cookie', cookie)
self.send_header('Host', self.server.domainFull)
self.send_header('InstanceID', self.server.instanceId)
self.end_headers()
def _set_headers_length(self,fileFormat: str,length: int,cookie: str) -> None:
self.send_response(200) self.send_response(200)
self.send_header('Content-type', fileFormat) self.send_header('Content-type', fileFormat)
self.send_header('Content-Length', str(length)) self.send_header('Content-Length', str(length))
@ -161,6 +155,7 @@ class PubServer(BaseHTTPRequestHandler):
self.end_headers() self.end_headers()
def _redirect_headers(self,redirect: str,cookie: str) -> None: def _redirect_headers(self,redirect: str,cookie: str) -> None:
self.protocol_version='HTTP/1.1'
self.send_response(303) self.send_response(303)
self.send_header('Content-type', 'text/html') self.send_header('Content-type', 'text/html')
if cookie: if cookie:
@ -171,10 +166,13 @@ class PubServer(BaseHTTPRequestHandler):
self.end_headers() self.end_headers()
def _404(self) -> None: def _404(self) -> None:
self.protocol_version='HTTP/1.1'
msg="<html><head></head><body><h1>404 Not Found</h1></body></html>".encode('utf-8')
self.send_response(404) self.send_response(404)
self.send_header('Content-Type', 'text/html; charset=utf-8') self.send_header('Content-Type', 'text/html; charset=utf-8')
self.send_header('Content-Length', str(len(msg)))
self.end_headers() self.end_headers()
self.wfile.write("<html><head></head><body><h1>404 Not Found</h1></body></html>".encode('utf-8')) self.wfile.write(msg)
def _webfinger(self) -> bool: def _webfinger(self) -> bool:
if not self.path.startswith('/.well-known'): if not self.path.startswith('/.well-known'):
@ -187,16 +185,18 @@ class PubServer(BaseHTTPRequestHandler):
if self.path.startswith('/.well-known/host-meta'): if self.path.startswith('/.well-known/host-meta'):
wfResult=webfingerMeta() wfResult=webfingerMeta()
if wfResult: if wfResult:
self._set_headers('application/xrd+xml') msg=wfResult.encode('utf-8')
self.wfile.write(wfResult.encode('utf-8')) self._set_headers('application/xrd+xml',len(msg),None)
self.wfile.write(msg)
return return
if self.server.debug: if self.server.debug:
print('DEBUG: WEBFINGER lookup '+self.path+' '+str(self.server.baseDir)) print('DEBUG: WEBFINGER lookup '+self.path+' '+str(self.server.baseDir))
wfResult=webfingerLookup(self.path,self.server.baseDir,self.server.port,self.server.debug) wfResult=webfingerLookup(self.path,self.server.baseDir,self.server.port,self.server.debug)
if wfResult: if wfResult:
self._set_headers('application/jrd+json',None) msg=json.dumps(wfResult).encode('utf-8')
self.wfile.write(json.dumps(wfResult).encode('utf-8')) self._set_headers('application/jrd+json',len(msg),None)
self.wfile.write(msg)
else: else:
if self.server.debug: if self.server.debug:
print('DEBUG: WEBFINGER lookup 404 '+self.path) print('DEBUG: WEBFINGER lookup 404 '+self.path)
@ -496,8 +496,9 @@ 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',cookie) msg=css.encode('utf-8')
self.wfile.write(css.encode('utf-8')) self._set_headers('text/css',len(msg),cookie)
self.wfile.write(msg)
self.wfile.flush() self.wfile.flush()
return return
# image on login screen # image on login screen
@ -507,7 +508,7 @@ class PubServer(BaseHTTPRequestHandler):
if os.path.isfile(mediaFilename): if os.path.isfile(mediaFilename):
with open(mediaFilename, 'rb') as avFile: with open(mediaFilename, 'rb') as avFile:
mediaBinary = avFile.read() mediaBinary = avFile.read()
self._set_headers_length('image/png',len(mediaBinary),cookie) self._set_headers('image/png',len(mediaBinary),cookie)
self.wfile.write(mediaBinary) self.wfile.write(mediaBinary)
self.wfile.flush() self.wfile.flush()
return return
@ -518,7 +519,7 @@ class PubServer(BaseHTTPRequestHandler):
if os.path.isfile(mediaFilename): if os.path.isfile(mediaFilename):
with open(mediaFilename, 'rb') as avFile: with open(mediaFilename, 'rb') as avFile:
mediaBinary = avFile.read() mediaBinary = avFile.read()
self._set_headers_length('image/png',len(mediaBinary),cookie) self._set_headers('image/png',len(mediaBinary),cookie)
self.wfile.write(mediaBinary) self.wfile.write(mediaBinary)
self.wfile.flush() self.wfile.flush()
return return
@ -529,7 +530,7 @@ class PubServer(BaseHTTPRequestHandler):
if os.path.isfile(mediaFilename): if os.path.isfile(mediaFilename):
with open(mediaFilename, 'rb') as avFile: with open(mediaFilename, 'rb') as avFile:
mediaBinary = avFile.read() mediaBinary = avFile.read()
self._set_headers_length('image/png',len(mediaBinary),cookie) self._set_headers('image/png',len(mediaBinary),cookie)
self.wfile.write(mediaBinary) self.wfile.write(mediaBinary)
self.wfile.flush() self.wfile.flush()
return return
@ -542,15 +543,17 @@ class PubServer(BaseHTTPRequestHandler):
emojiFilename= \ emojiFilename= \
self.server.baseDir+'/emoji/'+emojiStr self.server.baseDir+'/emoji/'+emojiStr
if os.path.isfile(emojiFilename): if os.path.isfile(emojiFilename):
mediaImageType='png'
if emojiFilename.endswith('.png'): if emojiFilename.endswith('.png'):
self._set_headers('image/png',cookie) mediaImageType='png'
elif emojiFilename.endswith('.jpg'): elif emojiFilename.endswith('.jpg'):
self._set_headers('image/jpeg',cookie) mediaImageType='jpeg'
else: else:
self._set_headers('image/gif',cookie) mediaImageType='gif'
with open(emojiFilename, 'rb') as avFile: with open(emojiFilename, 'rb') as avFile:
emojiBinary = avFile.read() mediaBinary = avFile.read()
self.wfile.write(emojiBinary) self._set_headers('image/'+mediaImageType,len(mediaBinary),cookie)
self.wfile.write(mediaBinary)
self.wfile.flush() self.wfile.flush()
return return
self._404() self._404()
@ -574,7 +577,7 @@ class PubServer(BaseHTTPRequestHandler):
mediaFileType='gif' mediaFileType='gif'
with open(mediaFilename, 'rb') as avFile: with open(mediaFilename, 'rb') as avFile:
mediaBinary = avFile.read() mediaBinary = avFile.read()
self._set_headers_length('image/'+mediaFileType,len(mediaBinary),cookie) self._set_headers('image/'+mediaFileType,len(mediaBinary),cookie)
self.wfile.write(mediaBinary) self.wfile.write(mediaBinary)
self.wfile.flush() self.wfile.flush()
return return
@ -599,7 +602,7 @@ class PubServer(BaseHTTPRequestHandler):
mediaFileType='gif' mediaFileType='gif'
with open(mediaFilename, 'rb') as avFile: with open(mediaFilename, 'rb') as avFile:
mediaBinary = avFile.read() mediaBinary = avFile.read()
self._set_headers_length('image/'+mediaFileType,len(mediaBinary),cookie) self._set_headers('image/'+mediaFileType,len(mediaBinary),cookie)
self.wfile.write(mediaBinary) self.wfile.write(mediaBinary)
self.wfile.flush() self.wfile.flush()
return return
@ -616,7 +619,7 @@ class PubServer(BaseHTTPRequestHandler):
if mediaFilename.endswith('.png'): if mediaFilename.endswith('.png'):
with open(mediaFilename, 'rb') as avFile: with open(mediaFilename, 'rb') as avFile:
mediaBinary = avFile.read() mediaBinary = avFile.read()
self._set_headers_length('image/png',len(mediaBinary),cookie) self._set_headers('image/png',len(mediaBinary),cookie)
self.wfile.write(mediaBinary) self.wfile.write(mediaBinary)
self.wfile.flush() self.wfile.flush()
return return
@ -637,15 +640,17 @@ class PubServer(BaseHTTPRequestHandler):
avatarNickname+'@'+ \ avatarNickname+'@'+ \
self.server.domain+'/'+avatarFile self.server.domain+'/'+avatarFile
if os.path.isfile(avatarFilename): if os.path.isfile(avatarFilename):
mediaImageType='png'
if avatarFile.endswith('.png'): if avatarFile.endswith('.png'):
self._set_headers('image/png',cookie) mediaImageType='png'
elif avatarFile.endswith('.jpg'): elif avatarFile.endswith('.jpg'):
self._set_headers('image/jpeg',cookie) mediaImageType='jpeg'
else: else:
self._set_headers('image/gif',cookie) mediaImageType='gif'
with open(avatarFilename, 'rb') as avFile: with open(avatarFilename, 'rb') as avFile:
avBinary = avFile.read() mediaBinary = avFile.read()
self.wfile.write(avBinary) self._set_headers('image/'+mediaImageType,len(mediaBinary),cookie)
self.wfile.write(mediaBinary)
self.wfile.flush() self.wfile.flush()
return return
@ -675,17 +680,19 @@ class PubServer(BaseHTTPRequestHandler):
return return
if self.path.startswith('/terms'): if self.path.startswith('/terms'):
self._login_headers('text/html') msg=htmlTermsOfService(self.server.baseDir, \
self.wfile.write(htmlTermsOfService(self.server.baseDir, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.domainFull).encode()) self.server.domainFull).encode()
self._login_headers('text/html',len(msg))
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
if self.path.startswith('/login'): if self.path.startswith('/login'):
# request basic auth # request basic auth
self._login_headers('text/html') msg=htmlLogin(self.server.baseDir).encode('utf-8')
self.wfile.write(htmlLogin(self.server.baseDir).encode('utf-8')) self._login_headers('text/html',len(msg))
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -698,8 +705,9 @@ class PubServer(BaseHTTPRequestHandler):
followActor=followStr.split(';')[0] followActor=followStr.split(';')[0]
followProfileUrl=followStr.split(';')[1] followProfileUrl=followStr.split(';')[1]
# show the confirm follow screen # show the confirm follow screen
self._set_headers('text/html',cookie) msg=htmlFollowConfirm(self.server.baseDir,originPathStr,followActor,followProfileUrl).encode()
self.wfile.write(htmlFollowConfirm(self.server.baseDir,originPathStr,followActor,followProfileUrl).encode()) self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
self._redirect_headers(originPathStr,cookie) self._redirect_headers(originPathStr,cookie)
@ -715,8 +723,9 @@ class PubServer(BaseHTTPRequestHandler):
blockActor=blockStr.split(';')[0] blockActor=blockStr.split(';')[0]
blockProfileUrl=blockStr.split(';')[1] blockProfileUrl=blockStr.split(';')[1]
# show the confirm block screen # show the confirm block screen
self._set_headers('text/html',cookie) msg=htmlBlockConfirm(self.server.baseDir,originPathStr,blockActor,blockProfileUrl).encode()
self.wfile.write(htmlBlockConfirm(self.server.baseDir,originPathStr,blockActor,blockProfileUrl).encode()) self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
self._redirect_headers(originPathStr,cookie) self._redirect_headers(originPathStr,cookie)
@ -734,8 +743,9 @@ class PubServer(BaseHTTPRequestHandler):
if '?page=' in hashtag: if '?page=' in hashtag:
hashtag=hashtag.split('?page=')[0] hashtag=hashtag.split('?page=')[0]
if isBlockedHashtag(self.server.baseDir,hashtag): if isBlockedHashtag(self.server.baseDir,hashtag):
self._login_headers('text/html') msg=htmlHashtagBlocked(self.server.baseDir).encode('utf-8')
self.wfile.write(htmlHashtagBlocked(self.server.baseDir).encode('utf-8')) self._login_headers('text/html',len(msg))
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
hashtagStr= \ hashtagStr= \
@ -745,9 +755,10 @@ class PubServer(BaseHTTPRequestHandler):
self.server.personCache, \ self.server.personCache, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.projectVersion) self.server.projectVersion)
self._set_headers('text/html',cookie)
if hashtagStr: if hashtagStr:
self.wfile.write(hashtagStr.encode()) msg=hashtagStr.encode()
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
originPathStr=self.path.split('/tags/')[0] originPathStr=self.path.split('/tags/')[0]
self._redirect_headers(originPathStr+'/search',cookie) self._redirect_headers(originPathStr+'/search',cookie)
@ -758,8 +769,9 @@ class PubServer(BaseHTTPRequestHandler):
if '/users/' in self.path: if '/users/' in self.path:
if self.path.endswith('/search'): if self.path.endswith('/search'):
# show the search screen # show the search screen
self._set_headers('text/html',cookie) msg=htmlSearch(self.server.baseDir,self.path).encode()
self.wfile.write(htmlSearch(self.server.baseDir,self.path).encode()) self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -772,8 +784,9 @@ class PubServer(BaseHTTPRequestHandler):
followActor=followStr.split(';')[0] followActor=followStr.split(';')[0]
followProfileUrl=followStr.split(';')[1] followProfileUrl=followStr.split(';')[1]
# show the confirm follow screen # show the confirm follow screen
self._set_headers('text/html',cookie) msg=htmlUnfollowConfirm(self.server.baseDir,originPathStr,followActor,followProfileUrl).encode()
self.wfile.write(htmlUnfollowConfirm(self.server.baseDir,originPathStr,followActor,followProfileUrl).encode()) self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
self._redirect_headers(originPathStr,cookie) self._redirect_headers(originPathStr,cookie)
@ -789,8 +802,9 @@ class PubServer(BaseHTTPRequestHandler):
blockActor=blockStr.split(';')[0] blockActor=blockStr.split(';')[0]
blockProfileUrl=blockStr.split(';')[1] blockProfileUrl=blockStr.split(';')[1]
# show the confirm unblock screen # show the confirm unblock screen
self._set_headers('text/html',cookie) msg=htmlUnblockConfirm(self.server.baseDir,originPathStr,blockActor,blockProfileUrl).encode()
self.wfile.write(htmlUnblockConfirm(self.server.baseDir,originPathStr,blockActor,blockProfileUrl).encode()) self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
self._redirect_headers(originPathStr,cookie) self._redirect_headers(originPathStr,cookie)
@ -1002,8 +1016,9 @@ class PubServer(BaseHTTPRequestHandler):
# edit profile in web interface # edit profile in web interface
if '/users/' in self.path and self.path.endswith('/editprofile'): if '/users/' in self.path and self.path.endswith('/editprofile'):
self._set_headers('text/html',cookie) msg=htmlEditProfile(self.server.baseDir,self.path,self.server.domain,self.server.port).encode()
self.wfile.write(htmlEditProfile(self.server.baseDir,self.path,self.server.domain,self.server.port).encode()) self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1016,8 +1031,9 @@ class PubServer(BaseHTTPRequestHandler):
self.path.endswith('/newreport') or \ self.path.endswith('/newreport') or \
'/newreport?=' in self.path or \ '/newreport?=' in self.path or \
self.path.endswith('/newshare')): self.path.endswith('/newshare')):
self._set_headers('text/html',cookie) msg=htmlNewPost(self.server.baseDir,self.path,inReplyToUrl,replyToList).encode()
self.wfile.write(htmlNewPost(self.server.baseDir,self.path,inReplyToUrl,replyToList).encode()) self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1046,17 +1062,19 @@ 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',cookie) msg= \
self.wfile.write(htmlIndividualPost( \ 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, \
authorized,postJsonObject, \ authorized,postJsonObject, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.projectVersion).encode('utf-8')) self.server.projectVersion).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(postJsonObject).encode('utf-8')
self.wfile.write(json.dumps(postJsonObject).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
@ -1095,10 +1113,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',cookie) msg=htmlPostReplies(self.server.baseDir, \
print('----------------------------------------------------')
pprint(repliesJson)
self.wfile.write(htmlPostReplies(self.server.baseDir, \
self.server.session, \ self.server.session, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
self.server.personCache, \ self.server.personCache, \
@ -1107,10 +1122,15 @@ class PubServer(BaseHTTPRequestHandler):
self.server.port, \ self.server.port, \
repliesJson, \ repliesJson, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.projectVersion).encode('utf-8')) self.server.projectVersion).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
print('----------------------------------------------------')
pprint(repliesJson)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(repliesJson).encode('utf-8')
self.wfile.write(json.dumps(repliesJson).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
@ -1138,8 +1158,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',cookie) msg=htmlPostReplies(self.server.baseDir, \
self.wfile.write(htmlPostReplies(self.server.baseDir, \
self.server.session, \ self.server.session, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
self.server.personCache, \ self.server.personCache, \
@ -1148,10 +1167,13 @@ class PubServer(BaseHTTPRequestHandler):
self.server.port, \ self.server.port, \
repliesJson, \ repliesJson, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.projectVersion).encode('utf-8')) self.server.projectVersion).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(repliesJson).encode('utf-8')
self.wfile.write(json.dumps(repliesJson).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1170,8 +1192,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',cookie) msg=htmlProfile(self.server.projectVersion, \
self.wfile.write(htmlProfile(self.server.projectVersion, \
self.server.baseDir, \ self.server.baseDir, \
self.server.httpPrefix, \ self.server.httpPrefix, \
True, \ True, \
@ -1180,10 +1201,13 @@ class PubServer(BaseHTTPRequestHandler):
self.server.session, \ self.server.session, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
self.server.personCache, \ self.server.personCache, \
actorJson['roles']).encode('utf-8')) actorJson['roles']).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(actorJson['roles']).encode('utf-8')
self.wfile.write(json.dumps(actorJson['roles']).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1202,8 +1226,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',cookie) msg=htmlProfile(self.server.projectVersion, \
self.wfile.write(htmlProfile(self.server.projectVersion, \
self.server.baseDir, \ self.server.baseDir, \
self.server.httpPrefix, \ self.server.httpPrefix, \
True, \ True, \
@ -1212,10 +1235,13 @@ class PubServer(BaseHTTPRequestHandler):
self.server.session, \ self.server.session, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
self.server.personCache, \ self.server.personCache, \
actorJson['skills']).encode('utf-8')) actorJson['skills']).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(actorJson['skills']).encode('utf-8')
self.wfile.write(json.dumps(actorJson['skills']).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1241,18 +1267,19 @@ 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',cookie) msg=htmlIndividualPost(self.server.baseDir, \
self.wfile.write(htmlIndividualPost( \
self.server.baseDir, \
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, \
authorized,postJsonObject, \ authorized,postJsonObject, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.projectVersion).encode('utf-8')) self.server.projectVersion).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(postJsonObject).encode('utf-8')
self.wfile.write(json.dumps(postJsonObject).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
@ -1291,8 +1318,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',cookie) msg=htmlInbox(pageNumber,maxPostsInFeed, \
self.wfile.write(htmlInbox(pageNumber,maxPostsInFeed, \
self.server.session, \ self.server.session, \
self.server.baseDir, \ self.server.baseDir, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
@ -1303,10 +1329,13 @@ class PubServer(BaseHTTPRequestHandler):
inboxFeed, \ inboxFeed, \
self.server.allowDeletion, \ self.server.allowDeletion, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.projectVersion).encode('utf-8')) self.server.projectVersion).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(inboxFeed).encode('utf-8')
self.wfile.write(json.dumps(inboxFeed).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
@ -1349,9 +1378,7 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInFeed, 'outbox', \ maxPostsInFeed, 'outbox', \
authorized, \ authorized, \
self.server.ocapAlways) self.server.ocapAlways)
msg=htmlOutbox(pageNumber,maxPostsInFeed, \
self._set_headers('text/html',cookie)
self.wfile.write(htmlOutbox(pageNumber,maxPostsInFeed, \
self.server.session, \ self.server.session, \
self.server.baseDir, \ self.server.baseDir, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
@ -1362,10 +1389,13 @@ class PubServer(BaseHTTPRequestHandler):
outboxFeed, \ outboxFeed, \
self.server.allowDeletion, \ self.server.allowDeletion, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.projectVersion).encode('utf-8')) self.server.projectVersion).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(outboxFeed).encode('utf-8')
self.wfile.write(json.dumps(outboxFeed).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1402,8 +1432,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.httpPrefix, \ self.server.httpPrefix, \
maxPostsInFeed, 'moderation', \ maxPostsInFeed, 'moderation', \
True,self.server.ocapAlways) True,self.server.ocapAlways)
self._set_headers('text/html',cookie) msg=htmlModeration(pageNumber,maxPostsInFeed, \
self.wfile.write(htmlModeration(pageNumber,maxPostsInFeed, \
self.server.session, \ self.server.session, \
self.server.baseDir, \ self.server.baseDir, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
@ -1414,10 +1443,13 @@ class PubServer(BaseHTTPRequestHandler):
moderationFeed, \ moderationFeed, \
True, \ True, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.projectVersion).encode('utf-8')) self.server.projectVersion).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(moderationFeed).encode('utf-8')
self.wfile.write(json.dumps(moderationFeed).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
@ -1453,9 +1485,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)
msg=htmlProfile(self.server.projectVersion, \
self._set_headers('text/html',cookie)
self.wfile.write(htmlProfile(self.server.projectVersion, \
self.server.baseDir, \ self.server.baseDir, \
self.server.httpPrefix, \ self.server.httpPrefix, \
authorized, \ authorized, \
@ -1464,12 +1494,15 @@ class PubServer(BaseHTTPRequestHandler):
self.server.session, \ self.server.session, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
self.server.personCache, \ self.server.personCache, \
shares).encode('utf-8')) shares).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
self._set_headers('application/json',None) msg=json.dumps(shares).encode('utf-8')
self.wfile.write(json.dumps(shares).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1494,8 +1527,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',cookie) msg=htmlProfile(self.server.projectVersion, \
self.wfile.write(htmlProfile(self.server.projectVersion, \
self.server.baseDir, \ self.server.baseDir, \
self.server.httpPrefix, \ self.server.httpPrefix, \
authorized, \ authorized, \
@ -1504,12 +1536,15 @@ class PubServer(BaseHTTPRequestHandler):
self.server.session, \ self.server.session, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
self.server.personCache, \ self.server.personCache, \
following).encode('utf-8')) following).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
self._set_headers('application/json',None) msg=json.dumps(following).encode('utf-8')
self.wfile.write(json.dumps(following).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
followers=getFollowingFeed(self.server.baseDir,self.server.domain, \ followers=getFollowingFeed(self.server.baseDir,self.server.domain, \
@ -1532,8 +1567,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',cookie) msg=htmlProfile(self.server.projectVersion, \
self.wfile.write(htmlProfile(self.server.projectVersion, \
self.server.baseDir, \ self.server.baseDir, \
self.server.httpPrefix, \ self.server.httpPrefix, \
authorized, \ authorized, \
@ -1542,12 +1576,15 @@ class PubServer(BaseHTTPRequestHandler):
self.server.session, \ self.server.session, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
self.server.personCache, \ self.server.personCache, \
followers).encode('utf-8')) followers).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
self._set_headers('application/json',None) msg=json.dumps(followers).encode('utf-8')
self.wfile.write(json.dumps(followers).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
# look up a person # look up a person
@ -1560,8 +1597,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',cookie) msg=htmlProfile(self.server.projectVersion, \
self.wfile.write(htmlProfile(self.server.projectVersion, \
self.server.baseDir, \ self.server.baseDir, \
self.server.httpPrefix, \ self.server.httpPrefix, \
authorized, \ authorized, \
@ -1569,10 +1605,13 @@ class PubServer(BaseHTTPRequestHandler):
getPerson,'posts', getPerson,'posts',
self.server.session, \ self.server.session, \
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
self.server.personCache).encode('utf-8')) self.server.personCache).encode('utf-8')
self._set_headers('text/html',len(msg),cookie)
self.wfile.write(msg)
else: else:
self._set_headers('application/json',None) msg=json.dumps(getPerson).encode('utf-8')
self.wfile.write(json.dumps(getPerson).encode('utf-8')) self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
# check that a json file was requested # check that a json file was requested
@ -1585,11 +1624,12 @@ 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',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)
self.wfile.write(json.dumps(contentJson).encode('utf-8')) msg=json.dumps(contentJson).encode('utf-8')
self._set_headers('application/json',len(msg),None)
self.wfile.write(msg)
else: else:
if self.server.debug: if self.server.debug:
print('DEBUG: GET Unknown file') print('DEBUG: GET Unknown file')
@ -1597,7 +1637,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.GETbusy=False self.server.GETbusy=False
def do_HEAD(self): def do_HEAD(self):
self._set_headers('application/json',None) self._set_headers('application/json',0,None)
def _receiveNewPost(self,authorized: bool,postType: str) -> bool: def _receiveNewPost(self,authorized: bool,postType: str) -> bool:
# 0 = this is not a new post # 0 = this is not a new post
@ -1920,8 +1960,9 @@ class PubServer(BaseHTTPRequestHandler):
return return
else: else:
if isSuspended(self.server.baseDir,loginNickname): if isSuspended(self.server.baseDir,loginNickname):
self._login_headers('text/html') msg=htmlSuspended(self.server.baseDir).encode('utf-8')
self.wfile.write(htmlSuspended(self.server.baseDir).encode('utf-8')) self._login_headers('text/html',len(msg))
self.wfile.write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
# login success - redirect with authorization # login success - redirect with authorization
@ -2177,8 +2218,9 @@ class PubServer(BaseHTTPRequestHandler):
moderationText=moderationStr.split('=')[1].strip() moderationText=moderationStr.split('=')[1].strip()
moderationText=moderationText.replace('+',' ').replace('%40','@').replace('%3A',':').replace('%23','#').strip() moderationText=moderationText.replace('+',' ').replace('%40','@').replace('%3A',':').replace('%23','#').strip()
elif moderationStr.startswith('submitInfo'): elif moderationStr.startswith('submitInfo'):
self._login_headers('text/html') msg=htmlModerationInfo(self.server.baseDir).encode('utf-8')
self.wfile.write(htmlModerationInfo(self.server.baseDir).encode('utf-8')) self._login_headers('text/html',len(msg))
self.wfile.write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
elif moderationStr.startswith('submitBlock'): elif moderationStr.startswith('submitBlock'):
@ -2289,8 +2331,9 @@ class PubServer(BaseHTTPRequestHandler):
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.projectVersion) self.server.projectVersion)
if hashtagStr: if hashtagStr:
self._login_headers('text/html') msg=hashtagStr.encode('utf-8')
self.wfile.write(hashtagStr.encode('utf-8')) self._login_headers('text/html',len(msg))
self.wfile.write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
elif '@' in searchStr: elif '@' in searchStr:
@ -2314,8 +2357,9 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug, \ self.server.debug, \
self.server.projectVersion) self.server.projectVersion)
if profileStr: if profileStr:
self._login_headers('text/html') msg=profileStr.encode('utf-8')
self.wfile.write(profileStr.encode('utf-8')) self._login_headers('text/html',len(msg))
self.wfile.write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
else: else:
@ -2325,8 +2369,9 @@ class PubServer(BaseHTTPRequestHandler):
searchStr,pageNumber, \ searchStr,pageNumber, \
maxPostsInFeed,actorStr) maxPostsInFeed,actorStr)
if sharedItemsStr: if sharedItemsStr:
self._login_headers('text/html') msg=sharedItemsStr.encode('utf-8')
self.wfile.write(sharedItemsStr.encode('utf-8')) self._login_headers('text/html',len(msg))
self.wfile.write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
self._redirect_headers(actorStr,cookie) self._redirect_headers(actorStr,cookie)