Fixing non-ascii text

main
Bob Mottram 2019-11-09 21:39:04 +00:00
parent 8390f49d29
commit 0192532293
15 changed files with 194 additions and 189 deletions

View File

@ -501,7 +501,7 @@ def sendAnnounceViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(fromNickname,password) authHeader=createBasicAuthHeader(fromNickname,password)
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newAnnounceJson,[],inboxUrl,headers,"inbox:write") postJson(session,newAnnounceJson,[],inboxUrl,headers,"inbox:write")

View File

@ -130,7 +130,7 @@ def sendAvailabilityViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(Nickname,password) authHeader=createBasicAuthHeader(Nickname,password)
headers = {'host': domain, \ headers = {'host': domain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newAvailabilityJson,[],inboxUrl,headers,"inbox:write") postJson(session,newAvailabilityJson,[],inboxUrl,headers,"inbox:write")

View File

@ -214,7 +214,7 @@ def sendBlockViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(fromNickname,password) authHeader=createBasicAuthHeader(fromNickname,password)
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newBlockJson,[],inboxUrl,headers,"inbox:write") postJson(session,newBlockJson,[],inboxUrl,headers,"inbox:write")
@ -291,7 +291,7 @@ def sendUndoBlockViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(fromNickname,password) authHeader=createBasicAuthHeader(fromNickname,password)
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newBlockJson,[],inboxUrl,headers,"inbox:write") postJson(session,newBlockJson,[],inboxUrl,headers,"inbox:write")

273
daemon.py
View File

