forked from indymedia/epicyon
Reduce line lengths
parent
f9e8c09826
commit
2047e86684
214
daemon.py
214
daemon.py
|
@ -3948,10 +3948,12 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
# Instead we use the multipart mime parser from the email module
|
# Instead we use the multipart mime parser from the email module
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('DEBUG: extracting media from POST')
|
print('DEBUG: extracting media from POST')
|
||||||
mediaBytes,postBytes=extractMediaInFormPOST(postBytes,boundary,'attachpic')
|
mediaBytes,postBytes= \
|
||||||
|
extractMediaInFormPOST(postBytes,boundary,'attachpic')
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
if mediaBytes:
|
if mediaBytes:
|
||||||
print('DEBUG: media was found. '+str(len(mediaBytes))+' bytes')
|
print('DEBUG: media was found. '+ \
|
||||||
|
str(len(mediaBytes))+' bytes')
|
||||||
else:
|
else:
|
||||||
print('DEBUG: no media was found in POST')
|
print('DEBUG: no media was found in POST')
|
||||||
|
|
||||||
|
@ -3981,12 +3983,14 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if os.path.isfile(postImageFilename):
|
if os.path.isfile(postImageFilename):
|
||||||
print('POST media saved to '+postImageFilename)
|
print('POST media saved to '+postImageFilename)
|
||||||
else:
|
else:
|
||||||
print('ERROR: POST media could not be saved to '+postImageFilename)
|
print('ERROR: POST media could not be saved to '+ \
|
||||||
|
postImageFilename)
|
||||||
else:
|
else:
|
||||||
if os.path.isfile(filename):
|
if os.path.isfile(filename):
|
||||||
os.rename(filename,filename.replace('.temp',''))
|
os.rename(filename,filename.replace('.temp',''))
|
||||||
|
|
||||||
fields=extractTextFieldsInPOST(postBytes,boundary,self.server.debug)
|
fields= \
|
||||||
|
extractTextFieldsInPOST(postBytes,boundary,self.server.debug)
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
if fields:
|
if fields:
|
||||||
print('DEBUG: text field extracted from POST '+str(fields))
|
print('DEBUG: text field extracted from POST '+str(fields))
|
||||||
|
@ -4153,7 +4157,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
print('Edited blog post, resaved '+postFilename)
|
print('Edited blog post, resaved '+postFilename)
|
||||||
return 1
|
return 1
|
||||||
else:
|
else:
|
||||||
print('Edited blog post, unable to load json for '+postFilename)
|
print('Edited blog post, unable to load json for '+ \
|
||||||
|
postFilename)
|
||||||
else:
|
else:
|
||||||
print('Edited blog post not found '+str(fields['postUrl']))
|
print('Edited blog post not found '+str(fields['postUrl']))
|
||||||
return -1
|
return -1
|
||||||
|
@ -4218,7 +4223,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
messageJson= \
|
messageJson= \
|
||||||
createDirectMessagePost(self.server.baseDir, \
|
createDirectMessagePost(self.server.baseDir, \
|
||||||
nickname, \
|
nickname, \
|
||||||
self.server.domain,self.server.port, \
|
self.server.domain, \
|
||||||
|
self.server.port, \
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
fields['message'],True,False,False, \
|
fields['message'],True,False,False, \
|
||||||
filename,attachmentMediaType, \
|
filename,attachmentMediaType, \
|
||||||
|
@ -4342,11 +4348,13 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if '/users/' not in path:
|
if '/users/' not in path:
|
||||||
print('Not receiving new post for '+path+' because /users/ not in path')
|
print('Not receiving new post for '+path+ \
|
||||||
|
' because /users/ not in path')
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if '?'+postType+'?' not in path:
|
if '?'+postType+'?' not in path:
|
||||||
print('Not receiving new post for '+path+' because ?'+postType+'? not in path')
|
print('Not receiving new post for '+path+' because ?'+ \
|
||||||
|
postType+'? not in path')
|
||||||
return None
|
return None
|
||||||
|
|
||||||
print('New post begins: '+postType+' '+path)
|
print('New post begins: '+postType+' '+path)
|
||||||
|
@ -4371,7 +4379,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if self.server.newPostThread.get(newPostThreadName):
|
if self.server.newPostThread.get(newPostThreadName):
|
||||||
print('Waiting for previous new post thread to end')
|
print('Waiting for previous new post thread to end')
|
||||||
waitCtr=0
|
waitCtr=0
|
||||||
while self.server.newPostThread[newPostThreadName].isAlive() and waitCtr<8:
|
while self.server.newPostThread[newPostThreadName].isAlive() and \
|
||||||
|
waitCtr<8:
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
waitCtr+=1
|
waitCtr+=1
|
||||||
if waitCtr>=8:
|
if waitCtr>=8:
|
||||||
|
@ -4412,10 +4421,13 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
print('POST size too large')
|
print('POST size too large')
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Note sending new posts needs to be synchronous, otherwise any attachments
|
# Note sending new posts needs to be synchronous,
|
||||||
# can get mangled if other events happen during their decoding
|
# otherwise any attachments can get mangled if
|
||||||
|
# other events happen during their decoding
|
||||||
print('Creating new post from: '+newPostThreadName)
|
print('Creating new post from: '+newPostThreadName)
|
||||||
self._receiveNewPostProcess(authorized,postType,path,headers,length,postBytes,boundary)
|
self._receiveNewPostProcess(authorized,postType, \
|
||||||
|
path,headers,length, \
|
||||||
|
postBytes,boundary)
|
||||||
return pageNumber
|
return pageNumber
|
||||||
|
|
||||||
def do_POST(self):
|
def do_POST(self):
|
||||||
|
@ -4527,7 +4539,9 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
if callingDomain.endswith('.onion') and \
|
if callingDomain.endswith('.onion') and \
|
||||||
self.server.onionDomain:
|
self.server.onionDomain:
|
||||||
self._redirect_headers('http://'+self.server.onionDomain+'/login', \
|
self._redirect_headers('http://'+ \
|
||||||
|
self.server.onionDomain+ \
|
||||||
|
'/login', \
|
||||||
cookie,callingDomain)
|
cookie,callingDomain)
|
||||||
else:
|
else:
|
||||||
self._redirect_headers(self.server.httpPrefix+'://'+ \
|
self._redirect_headers(self.server.httpPrefix+'://'+ \
|
||||||
|
@ -4552,7 +4566,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
print('Login success: '+loginNickname)
|
print('Login success: '+loginNickname)
|
||||||
self.send_response(303)
|
self.send_response(303)
|
||||||
# re-activate account if needed
|
# re-activate account if needed
|
||||||
activateAccount(self.server.baseDir,loginNickname,self.server.domain)
|
activateAccount(self.server.baseDir,loginNickname, \
|
||||||
|
self.server.domain)
|
||||||
# This produces a deterministic token based on nick+password+salt
|
# This produces a deterministic token based on nick+password+salt
|
||||||
saltFilename= \
|
saltFilename= \
|
||||||
self.server.baseDir+'/accounts/'+ \
|
self.server.baseDir+'/accounts/'+ \
|
||||||
|
@ -4573,7 +4588,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
print('WARN: Unable to save salt for '+ \
|
print('WARN: Unable to save salt for '+ \
|
||||||
loginNickname+' '+str(e))
|
loginNickname+' '+str(e))
|
||||||
|
|
||||||
token=sha256((loginNickname+loginPassword+salt).encode('utf-8')).hexdigest()
|
tokenText=loginNickname+loginPassword+salt
|
||||||
|
token=sha256(tokenText.encode('utf-8')).hexdigest()
|
||||||
self.server.tokens[loginNickname]=token
|
self.server.tokens[loginNickname]=token
|
||||||
loginHandle=loginNickname+'@'+self.server.domain
|
loginHandle=loginNickname+'@'+self.server.domain
|
||||||
tokenFilename= \
|
tokenFilename= \
|
||||||
|
@ -4583,14 +4599,19 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
with open(tokenFilename, 'w') as fp:
|
with open(tokenFilename, 'w') as fp:
|
||||||
fp.write(token)
|
fp.write(token)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('WARN: Unable to save token for '+loginNickname+' '+str(e))
|
print('WARN: Unable to save token for '+ \
|
||||||
|
loginNickname+' '+str(e))
|
||||||
|
|
||||||
personUpgradeActor(self.server.baseDir,None,loginHandle, \
|
personUpgradeActor(self.server.baseDir,None,loginHandle, \
|
||||||
self.server.baseDir+'/accounts/'+loginHandle+'.json')
|
self.server.baseDir+'/accounts/'+ \
|
||||||
|
loginHandle+'.json')
|
||||||
|
|
||||||
self.server.tokensLookup[self.server.tokens[loginNickname]]=loginNickname
|
self.server.tokensLookup[self.server.tokens[loginNickname]]= \
|
||||||
|
loginNickname
|
||||||
self.send_header('Set-Cookie', \
|
self.send_header('Set-Cookie', \
|
||||||
'epicyon='+self.server.tokens[loginNickname]+'; SameSite=Strict')
|
'epicyon='+ \
|
||||||
|
self.server.tokens[loginNickname]+ \
|
||||||
|
'; SameSite=Strict')
|
||||||
if not callingDomain.endswith('.onion') or \
|
if not callingDomain.endswith('.onion') or \
|
||||||
not self.server.onionDomain:
|
not self.server.onionDomain:
|
||||||
self.send_header('Location', \
|
self.send_header('Location', \
|
||||||
|
@ -4618,7 +4639,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
# update of profile/avatar from web interface
|
# update of profile/avatar from web interface
|
||||||
if authorized and self.path.endswith('/profiledata'):
|
if authorized and self.path.endswith('/profiledata'):
|
||||||
usersPath=self.path.replace('/profiledata','').replace('/editprofile','')
|
usersPath= \
|
||||||
|
self.path.replace('/profiledata','').replace('/editprofile','')
|
||||||
actorStr= \
|
actorStr= \
|
||||||
self.server.httpPrefix+'://'+self.server.domainFull+usersPath
|
self.server.httpPrefix+'://'+self.server.domainFull+usersPath
|
||||||
if ' boundary=' in self.headers['Content-type']:
|
if ' boundary=' in self.headers['Content-type']:
|
||||||
|
@ -4628,7 +4650,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
nickname=getNicknameFromActor(actorStr)
|
nickname=getNicknameFromActor(actorStr)
|
||||||
if not nickname:
|
if not nickname:
|
||||||
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
if callingDomain.endswith('.onion') and \
|
||||||
|
self.server.onionDomain:
|
||||||
actorStr= \
|
actorStr= \
|
||||||
'http://'+self.server.onionDomain+usersPath
|
'http://'+self.server.onionDomain+usersPath
|
||||||
print('WARN: nickname not found in '+actorStr)
|
print('WARN: nickname not found in '+actorStr)
|
||||||
|
@ -4637,7 +4660,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
return
|
return
|
||||||
length=int(self.headers['Content-length'])
|
length=int(self.headers['Content-length'])
|
||||||
if length>self.server.maxPostLength:
|
if length>self.server.maxPostLength:
|
||||||
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
if callingDomain.endswith('.onion') and \
|
||||||
|
self.server.onionDomain:
|
||||||
actorStr= \
|
actorStr= \
|
||||||
'http://'+self.server.onionDomain+usersPath
|
'http://'+self.server.onionDomain+usersPath
|
||||||
print('Maximum profile data length exceeded '+str(length))
|
print('Maximum profile data length exceeded '+str(length))
|
||||||
|
@ -4654,14 +4678,19 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
profileMediaTypesUploaded={}
|
profileMediaTypesUploaded={}
|
||||||
for mType in profileMediaTypes:
|
for mType in profileMediaTypes:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('DEBUG: profile update extracting '+mType+' image from POST')
|
print('DEBUG: profile update extracting '+mType+ \
|
||||||
mediaBytes,postBytes=extractMediaInFormPOST(postBytes,boundary,mType)
|
' image from POST')
|
||||||
|
mediaBytes,postBytes= \
|
||||||
|
extractMediaInFormPOST(postBytes,boundary,mType)
|
||||||
if mediaBytes:
|
if mediaBytes:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('DEBUG: profile update '+mType+' image was found. '+str(len(mediaBytes))+' bytes')
|
print('DEBUG: profile update '+mType+ \
|
||||||
|
' image was found. '+ \
|
||||||
|
str(len(mediaBytes))+' bytes')
|
||||||
else:
|
else:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('DEBUG: profile update, no '+mType+' image was found in POST')
|
print('DEBUG: profile update, no '+mType+ \
|
||||||
|
' image was found in POST')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Note: a .temp extension is used here so that at no time is
|
# Note: a .temp extension is used here so that at no time is
|
||||||
|
@ -4675,13 +4704,16 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.baseDir+'/accounts/login.temp'
|
self.server.baseDir+'/accounts/login.temp'
|
||||||
|
|
||||||
filename,attachmentMediaType= \
|
filename,attachmentMediaType= \
|
||||||
saveMediaInFormPOST(mediaBytes,self.server.debug,filenameBase)
|
saveMediaInFormPOST(mediaBytes,self.server.debug, \
|
||||||
|
filenameBase)
|
||||||
if filename:
|
if filename:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('DEBUG: profile update POST '+mType+' media filename is '+filename)
|
print('DEBUG: profile update POST '+mType+ \
|
||||||
|
' media filename is '+filename)
|
||||||
else:
|
else:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('DEBUG: profile update, no '+mType+' media filename in POST')
|
print('DEBUG: profile update, no '+mType+ \
|
||||||
|
' media filename in POST')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
|
@ -4689,20 +4721,28 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
postImageFilename=filename.replace('.temp','')
|
postImageFilename=filename.replace('.temp','')
|
||||||
removeMetaData(filename,postImageFilename)
|
removeMetaData(filename,postImageFilename)
|
||||||
if os.path.isfile(postImageFilename):
|
if os.path.isfile(postImageFilename):
|
||||||
print('profile update POST '+mType+' image saved to '+postImageFilename)
|
print('profile update POST '+mType+ \
|
||||||
|
' image saved to '+postImageFilename)
|
||||||
if mType!='instanceLogo':
|
if mType!='instanceLogo':
|
||||||
lastPartOfImageFilename=postImageFilename.split('/')[-1]
|
lastPartOfImageFilename= \
|
||||||
profileMediaTypesUploaded[mType]=lastPartOfImageFilename
|
postImageFilename.split('/')[-1]
|
||||||
|
profileMediaTypesUploaded[mType]= \
|
||||||
|
lastPartOfImageFilename
|
||||||
actorChanged=True
|
actorChanged=True
|
||||||
else:
|
else:
|
||||||
print('ERROR: profile update POST '+mType+' image could not be saved to '+postImageFilename)
|
print('ERROR: profile update POST '+mType+ \
|
||||||
|
' image could not be saved to '+postImageFilename)
|
||||||
|
|
||||||
fields=extractTextFieldsInPOST(postBytes,boundary,self.server.debug)
|
fields= \
|
||||||
|
extractTextFieldsInPOST(postBytes,boundary, \
|
||||||
|
self.server.debug)
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
if fields:
|
if fields:
|
||||||
print('DEBUG: profile update text field extracted from POST '+str(fields))
|
print('DEBUG: profile update text '+ \
|
||||||
|
'field extracted from POST '+str(fields))
|
||||||
else:
|
else:
|
||||||
print('WARN: profile update, no text fields could be extracted from POST')
|
print('WARN: profile update, no text '+ \
|
||||||
|
'fields could be extracted from POST')
|
||||||
|
|
||||||
actorFilename= \
|
actorFilename= \
|
||||||
self.server.baseDir+'/accounts/'+ \
|
self.server.baseDir+'/accounts/'+ \
|
||||||
|
@ -4714,7 +4754,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
# update the avatar/image url file extension
|
# update the avatar/image url file extension
|
||||||
for mType,lastPartOfImageFilename in profileMediaTypesUploaded.items():
|
for mType,lastPartOfImageFilename in profileMediaTypesUploaded.items():
|
||||||
if mType=='avatar':
|
if mType=='avatar':
|
||||||
lastPartOfUrl=actorJson['icon']['url'].split('/')[-1]
|
lastPartOfUrl= \
|
||||||
|
actorJson['icon']['url'].split('/')[-1]
|
||||||
actorJson['icon']['url']= \
|
actorJson['icon']['url']= \
|
||||||
actorJson['icon']['url'].replace('/'+lastPartOfUrl, \
|
actorJson['icon']['url'].replace('/'+lastPartOfUrl, \
|
||||||
'/'+lastPartOfImageFilename)
|
'/'+lastPartOfImageFilename)
|
||||||
|
@ -4750,7 +4791,9 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if actorJson['password']==fields['passwordconfirm']:
|
if actorJson['password']==fields['passwordconfirm']:
|
||||||
if len(actorJson['password'])>2:
|
if len(actorJson['password'])>2:
|
||||||
# set password
|
# set password
|
||||||
storeBasicCredentials(self.server.baseDir,nickname,actorJson['password'])
|
storeBasicCredentials(self.server.baseDir, \
|
||||||
|
nickname, \
|
||||||
|
actorJson['password'])
|
||||||
if fields.get('displayNickname'):
|
if fields.get('displayNickname'):
|
||||||
if fields['displayNickname']!=actorJson['name']:
|
if fields['displayNickname']!=actorJson['name']:
|
||||||
actorJson['name']=fields['displayNickname']
|
actorJson['name']=fields['displayNickname']
|
||||||
|
@ -4822,23 +4865,35 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
setDonationUrl(actorJson,'')
|
setDonationUrl(actorJson,'')
|
||||||
actorChanged=True
|
actorChanged=True
|
||||||
if fields.get('instanceTitle'):
|
if fields.get('instanceTitle'):
|
||||||
currInstanceTitle=getConfigParam(self.server.baseDir,'instanceTitle')
|
currInstanceTitle= \
|
||||||
|
getConfigParam(self.server.baseDir,'instanceTitle')
|
||||||
if fields['instanceTitle']!=currInstanceTitle:
|
if fields['instanceTitle']!=currInstanceTitle:
|
||||||
setConfigParam(self.server.baseDir,'instanceTitle',fields['instanceTitle'])
|
setConfigParam(self.server.baseDir,'instanceTitle', \
|
||||||
currInstanceDescriptionShort=getConfigParam(self.server.baseDir,'instanceDescriptionShort')
|
fields['instanceTitle'])
|
||||||
|
currInstanceDescriptionShort= \
|
||||||
|
getConfigParam(self.server.baseDir, \
|
||||||
|
'instanceDescriptionShort')
|
||||||
if fields.get('instanceDescriptionShort'):
|
if fields.get('instanceDescriptionShort'):
|
||||||
if fields['instanceDescriptionShort']!=currInstanceDescriptionShort:
|
if fields['instanceDescriptionShort']!=currInstanceDescriptionShort:
|
||||||
setConfigParam(self.server.baseDir,'instanceDescriptionShort',fields['instanceDescriptionShort'])
|
setConfigParam(self.server.baseDir, \
|
||||||
|
'instanceDescriptionShort', \
|
||||||
|
fields['instanceDescriptionShort'])
|
||||||
else:
|
else:
|
||||||
if currInstanceDescriptionShort:
|
if currInstanceDescriptionShort:
|
||||||
setConfigParam(self.server.baseDir,'instanceDescriptionShort','')
|
setConfigParam(self.server.baseDir, \
|
||||||
currInstanceDescription=getConfigParam(self.server.baseDir,'instanceDescription')
|
'instanceDescriptionShort','')
|
||||||
|
currInstanceDescription= \
|
||||||
|
getConfigParam(self.server.baseDir, \
|
||||||
|
'instanceDescription')
|
||||||
if fields.get('instanceDescription'):
|
if fields.get('instanceDescription'):
|
||||||
if fields['instanceDescription']!=currInstanceDescription:
|
if fields['instanceDescription']!=currInstanceDescription:
|
||||||
setConfigParam(self.server.baseDir,'instanceDescription',fields['instanceDescription'])
|
setConfigParam(self.server.baseDir, \
|
||||||
|
'instanceDescription', \
|
||||||
|
fields['instanceDescription'])
|
||||||
else:
|
else:
|
||||||
if currInstanceDescription:
|
if currInstanceDescription:
|
||||||
setConfigParam(self.server.baseDir,'instanceDescription','')
|
setConfigParam(self.server.baseDir, \
|
||||||
|
'instanceDescription','')
|
||||||
if fields.get('bio'):
|
if fields.get('bio'):
|
||||||
if fields['bio']!=actorJson['summary']:
|
if fields['bio']!=actorJson['summary']:
|
||||||
actorTags={}
|
actorTags={}
|
||||||
|
@ -4858,9 +4913,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
actorJson['summary']=''
|
actorJson['summary']=''
|
||||||
actorChanged=True
|
actorChanged=True
|
||||||
if fields.get('moderators'):
|
if fields.get('moderators'):
|
||||||
adminNickname=getConfigParam(self.server.baseDir,'admin')
|
adminNickname= \
|
||||||
|
getConfigParam(self.server.baseDir,'admin')
|
||||||
if self.path.startswith('/users/'+adminNickname+'/'):
|
if self.path.startswith('/users/'+adminNickname+'/'):
|
||||||
moderatorsFile=self.server.baseDir+'/accounts/moderators.txt'
|
moderatorsFile= \
|
||||||
|
self.server.baseDir+'/accounts/moderators.txt'
|
||||||
clearModeratorStatus(self.server.baseDir)
|
clearModeratorStatus(self.server.baseDir)
|
||||||
if ',' in fields['moderators']:
|
if ',' in fields['moderators']:
|
||||||
# if the list was given as comma separated
|
# if the list was given as comma separated
|
||||||
|
@ -4901,13 +4958,16 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
if fields.get('removeScheduledPosts'):
|
if fields.get('removeScheduledPosts'):
|
||||||
if fields['removeScheduledPosts']=='on':
|
if fields['removeScheduledPosts']=='on':
|
||||||
removeScheduledPosts(self.server.baseDir,nickname,self.server.domain)
|
removeScheduledPosts(self.server.baseDir, \
|
||||||
|
nickname, \
|
||||||
|
self.server.domain)
|
||||||
approveFollowers=False
|
approveFollowers=False
|
||||||
if fields.get('approveFollowers'):
|
if fields.get('approveFollowers'):
|
||||||
if fields['approveFollowers']=='on':
|
if fields['approveFollowers']=='on':
|
||||||
approveFollowers=True
|
approveFollowers=True
|
||||||
if approveFollowers!=actorJson['manuallyApprovesFollowers']:
|
if approveFollowers!=actorJson['manuallyApprovesFollowers']:
|
||||||
actorJson['manuallyApprovesFollowers']=approveFollowers
|
actorJson['manuallyApprovesFollowers']= \
|
||||||
|
approveFollowers
|
||||||
actorChanged=True
|
actorChanged=True
|
||||||
if fields.get('mediaInstance'):
|
if fields.get('mediaInstance'):
|
||||||
self.server.mediaInstance=False
|
self.server.mediaInstance=False
|
||||||
|
@ -5014,7 +5074,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
# save allowed instances list
|
# save allowed instances list
|
||||||
allowedInstancesFilename= \
|
allowedInstancesFilename= \
|
||||||
self.server.baseDir+'/accounts/'+ \
|
self.server.baseDir+'/accounts/'+ \
|
||||||
nickname+'@'+self.server.domain+'/allowedinstances.txt'
|
nickname+'@'+self.server.domain+ \
|
||||||
|
'/allowedinstances.txt'
|
||||||
if fields.get('allowedInstances'):
|
if fields.get('allowedInstances'):
|
||||||
with open(allowedInstancesFilename, "w") as allowedInstancesFile:
|
with open(allowedInstancesFilename, "w") as allowedInstancesFile:
|
||||||
allowedInstancesFile.write(fields['allowedInstances'])
|
allowedInstancesFile.write(fields['allowedInstances'])
|
||||||
|
@ -5030,7 +5091,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
actorJson['id'],actorJson, \
|
actorJson['id'],actorJson, \
|
||||||
self.server.personCache)
|
self.server.personCache)
|
||||||
# clear any cached images for this actor
|
# clear any cached images for this actor
|
||||||
removeAvatarFromCache(self.server.baseDir,actorJson['id'].replace('/','-'))
|
removeAvatarFromCache(self.server.baseDir, \
|
||||||
|
actorJson['id'].replace('/','-'))
|
||||||
# save the actor to the cache
|
# save the actor to the cache
|
||||||
actorCacheFilename= \
|
actorCacheFilename= \
|
||||||
self.server.baseDir+'/cache/actors/'+ \
|
self.server.baseDir+'/cache/actors/'+ \
|
||||||
|
@ -5044,10 +5106,12 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
'cc': ['https://www.w3.org/ns/activitystreams#Public'],
|
'cc': ['https://www.w3.org/ns/activitystreams#Public'],
|
||||||
'object': actorJson
|
'object': actorJson
|
||||||
}
|
}
|
||||||
self._postToOutbox(updateActorJson,__version__,nickname)
|
self._postToOutbox(updateActorJson, \
|
||||||
|
__version__,nickname)
|
||||||
if fields.get('deactivateThisAccount'):
|
if fields.get('deactivateThisAccount'):
|
||||||
if fields['deactivateThisAccount']=='on':
|
if fields['deactivateThisAccount']=='on':
|
||||||
deactivateAccount(self.server.baseDir,nickname,self.server.domain)
|
deactivateAccount(self.server.baseDir,nickname, \
|
||||||
|
self.server.domain)
|
||||||
self._clearLoginDetails(nickname)
|
self._clearLoginDetails(nickname)
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
return
|
return
|
||||||
|
@ -5473,7 +5537,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
||||||
originPathStr='http://'+self.server.onionDomain+usersPath
|
originPathStr='http://'+self.server.onionDomain+usersPath
|
||||||
if pageNumber==1:
|
if pageNumber==1:
|
||||||
self._redirect_headers(originPathStr+'/outbox',cookie,callingDomain)
|
self._redirect_headers(originPathStr+'/outbox',cookie, \
|
||||||
|
callingDomain)
|
||||||
else:
|
else:
|
||||||
self._redirect_headers(originPathStr+'/outbox?page='+ \
|
self._redirect_headers(originPathStr+'/outbox?page='+ \
|
||||||
str(pageNumber),cookie,callingDomain)
|
str(pageNumber),cookie,callingDomain)
|
||||||
|
@ -5560,7 +5625,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
print('You cannot unfollow yourself!')
|
print('You cannot unfollow yourself!')
|
||||||
else:
|
else:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print(followerNickname+' stops following '+followingActor)
|
print(followerNickname+' stops following '+ \
|
||||||
|
followingActor)
|
||||||
followActor= \
|
followActor= \
|
||||||
self.server.httpPrefix+'://'+ \
|
self.server.httpPrefix+'://'+ \
|
||||||
self.server.domainFull+ \
|
self.server.domainFull+ \
|
||||||
|
@ -5636,7 +5702,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
else:
|
else:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print(blockerNickname+' stops blocking '+blockingActor)
|
print(blockerNickname+' stops blocking '+blockingActor)
|
||||||
removeBlock(self.server.baseDir,blockerNickname,self.server.domain, \
|
removeBlock(self.server.baseDir, \
|
||||||
|
blockerNickname,self.server.domain, \
|
||||||
blockingNickname,blockingDomainFull)
|
blockingNickname,blockingDomainFull)
|
||||||
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
||||||
originPathStr= \
|
originPathStr= \
|
||||||
|
@ -5841,7 +5908,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
print('Snoozing '+optionsActor+' '+thisActor)
|
print('Snoozing '+optionsActor+' '+thisActor)
|
||||||
if '/users/' in thisActor:
|
if '/users/' in thisActor:
|
||||||
nickname=thisActor.split('/users/')[1]
|
nickname=thisActor.split('/users/')[1]
|
||||||
personSnooze(self.server.baseDir,nickname,self.server.domain,optionsActor)
|
personSnooze(self.server.baseDir,nickname, \
|
||||||
|
self.server.domain,optionsActor)
|
||||||
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
||||||
thisActor= \
|
thisActor= \
|
||||||
'http://'+self.server.onionDomain+usersPath
|
'http://'+self.server.onionDomain+usersPath
|
||||||
|
@ -5854,12 +5922,14 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if '&submitUnSnooze=' in optionsConfirmParams:
|
if '&submitUnSnooze=' in optionsConfirmParams:
|
||||||
usersPath=self.path.split('/personoptions')[0]
|
usersPath=self.path.split('/personoptions')[0]
|
||||||
thisActor= \
|
thisActor= \
|
||||||
self.server.httpPrefix+'://'+self.server.domainFull+usersPath
|
self.server.httpPrefix+'://'+ \
|
||||||
|
self.server.domainFull+usersPath
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('Unsnoozing '+optionsActor+' '+thisActor)
|
print('Unsnoozing '+optionsActor+' '+thisActor)
|
||||||
if '/users/' in thisActor:
|
if '/users/' in thisActor:
|
||||||
nickname=thisActor.split('/users/')[1]
|
nickname=thisActor.split('/users/')[1]
|
||||||
personUnsnooze(self.server.baseDir,nickname,self.server.domain,optionsActor)
|
personUnsnooze(self.server.baseDir,nickname, \
|
||||||
|
self.server.domain,optionsActor)
|
||||||
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
if callingDomain.endswith('.onion') and self.server.onionDomain:
|
||||||
thisActor= \
|
thisActor= \
|
||||||
'http://'+self.server.onionDomain+usersPath
|
'http://'+self.server.onionDomain+usersPath
|
||||||
|
@ -5894,7 +5964,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self._benchmarkPOSTtimings(POSTstartTime,POSTtimings,14)
|
self._benchmarkPOSTtimings(POSTstartTime,POSTtimings,14)
|
||||||
|
|
||||||
# receive different types of post created by htmlNewPost
|
# receive different types of post created by htmlNewPost
|
||||||
postTypes=["newpost","newblog","newunlisted","newfollowers","newdm","newreport","newshare","newquestion","editblogpost"]
|
postTypes=("newpost","newblog","newunlisted","newfollowers", \
|
||||||
|
"newdm","newreport","newshare","newquestion","editblogpost")
|
||||||
for currPostType in postTypes:
|
for currPostType in postTypes:
|
||||||
if currPostType!='newshare':
|
if currPostType!='newshare':
|
||||||
postRedirect=self.server.defaultTimeline
|
postRedirect=self.server.defaultTimeline
|
||||||
|
@ -5909,7 +5980,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
if not callingDomain.endswith('.onion') or \
|
if not callingDomain.endswith('.onion') or \
|
||||||
not self.server.onionDomain:
|
not self.server.onionDomain:
|
||||||
self._redirect_headers(self.server.httpPrefix+'://'+self.server.domainFull+ \
|
self._redirect_headers(self.server.httpPrefix+'://'+ \
|
||||||
|
self.server.domainFull+ \
|
||||||
'/users/'+nickname+ \
|
'/users/'+nickname+ \
|
||||||
'/'+postRedirect+ \
|
'/'+postRedirect+ \
|
||||||
'?page='+str(pageNumber),cookie, \
|
'?page='+str(pageNumber),cookie, \
|
||||||
|
@ -5980,7 +6052,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
'/users/' in self.path:
|
'/users/' in self.path:
|
||||||
if not self.outboxAuthenticated:
|
if not self.outboxAuthenticated:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('DEBUG: unauthenticated attempt to post image to outbox')
|
print('DEBUG: unauthenticated attempt to '+ \
|
||||||
|
'post image to outbox')
|
||||||
self.send_response(403)
|
self.send_response(403)
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
|
@ -6048,7 +6121,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
elif self.headers.get('content-length'):
|
elif self.headers.get('content-length'):
|
||||||
length=int(self.headers['content-length'])
|
length=int(self.headers['content-length'])
|
||||||
if length>10240:
|
if length>10240:
|
||||||
print('WARN: post to shared inbox is too long '+str(length)+' bytes')
|
print('WARN: post to shared inbox is too long '+ \
|
||||||
|
str(length)+' bytes')
|
||||||
self._400()
|
self._400()
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
return
|
return
|
||||||
|
@ -6059,7 +6133,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if self.path == '/sharedInbox' or self.path == '/inbox':
|
if self.path == '/sharedInbox' or self.path == '/inbox':
|
||||||
lenMessage=len(messageBytes)
|
lenMessage=len(messageBytes)
|
||||||
if lenMessage>10240:
|
if lenMessage>10240:
|
||||||
print('WARN: post to shared inbox is too long '+str(lenMessage)+' bytes')
|
print('WARN: post to shared inbox is too long '+ \
|
||||||
|
str(lenMessage)+' bytes')
|
||||||
self._400()
|
self._400()
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
return
|
return
|
||||||
|
@ -6097,7 +6172,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.path=='/sharedInbox':
|
self.path=='/sharedInbox':
|
||||||
if not inboxMessageHasParams(messageJson):
|
if not inboxMessageHasParams(messageJson):
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print("DEBUG: inbox message doesn't have the required parameters")
|
print("DEBUG: inbox message doesn't have the "+ \
|
||||||
|
"required parameters")
|
||||||
self.send_response(403)
|
self.send_response(403)
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
|
@ -6108,7 +6184,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if not self.headers.get('signature'):
|
if not self.headers.get('signature'):
|
||||||
if 'keyId=' not in self.headers['signature']:
|
if 'keyId=' not in self.headers['signature']:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('DEBUG: POST to inbox has no keyId in header signature parameter')
|
print('DEBUG: POST to inbox has no keyId in '+ \
|
||||||
|
'header signature parameter')
|
||||||
self.send_response(403)
|
self.send_response(403)
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
self.server.POSTbusy=False
|
self.server.POSTbusy=False
|
||||||
|
@ -6278,7 +6355,8 @@ def runDaemon(blogsInstance: bool,mediaInstance: bool, \
|
||||||
httpd=ThreadingHTTPServer(serverAddress, pubHandler)
|
httpd=ThreadingHTTPServer(serverAddress, pubHandler)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if e.errno==98:
|
if e.errno==98:
|
||||||
print('ERROR: HTTP server address is already in use. '+str(serverAddress))
|
print('ERROR: HTTP server address is already in use. '+ \
|
||||||
|
str(serverAddress))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print('ERROR: HTTP server failed to start. '+str(e))
|
print('ERROR: HTTP server failed to start. '+str(e))
|
||||||
|
|
Loading…
Reference in New Issue