@ -333,7 +333,7 @@ class PubServer(BaseHTTPRequestHandler):
wfResult=webfingerMeta(self.server.httpPrefix,self.server.domainFull) wfResult=webfingerMeta(self.server.httpPrefix,self.server.domainFull)
if wfResult: if wfResult:
msg=wfResult.encode('utf-8') msg=wfResult.encode('utf-8')
self._set_headers('application/xrd+xml; charset=utf-8',len(msg),None) self._set_headers('application/xrd+xml',len(msg),None)
self._write(msg) self._write(msg)
return return
@ -341,8 +341,8 @@ class PubServer(BaseHTTPRequestHandler):
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:
msg=json.dumps(wfResult, ensure_ascii=False).encode('utf-8') msg=json.dumps(wfResult).encode('utf-8')
self._set_headers('application/jrd+json; charset=utf-8',len(msg),None) self._set_headers('application/jrd+json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
if self.server.debug: if self.server.debug:
@ -706,7 +706,7 @@ class PubServer(BaseHTTPRequestHandler):
if self.path=='/logout': if self.path=='/logout':
msg=htmlLogin(self.server.translate, \ msg=htmlLogin(self.server.translate, \
self.server.baseDir,False).encode('utf-8') self.server.baseDir,False).encode('utf-8')
self._logout_headers('text/html; charset=utf-8',len(msg)) self._logout_headers('text/html',len(msg))
self._write(msg) self._write(msg)
return return
@ -785,7 +785,7 @@ class PubServer(BaseHTTPRequestHandler):
optionsProfileUrl, \ optionsProfileUrl, \
optionsLink, \ optionsLink, \
pageNumber,donateUrl).encode() pageNumber,donateUrl).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -807,7 +807,7 @@ class PubServer(BaseHTTPRequestHandler):
self._redirect_headers(actor+'/inbox',cookie) self._redirect_headers(actor+'/inbox',cookie)
self.server.GETbusy=False self.server.GETbusy=False
return return
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -816,7 +816,7 @@ class PubServer(BaseHTTPRequestHandler):
msg=htmlTermsOfService(self.server.baseDir, \ msg=htmlTermsOfService(self.server.baseDir, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.domainFull).encode() self.server.domainFull).encode()
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -825,7 +825,7 @@ class PubServer(BaseHTTPRequestHandler):
msg=htmlAbout(self.server.baseDir, \ msg=htmlAbout(self.server.baseDir, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.domainFull).encode() self.server.domainFull).encode()
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -884,7 +884,7 @@ class PubServer(BaseHTTPRequestHandler):
time.sleep(1) time.sleep(1)
tries+=1 tries+=1
msg=css.encode('utf-8') msg=css.encode('utf-8')
self._set_headers('text/css; charset=utf-8',len(msg),cookie) self._set_headers('text/css',len(msg),cookie)
self._write(msg) self._write(msg)
return return
@ -1142,7 +1142,7 @@ class PubServer(BaseHTTPRequestHandler):
# request basic auth # request basic auth
msg=htmlLogin(self.server.translate, \ msg=htmlLogin(self.server.translate, \
self.server.baseDir).encode('utf-8') self.server.baseDir).encode('utf-8')
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1159,7 +1159,7 @@ class PubServer(BaseHTTPRequestHandler):
hashtag=hashtag.split('?page=')[0] hashtag=hashtag.split('?page=')[0]
if isBlockedHashtag(self.server.baseDir,hashtag): if isBlockedHashtag(self.server.baseDir,hashtag):
msg=htmlHashtagBlocked(self.server.baseDir).encode('utf-8') msg=htmlHashtagBlocked(self.server.baseDir).encode('utf-8')
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1173,7 +1173,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.projectVersion) self.server.projectVersion)
if hashtagStr: if hashtagStr:
msg=hashtagStr.encode() msg=hashtagStr.encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
originPathStr=self.path.split('/tags/')[0] originPathStr=self.path.split('/tags/')[0]
@ -1188,7 +1188,7 @@ class PubServer(BaseHTTPRequestHandler):
# show the search screen # show the search screen
msg=htmlSearch(self.server.translate, \ msg=htmlSearch(self.server.translate, \
self.server.baseDir,self.path).encode() self.server.baseDir,self.path).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1201,7 +1201,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.baseDir,self.path, \ self.server.baseDir,self.path, \
self.server.httpPrefix, \ self.server.httpPrefix, \
self.server.domainFull).encode() self.server.domainFull).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1213,7 +1213,7 @@ class PubServer(BaseHTTPRequestHandler):
msg=htmlSearchEmojiTextEntry(self.server.translate, \ msg=htmlSearchEmojiTextEntry(self.server.translate, \
self.server.baseDir, \ self.server.baseDir, \
self.path).encode() self.path).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1515,7 +1515,7 @@ class PubServer(BaseHTTPRequestHandler):
__version__,self.server.cachedWebfingers, \ __version__,self.server.cachedWebfingers, \
self.server.personCache) self.server.personCache)
if deleteStr: if deleteStr:
self._set_headers('text/html; charset=utf-8',len(deleteStr),cookie) self._set_headers('text/html',len(deleteStr),cookie)
self._write(deleteStr.encode()) self._write(deleteStr.encode())
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1596,7 +1596,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.baseDir, \ self.server.baseDir, \
self.path,self.server.domain, \ self.path,self.server.domain, \
self.server.port).encode() self.server.port).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1615,7 +1615,7 @@ class PubServer(BaseHTTPRequestHandler):
replyToList, \ replyToList, \
shareDescription, \ shareDescription, \
replyPageNumber).encode() replyPageNumber).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -1662,12 +1662,12 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(postJsonObject, ensure_ascii=False).encode('utf-8') msg=json.dumps(postJsonObject,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -1727,14 +1727,14 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
print('----------------------------------------------------') print('----------------------------------------------------')
#pprint(repliesJson) #pprint(repliesJson)
self._write(msg) self._write(msg)
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(repliesJson, ensure_ascii=False).encode('utf-8') msg=json.dumps(repliesJson,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -1778,12 +1778,12 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(repliesJson, ensure_ascii=False).encode('utf-8') msg=json.dumps(repliesJson,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -1820,12 +1820,12 @@ class PubServer(BaseHTTPRequestHandler):
self.server.personCache, \ self.server.personCache, \
actorJson['roles'], \ actorJson['roles'], \
None,None).encode('utf-8') None,None).encode('utf-8')
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(actorJson['roles'], ensure_ascii=False).encode('utf-8') msg=json.dumps(actorJson['roles'],ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -1863,12 +1863,12 @@ class PubServer(BaseHTTPRequestHandler):
self.server.personCache, \ self.server.personCache, \
actorJson['skills'], \ actorJson['skills'], \
None,None).encode('utf-8') None,None).encode('utf-8')
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(actorJson['skills'], ensure_ascii=False).encode('utf-8') msg=json.dumps(actorJson['skills'],ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -1919,12 +1919,12 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(postJsonObject, ensure_ascii=False).encode('utf-8') msg=json.dumps(postJsonObject,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -1981,13 +1981,13 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
# don't need authenticated fetch here because there is # don't need authenticated fetch here because there is
# already the authorization check # already the authorization check
msg=json.dumps(inboxFeed, ensure_ascii=False).encode('utf-8') msg=json.dumps(inboxFeed,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -2051,13 +2051,13 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
# don't need authenticated fetch here because there is # don't need authenticated fetch here because there is
# already the authorization check # already the authorization check
msg=json.dumps(inboxDMFeed, ensure_ascii=False).encode('utf-8') msg=json.dumps(inboxDMFeed,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -2124,13 +2124,13 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
# don't need authenticated fetch here because there is # don't need authenticated fetch here because there is
# already the authorization check # already the authorization check
msg=json.dumps(inboxRepliesFeed, ensure_ascii=False).encode('utf-8') msg=json.dumps(inboxRepliesFeed,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -2197,13 +2197,13 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
# don't need authenticated fetch here because there is # don't need authenticated fetch here because there is
# already the authorization check # already the authorization check
msg=json.dumps(inboxMediaFeed, ensure_ascii=False).encode('utf-8') msg=json.dumps(inboxMediaFeed,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -2247,7 +2247,7 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -2303,12 +2303,12 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(outboxFeed, ensure_ascii=False).encode('utf-8') msg=json.dumps(outboxFeed,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -2365,13 +2365,13 @@ class PubServer(BaseHTTPRequestHandler):
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; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
# don't need authenticated fetch here because there is # don't need authenticated fetch here because there is
# already the authorization check # already the authorization check
msg=json.dumps(moderationFeed, ensure_ascii=False).encode('utf-8') msg=json.dumps(moderationFeed,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
@ -2434,14 +2434,14 @@ class PubServer(BaseHTTPRequestHandler):
self.server.personCache, \ self.server.personCache, \
shares, \ shares, \
pageNumber,sharesPerPage).encode('utf-8') pageNumber,sharesPerPage).encode('utf-8')
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(shares, ensure_ascii=False).encode('utf-8') msg=json.dumps(shares,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -2490,14 +2490,14 @@ class PubServer(BaseHTTPRequestHandler):
self.server.personCache, \ self.server.personCache, \
following, \ following, \
pageNumber,followsPerPage).encode('utf-8') pageNumber,followsPerPage).encode('utf-8')
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(following, ensure_ascii=False).encode('utf-8') msg=json.dumps(following,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -2545,14 +2545,14 @@ class PubServer(BaseHTTPRequestHandler):
self.server.personCache, \ self.server.personCache, \
followers, \ followers, \
pageNumber,followsPerPage).encode('utf-8') pageNumber,followsPerPage).encode('utf-8')
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.GETbusy=False self.server.GETbusy=False
return return
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(followers, ensure_ascii=False).encode('utf-8') msg=json.dumps(followers,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -2580,12 +2580,12 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cachedWebfingers, \ self.server.cachedWebfingers, \
self.server.personCache, \ self.server.personCache, \
None,None).encode('utf-8') None,None).encode('utf-8')
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
else: else:
if self._fetchAuthenticated(): if self._fetchAuthenticated():
msg=json.dumps(getPerson, ensure_ascii=False).encode('utf-8') msg=json.dumps(getPerson,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
self._404() self._404()
@ -2610,8 +2610,8 @@ class PubServer(BaseHTTPRequestHandler):
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)
msg=json.dumps(contentJson, ensure_ascii=False).encode('utf-8') msg=json.dumps(contentJson,ensure_ascii=False).encode('utf-8')
self._set_headers('application/json; charset=utf-8',len(msg),None) self._set_headers('application/json',len(msg),None)
self._write(msg) self._write(msg)
else: else:
if self.server.debug: if self.server.debug:
@ -2620,7 +2620,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; charset=utf-8',0,None) self._set_headers('application/json',0,None)
def _receiveNewPostProcess(self,authorized: bool, \ def _receiveNewPostProcess(self,authorized: bool, \
postType: str,path: str,headers: {}) -> int: postType: str,path: str,headers: {}) -> int:
@ -2653,10 +2653,18 @@ class PubServer(BaseHTTPRequestHandler):
# why don't we just use msg.is_multipart(), rather than splitting? # why don't we just use msg.is_multipart(), rather than splitting?
# TL;DR it doesn't work for this use case because we're not using # TL;DR it doesn't work for this use case because we're not using
# email style encoding message/rfc822 # email style encoding message/rfc822
messageFields=msg.get_payload(decode=False).split(boundary) imageBoundary=b'Content-Disposition: form-data; name="attachpic";'
imageLocation=postBytes.find(imageBoundary)
if imageLocation>-1:
# get the first part of the data containing text fields
# If we try to use decode=True on the full data, including images,
# then it will fail
msg = email.parser.BytesParser().parsebytes(postBytes[:imageLocation])
messageFields=msg.get_payload(decode=True).decode('utf-8').split(boundary)
fields={} fields={}
filename=None filename=None
attachmentMediaType=None attachmentMediaType=None
# get the text fields
for f in messageFields: for f in messageFields:
if f=='--': if f=='--':
continue continue
@ -2675,52 +2683,56 @@ class PubServer(BaseHTTPRequestHandler):
postValue+='\n' postValue+='\n'
postValue+=postLines[line] postValue+=postLines[line]
fields[postKey]=postValue fields[postKey]=postValue
else: # now extract any attached image or other media
# directly search the binary array for the beginning if imageLocation>-1:
# of an image imageLocation2=-1
extensionList=['png','jpeg','gif','mp4','webm','ogv','mp3','ogg'] filename=None
for extension in extensionList: searchStr=''
searchStr=b'Content-Type: image/png' # directly search the binary array for the beginning
if extension=='jpeg': # of an image
searchStr=b'Content-Type: image/jpeg' extensionList=['png','jpeg','gif','mp4','webm','ogv','mp3','ogg']
elif extension=='gif': for extension in extensionList:
searchStr=b'Content-Type: image/gif' searchStr=b'Content-Type: image/png'
elif extension=='mp4': if extension=='jpeg':
searchStr=b'Content-Type: video/mp4' searchStr=b'Content-Type: image/jpeg'
elif extension=='ogv': elif extension=='gif':
searchStr=b'Content-Type: video/ogv' searchStr=b'Content-Type: image/gif'
elif extension=='mp3': elif extension=='mp4':
searchStr=b'Content-Type: audio/mpeg' searchStr=b'Content-Type: video/mp4'
elif extension=='ogg': elif extension=='ogv':
searchStr=b'Content-Type: audio/ogg' searchStr=b'Content-Type: video/ogv'
imageLocation=postBytes.find(searchStr) elif extension=='mp3':
filenameBase= \ searchStr=b'Content-Type: audio/mpeg'
self.server.baseDir+'/accounts/'+ \ elif extension=='ogg':
nickname+'@'+self.server.domain+'/upload' searchStr=b'Content-Type: audio/ogg'
if imageLocation>-1: imageLocation2=postBytes.find(searchStr)
if extension=='jpeg': filenameBase= \
extension='jpg' self.server.baseDir+'/accounts/'+ \
if extension=='mpeg': nickname+'@'+self.server.domain+'/upload'
extension='mp3' if imageLocation2>-1:
filename=filenameBase+'.'+extension if extension=='jpeg':
attachmentMediaType= \ extension='jpg'
searchStr.decode().split('/')[0].replace('Content-Type: ','') elif extension=='mpeg':
break extension='mp3'
if filename and imageLocation>-1: filename=filenameBase+'.'+extension
# locate the beginning of the image, after any attachmentMediaType= \
# carriage returns searchStr.decode().split('/')[0].replace('Content-Type: ','')
startPos=imageLocation+len(searchStr) break
for offset in range(1,8): if filename and imageLocation2>-1:
if postBytes[startPos+offset]!=10: # locate the beginning of the image, after any
if postBytes[startPos+offset]!=13: # carriage returns
startPos+=offset startPos=imageLocation2+len(searchStr)
break for offset in range(1,8):
if postBytes[startPos+offset]!=10:
if postBytes[startPos+offset]!=13:
startPos+=offset
break
fd = open(filename, 'wb') fd = open(filename, 'wb')
fd.write(postBytes[startPos:]) fd.write(postBytes[startPos:])
fd.close() fd.close()
else: else:
filename=None filename=None
# send the post # send the post
if not fields.get('message') and not fields.get('imageDescription'): if not fields.get('message') and not fields.get('imageDescription'):
@ -3039,7 +3051,7 @@ class PubServer(BaseHTTPRequestHandler):
else: else:
if isSuspended(self.server.baseDir,loginNickname): if isSuspended(self.server.baseDir,loginNickname):
msg=htmlSuspended(self.server.baseDir).encode('utf-8') msg=htmlSuspended(self.server.baseDir).encode('utf-8')
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -3118,6 +3130,7 @@ class PubServer(BaseHTTPRequestHandler):
postBytes=self.rfile.read(length) postBytes=self.rfile.read(length)
msg = email.parser.BytesParser().parsebytes(postBytes) msg = email.parser.BytesParser().parsebytes(postBytes)
#messageFields=msg.get_payload(decode=True).decode('utf-8').split(boundary)
messageFields=msg.get_payload(decode=False).split(boundary) messageFields=msg.get_payload(decode=False).split(boundary)
fields={} fields={}
filename=None filename=None
@ -3415,7 +3428,7 @@ class PubServer(BaseHTTPRequestHandler):
elif moderationStr.startswith('submitInfo'): elif moderationStr.startswith('submitInfo'):
msg=htmlModerationInfo(self.server.translate, \ msg=htmlModerationInfo(self.server.translate, \
self.server.baseDir).encode('utf-8') self.server.baseDir).encode('utf-8')
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -3616,7 +3629,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.projectVersion) self.server.projectVersion)
if hashtagStr: if hashtagStr:
msg=hashtagStr.encode('utf-8') msg=hashtagStr.encode('utf-8')
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -3630,7 +3643,7 @@ class PubServer(BaseHTTPRequestHandler):
64) 64)
if skillStr: if skillStr:
msg=skillStr.encode('utf-8') msg=skillStr.encode('utf-8')
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -3657,7 +3670,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.projectVersion) self.server.projectVersion)
if profileStr: if profileStr:
msg=profileStr.encode('utf-8') msg=profileStr.encode('utf-8')
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -3677,7 +3690,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.baseDir,searchStr) self.server.baseDir,searchStr)
if emojiStr: if emojiStr:
msg=emojiStr.encode('utf-8') msg=emojiStr.encode('utf-8')
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -3693,7 +3706,7 @@ class PubServer(BaseHTTPRequestHandler):
actorStr) actorStr)
if sharedItemsStr: if sharedItemsStr:
msg=sharedItemsStr.encode('utf-8') msg=sharedItemsStr.encode('utf-8')
self._login_headers('text/html; charset=utf-8',len(msg)) self._login_headers('text/html',len(msg))
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -4026,7 +4039,7 @@ class PubServer(BaseHTTPRequestHandler):
originPathStr, \ originPathStr, \
optionsActor, \ optionsActor, \
optionsAvatarUrl).encode() optionsAvatarUrl).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -4038,7 +4051,7 @@ class PubServer(BaseHTTPRequestHandler):
originPathStr, \ originPathStr, \
optionsActor, \ optionsActor, \
optionsAvatarUrl).encode() optionsAvatarUrl).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -4050,7 +4063,7 @@ class PubServer(BaseHTTPRequestHandler):
originPathStr, \ originPathStr, \
optionsActor, \ optionsActor, \
optionsAvatarUrl).encode() optionsAvatarUrl).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -4063,7 +4076,7 @@ class PubServer(BaseHTTPRequestHandler):
reportPath,None, \ reportPath,None, \
[optionsActor],None, \ [optionsActor],None, \
pageNumber).encode() pageNumber).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -4095,7 +4108,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.baseDir, \ self.server.baseDir, \
reportPath,None,[], \ reportPath,None,[], \
postUrl,pageNumber).encode() postUrl,pageNumber).encode()
self._set_headers('text/html; charset=utf-8',len(msg),cookie) self._set_headers('text/html',len(msg),cookie)
self._write(msg) self._write(msg)
self.server.POSTbusy=False self.server.POSTbusy=False
return return
@ -4247,8 +4260,8 @@ class PubServer(BaseHTTPRequestHandler):
return return
# refuse to receive non-json content # refuse to receive non-json content
if 'application/json' not in self.headers['Content-type'] and \ if self.headers['Content-type'] != 'application/json' and \
'application/activity+json' not in self.headers['Content-type']: self.headers['Content-type'] != 'application/activity+json':
print("POST is not json: "+self.headers['Content-type']) print("POST is not json: "+self.headers['Content-type'])
if self.server.debug: if self.server.debug:
print(str(self.headers)) print(str(self.headers))

View File

@ -144,7 +144,7 @@ def sendDeleteViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(fromNickname,password) authHeader=createBasicAuthHeader(fromNickname,password)
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newDeleteJson,[],inboxUrl,headers,"inbox:write") postJson(session,newDeleteJson,[],inboxUrl,headers,"inbox:write")

View File

@ -733,7 +733,7 @@ def sendFollowRequestViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(fromNickname,password) authHeader=createBasicAuthHeader(fromNickname,password)
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newFollowJson,[],inboxUrl,headers,"inbox:write") postJson(session,newFollowJson,[],inboxUrl,headers,"inbox:write")
@ -818,7 +818,7 @@ def sendUnfollowRequestViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(fromNickname,password) authHeader=createBasicAuthHeader(fromNickname,password)
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,unfollowJson,[],inboxUrl,headers,"inbox:write") postJson(session,unfollowJson,[],inboxUrl,headers,"inbox:write")

View File

@ -47,10 +47,10 @@ def signPostHeaders(dateStr: str,privateKeyPem: str, \
dateStr=strftime("%a, %d %b %Y %H:%M:%S %Z", gmtime()) dateStr=strftime("%a, %d %b %Y %H:%M:%S %Z", gmtime())
keyID=httpPrefix+'://'+domain+'/users/'+nickname+'#main-key' keyID=httpPrefix+'://'+domain+'/users/'+nickname+'#main-key'
if not messageBodyJsonStr: if not messageBodyJsonStr:
headers={'(request-target)': f'post {path}','host': toDomain,'date': dateStr,'content-type': 'application/json; charset=utf-8'} headers={'(request-target)': f'post {path}','host': toDomain,'date': dateStr,'content-type': 'application/json'}
else: else:
bodyDigest=messageContentDigest(messageBodyJsonStr) bodyDigest=messageContentDigest(messageBodyJsonStr)
headers={'(request-target)': f'post {path}','host': toDomain,'date': dateStr,'digest': f'SHA-256={bodyDigest}','content-type': 'application/activity+json; charset=utf-8'} headers={'(request-target)': f'post {path}','host': toDomain,'date': dateStr,'digest': f'SHA-256={bodyDigest}','content-type': 'application/activity+json'}
privateKeyPem=RSA.import_key(privateKeyPem) privateKeyPem=RSA.import_key(privateKeyPem)
#headers.update({ #headers.update({
# '(request-target)': f'post {path}', # '(request-target)': f'post {path}',
@ -87,7 +87,7 @@ def createSignedHeader(privateKeyPem: str,nickname: str, \
messageBodyJsonStr: str) -> {}: messageBodyJsonStr: str) -> {}:
"""Note that the domain is the destination, not the sender """Note that the domain is the destination, not the sender
""" """
contentType='application/activity+json; charset=utf-8' contentType='application/activity+json'
headerDomain=toDomain headerDomain=toDomain
if toPort: if toPort:

View File

@ -402,7 +402,7 @@ def sendLikeViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(fromNickname,password) authHeader=createBasicAuthHeader(fromNickname,password)
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newLikeJson,[],inboxUrl,headers,"inbox:write") postJson(session,newLikeJson,[],inboxUrl,headers,"inbox:write")
@ -481,7 +481,7 @@ def sendUndoLikeViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(fromNickname,password) authHeader=createBasicAuthHeader(fromNickname,password)
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newUndoLikeJson,[],inboxUrl,headers,"inbox:write") postJson(session,newUndoLikeJson,[],inboxUrl,headers,"inbox:write")

View File

@ -120,7 +120,7 @@ def getUserUrl(wfRequest: {}) -> str:
if wfRequest.get('links'): if wfRequest.get('links'):
for link in wfRequest['links']: for link in wfRequest['links']:
if link.get('type') and link.get('href'): if link.get('type') and link.get('href'):
if 'application/activity+json' in link['type']: if link['type'] == 'application/activity+json':
if not ('/users/' in link['href'] or \ if not ('/users/' in link['href'] or \
'/profile/' in link['href'] or \ '/profile/' in link['href'] or \
'/channel/' in link['href']): '/channel/' in link['href']):
@ -1250,7 +1250,7 @@ def sendPostViaServer(projectVersion: str, \
# return 9 # return 9
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJsonString(session,json.dumps(postJsonObject),[],inboxUrl,headers,"inbox:write",debug) postJsonString(session,json.dumps(postJsonObject),[],inboxUrl,headers,"inbox:write",debug)
@ -1420,7 +1420,7 @@ def sendSignedJson(postJsonObject: {},session,baseDir: str, \
# convert json to string so that there are no # convert json to string so that there are no
# subsequent conversions after creating message body digest # subsequent conversions after creating message body digest
postJsonStr=json.dumps(postJsonObject, ensure_ascii=False) postJsonStr=json.dumps(postJsonObject)
# construct the http header, including the message body digest # construct the http header, including the message body digest
signatureHeaderJson = \ signatureHeaderJson = \
@ -1894,34 +1894,29 @@ def isImageMedia(session,baseDir: str,httpPrefix: str,nickname: str,domain: str,
def isReply(postJsonObject: {},actor: str) -> bool: def isReply(postJsonObject: {},actor: str) -> bool:
"""Returns true if the given post is a reply to the given actor """Returns true if the given post is a reply to the given actor
""" """
if isDM(postJsonObject): if postJsonObject['type']!='Create':
if postJsonObject['object'].get('inReplyTo'): return False
if postJsonObject['object']['inReplyTo'].startswith(actor): if not postJsonObject.get('object'):
return True return False
else: if not isinstance(postJsonObject['object'], dict):
if postJsonObject['type']!='Create': return False
return False if postJsonObject['object']['type']!='Note':
if not postJsonObject.get('object'): return False
return False if postJsonObject['object'].get('inReplyTo'):
if not isinstance(postJsonObject['object'], dict): if postJsonObject['object']['inReplyTo'].startswith(actor):
return False return True
if postJsonObject['object']['type']!='Note': if not postJsonObject['object'].get('tag'):
return False return False
if postJsonObject['object'].get('inReplyTo'): if not isinstance(postJsonObject['object']['tag'], list):
if postJsonObject['object']['inReplyTo'].startswith(actor): return False
return True for tag in postJsonObject['object']['tag']:
if not postJsonObject['object'].get('tag'): if not tag.get('type'):
return False continue
if not isinstance(postJsonObject['object']['tag'], list): if tag['type']=='Mention':
return False if not tag.get('href'):
for tag in postJsonObject['object']['tag']:
if not tag.get('type'):
continue continue
if tag['type']=='Mention': if actor in tag['href']:
if not tag.get('href'): return True
continue
if actor in tag['href']:
return True
return False return False
def createBoxIndex(boxDir: str,postsInBoxDict: {}) -> int: def createBoxIndex(boxDir: str,postsInBoxDict: {}) -> int:

View File

@ -281,7 +281,7 @@ def sendRoleViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(delegatorNickname,password) authHeader=createBasicAuthHeader(delegatorNickname,password)
headers = {'host': delegatorDomain, \ headers = {'host': delegatorDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newRoleJson,[],inboxUrl,headers,"inbox:write") postJson(session,newRoleJson,[],inboxUrl,headers,"inbox:write")
@ -294,4 +294,3 @@ def sendRoleViaServer(baseDir: str,session, \
print('DEBUG: c2s POST role success') print('DEBUG: c2s POST role success')
return newRoleJson return newRoleJson

View File

@ -96,7 +96,7 @@ def postJsonString(session,postJsonStr: str, \
postResult = session.post(url = inboxUrl, data = postJsonStr, headers=headers) postResult = session.post(url = inboxUrl, data = postJsonStr, headers=headers)
if postResult.status_code<200 or postResult.status_code>202: if postResult.status_code<200 or postResult.status_code>202:
#if postResult.status_code==400: #if postResult.status_code==400:
# headers['content-type']='application/ld+json; charset=utf-8' # headers['content-type']='application/ld+json'
# postResult = session.post(url = inboxUrl, data = postJsonStr, headers=headers) # postResult = session.post(url = inboxUrl, data = postJsonStr, headers=headers)
# if not (postResult.status_code<200 or postResult.status_code>202): # if not (postResult.status_code<200 or postResult.status_code>202):
# return True # return True

View File

@ -392,7 +392,7 @@ def sendShareViaServer(baseDir,session, \
postImage(session,imageFilename,[],inboxUrl.replace('/'+postToBox,'/shares'),headers,"inbox:write") postImage(session,imageFilename,[],inboxUrl.replace('/'+postToBox,'/shares'),headers,"inbox:write")
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newShareJson,[],inboxUrl,headers,"inbox:write") postJson(session,newShareJson,[],inboxUrl,headers,"inbox:write")
@ -473,7 +473,7 @@ def sendUndoShareViaServer(baseDir: str,session, \
authHeader=createBasicAuthHeader(fromNickname,password) authHeader=createBasicAuthHeader(fromNickname,password)
headers = {'host': fromDomain, \ headers = {'host': fromDomain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,undoShareJson,[],inboxUrl,headers,"inbox:write") postJson(session,undoShareJson,[],inboxUrl,headers,"inbox:write")

View File

@ -151,7 +151,7 @@ def sendSkillViaServer(baseDir: str,session,nickname: str,password: str,
authHeader=createBasicAuthHeader(Nickname,password) authHeader=createBasicAuthHeader(Nickname,password)
headers = {'host': domain, \ headers = {'host': domain, \
'Content-type': 'application/json; charset=utf-8', \ 'Content-type': 'application/json', \
'Authorization': authHeader} 'Authorization': authHeader}
postResult = \ postResult = \
postJson(session,newSkillJson,[],inboxUrl,headers,"inbox:write") postJson(session,newSkillJson,[],inboxUrl,headers,"inbox:write")

View File

@ -85,7 +85,7 @@ def testHttpsigBase(withDigest):
os.mkdir(path) os.mkdir(path)
os.chdir(path) os.chdir(path)
contentType='application/activity+json; charset=utf-8' contentType='application/activity+json'
nickname='socrates' nickname='socrates'
domain='argumentative.social' domain='argumentative.social'
httpPrefix='https' httpPrefix='https'
@ -106,7 +106,7 @@ def testHttpsigBase(withDigest):
dateStr=strftime("%a, %d %b %Y %H:%M:%S %Z", gmtime()) dateStr=strftime("%a, %d %b %Y %H:%M:%S %Z", gmtime())
boxpath='/inbox' boxpath='/inbox'
if not withDigest: if not withDigest:
headers = {'host': headersDomain,'date': dateStr,'content-type': 'application/json; charset=utf-8'} headers = {'host': headersDomain,'date': dateStr,'content-type': 'application/json'}
signatureHeader = \ signatureHeader = \
signPostHeaders(dateStr,privateKeyPem, nickname, \ signPostHeaders(dateStr,privateKeyPem, nickname, \
domain, port, \ domain, port, \
@ -122,7 +122,6 @@ def testHttpsigBase(withDigest):
boxpath, httpPrefix, messageBodyJsonStr) boxpath, httpPrefix, messageBodyJsonStr)
headers['signature'] = signatureHeader headers['signature'] = signatureHeader
assert 'utf-8' in headers['content-type']
assert verifyPostHeaders(httpPrefix,publicKeyPem,headers, \ assert verifyPostHeaders(httpPrefix,publicKeyPem,headers, \
boxpath,False,None, \ boxpath,False,None, \
messageBodyJsonStr) messageBodyJsonStr)
@ -134,7 +133,7 @@ def testHttpsigBase(withDigest):
messageBodyJsonStr) == False messageBodyJsonStr) == False
if not withDigest: if not withDigest:
# fake domain # fake domain
headers = {'host': 'bogon.domain','date': dateStr,'content-type': 'application/json; charset=utf-8'} headers = {'host': 'bogon.domain','date': dateStr,'content-type': 'application/json'}
else: else:
# correct domain but fake message # correct domain but fake message
messageBodyJsonStr = '{"a key": "a value", "another key": "Fake GNUs", "yet another key": "More Fake GNUs"}' messageBodyJsonStr = '{"a key": "a value", "another key": "Fake GNUs", "yet another key": "More Fake GNUs"}'
@ -391,7 +390,7 @@ def testPostMessageBetweenServers():
sendPost(__version__, \ sendPost(__version__, \
sessionAlice,aliceDir,'alice', aliceDomain, alicePort, \ sessionAlice,aliceDir,'alice', aliceDomain, alicePort, \
'bob', bobDomain, bobPort, ccUrl, httpPrefix, \ 'bob', bobDomain, bobPort, ccUrl, httpPrefix, \
'Why is a mouse when it spins? Crème brûlée यह एक परीक्षण है #sillyquestion', followersOnly, \ 'Why is a mouse when it spins? यह एक परीक्षण है #sillyquestion', followersOnly, \
saveToFile, clientToServer,attachedImageFilename,mediaType, \ saveToFile, clientToServer,attachedImageFilename,mediaType, \
attachedImageDescription,useBlurhash, federationList, \ attachedImageDescription,useBlurhash, federationList, \
aliceSendThreads, alicePostLog, aliceCachedWebfingers, \ aliceSendThreads, alicePostLog, aliceCachedWebfingers, \
@ -432,7 +431,6 @@ def testPostMessageBetweenServers():
assert receivedJson assert receivedJson
assert 'Why is a mouse when it spins?' in receivedJson['object']['content'] assert 'Why is a mouse when it spins?' in receivedJson['object']['content']
assert 'यह एक परीक्षण है' in receivedJson['object']['content'] assert 'यह एक परीक्षण है' in receivedJson['object']['content']
assert 'Crème brûlée' in receivedJson['object']['content']
print('\n\n*******************************************************') print('\n\n*******************************************************')
print("Bob likes Alice's post") print("Bob likes Alice's post")
@ -931,7 +929,7 @@ def testFollowBetweenServers():
assert 'bob@'+bobDomain in open(aliceDir+'/accounts/alice@'+aliceDomain+'/following.txt').read() assert 'bob@'+bobDomain in open(aliceDir+'/accounts/alice@'+aliceDomain+'/following.txt').read()
# queue item removed # queue item removed
time.sleep(2) time.sleep(4)
assert len([name for name in os.listdir(queuePath) if os.path.isfile(os.path.join(queuePath, name))])==0 assert len([name for name in os.listdir(queuePath) if os.path.isfile(os.path.join(queuePath, name))])==0
os.chdir(baseDir) os.chdir(baseDir)
@ -1600,7 +1598,7 @@ def testGetStatusNumber():
assert int(statusNumber) > prevStatusNumber assert int(statusNumber) > prevStatusNumber
prevStatusNumber=int(statusNumber) prevStatusNumber=int(statusNumber)
def testCommentJson(): def testCommentJson() -> None:
print('testCommentJson') print('testCommentJson')
filename='/tmp/test.json' filename='/tmp/test.json'
messageStr="Crème brûlée यह एक परीक्षण ह" messageStr="Crème brûlée यह एक परीक्षण ह"

View File

@ -606,7 +606,7 @@ def htmlEditProfile(translate: {},baseDir: str,path: str,domain: str,port: int)
editProfileForm=htmlHeader(cssFilename,editProfileCSS) editProfileForm=htmlHeader(cssFilename,editProfileCSS)
editProfileForm+= \ editProfileForm+= \
'<form enctype="multipart/form-data" method="POST" action="'+path+'/profiledata">' \ '<form enctype="multipart/form-data" method="POST" accept-charset="UTF-8" action="'+path+'/profiledata">' \
' <div class="vertical-center">' \ ' <div class="vertical-center">' \
' <p class="new-post-text">'+translate['Profile for']+' '+nickname+'@'+domainFull+'</p>' \ ' <p class="new-post-text">'+translate['Profile for']+' '+nickname+'@'+domainFull+'</p>' \
' <div class="container">' \ ' <div class="container">' \
@ -1001,7 +1001,7 @@ def htmlNewPost(translate: {},baseDir: str, \
mentionsStr='Re: '+reportUrl+'\n\n'+mentionsStr mentionsStr='Re: '+reportUrl+'\n\n'+mentionsStr
newPostForm+= \ newPostForm+= \
'<form enctype="multipart/form-data" method="POST" action="'+path+'?'+endpoint+'?page='+str(pageNumber)+'">' \ '<form enctype="multipart/form-data" method="POST" accept-charset="UTF-8" action="'+path+'?'+endpoint+'?page='+str(pageNumber)+'">' \
' <div class="vertical-center">' \ ' <div class="vertical-center">' \
' <label for="nickname"><b>'+newPostText+'</b></label>' \ ' <label for="nickname"><b>'+newPostText+'</b></label>' \
' <div class="container">' \ ' <div class="container">' \
@ -3321,7 +3321,7 @@ def htmlSearch(translate: {}, \
followStr+=' <center>' followStr+=' <center>'
followStr+=' <p class="followText">'+translate['Enter an address, shared item, #hashtag, *skill or :emoji: to search for']+'</p>' followStr+=' <p class="followText">'+translate['Enter an address, shared item, #hashtag, *skill or :emoji: to search for']+'</p>'
followStr+= \ followStr+= \
' <form method="POST" action="'+actor+'/searchhandle">' \ ' <form method="POST" accept-charset="UTF-8" action="'+actor+'/searchhandle">' \
' <input type="hidden" name="actor" value="'+actor+'">' \ ' <input type="hidden" name="actor" value="'+actor+'">' \
' <input type="text" name="searchtext" autofocus><br>' \ ' <input type="text" name="searchtext" autofocus><br>' \
' <button type="submit" class="button" name="submitSearch">'+translate['Submit']+'</button>' \ ' <button type="submit" class="button" name="submitSearch">'+translate['Submit']+'</button>' \