Only show web interface after login

master
Bob Mottram 2019-07-25 17:03:58 +01:00
parent 49f6341dd6
commit eeba9b5214
1 changed files with 46 additions and 45 deletions

View File

@ -379,6 +379,16 @@ class PubServer(BaseHTTPRequestHandler):
if self.server.debug: if self.server.debug:
print('GET Not authorized') print('GET Not authorized')
# if not authorized then show the login screen
if self.headers.get('Accept'):
if 'text/html' in self.headers['Accept'] and self.path!='/login':
if not authorized:
self.send_response(303)
self.send_header('Location', '/login')
self.end_headers()
self.server.POSTbusy=False
return
# get css # get css
# Note that this comes before the busy flag to avoid conflicts # Note that this comes before the busy flag to avoid conflicts
if self.path.endswith('.css'): if self.path.endswith('.css'):
@ -514,37 +524,34 @@ class PubServer(BaseHTTPRequestHandler):
nickname=postSections[0] nickname=postSections[0]
statusNumber=postSections[1] statusNumber=postSections[1]
if len(statusNumber)>10 and statusNumber.isdigit(): if len(statusNumber)>10 and statusNumber.isdigit():
domainFull=self.server.domain postFilename= \
if self.server.port!=80 and self.server.port!=443: self.server.baseDir+'/accounts/'+nickname+'@'+self.server.domain+'/outbox/'+ \
domainFull=self.server.domain+':'+str(self.server.port) self.server.httpPrefix+':##'+self.server.domainFull+'#users#'+nickname+'#statuses#'+statusNumber+'.json'
postFilename= \ if os.path.isfile(postFilename):
self.server.baseDir+'/accounts/'+nickname+'@'+self.server.domain+'/outbox/'+ \ postJsonObject={}
self.server.httpPrefix+':##'+domainFull+'#users#'+nickname+'#statuses#'+statusNumber+'.json' with open(postFilename, 'r') as fp:
if os.path.isfile(postFilename): postJsonObject=commentjson.load(fp)
postJsonObject={} # Only authorized viewers get to see likes on posts
with open(postFilename, 'r') as fp: # Otherwize marketers could gain more social graph info
postJsonObject=commentjson.load(fp) if not authorized:
# Only authorized viewers get to see likes on posts if postJsonObject.get('likes'):
# Otherwize marketers could gain more social graph info postJsonObject['likes']={}
if not authorized: if 'text/html' in self.headers['Accept']:
if postJsonObject.get('likes'): self._set_headers('text/html')
postJsonObject['likes']={} if authorized:
if 'text/html' in self.headers['Accept']: self.send_header('Authorization')
self._set_headers('text/html') self.wfile.write(htmlIndividualPost(postJsonObject).encode('utf-8'))
if authorized: else:
self.send_header('Authorization') self._set_headers('application/json')
self.wfile.write(htmlIndividualPost(postJsonObject).encode('utf-8')) if authorized:
else: self.send_header('Authorization')
self._set_headers('application/json') self.wfile.write(json.dumps(postJsonObject).encode('utf-8'))
if authorized: self.server.GETbusy=False
self.send_header('Authorization') return
self.wfile.write(json.dumps(postJsonObject).encode('utf-8')) else:
self.server.GETbusy=False self._404()
return self.server.GETbusy=False
else: return
self._404()
self.server.GETbusy=False
return
# get replies to a post /users/nickname/statuses/number/replies # get replies to a post /users/nickname/statuses/number/replies
if self.path.endswith('/replies') or '/replies?page=' in self.path: if self.path.endswith('/replies') or '/replies?page=' in self.path:
if '/statuses/' in self.path and '/users/' in self.path: if '/statuses/' in self.path and '/users/' in self.path:
@ -557,21 +564,18 @@ class PubServer(BaseHTTPRequestHandler):
statusNumber=postSections[2] statusNumber=postSections[2]
if len(statusNumber)>10 and statusNumber.isdigit(): if len(statusNumber)>10 and statusNumber.isdigit():
#get the replies file #get the replies file
domainFull=self.server.domain
if self.server.port!=80 and self.server.port!=443:
domainFull=self.server.domain+':'+str(self.server.port)
boxname='outbox' boxname='outbox'
postDir=self.server.baseDir+'/accounts/'+nickname+'@'+self.server.domain+'/'+boxname postDir=self.server.baseDir+'/accounts/'+nickname+'@'+self.server.domain+'/'+boxname
postRepliesFilename= \ postRepliesFilename= \
postDir+'/'+ \ postDir+'/'+ \
self.server.httpPrefix+':##'+domainFull+'#users#'+nickname+'#statuses#'+statusNumber+'.replies' self.server.httpPrefix+':##'+self.server.domainFull+'#users#'+nickname+'#statuses#'+statusNumber+'.replies'
if not os.path.isfile(postRepliesFilename): if not os.path.isfile(postRepliesFilename):
# There are no replies, so show empty collection # There are no replies, so show empty collection
repliesJson = { repliesJson = {
'@context': 'https://www.w3.org/ns/activitystreams', '@context': 'https://www.w3.org/ns/activitystreams',
'first': self.server.httpPrefix+'://'+domainFull+'/users/'+nickname+'/statuses/'+statusNumber+'/replies?page=true', 'first': self.server.httpPrefix+'://'+self.server.domainFull+'/users/'+nickname+'/statuses/'+statusNumber+'/replies?page=true',
'id': self.server.httpPrefix+'://'+domainFull+'/users/'+nickname+'/statuses/'+statusNumber+'/replies', 'id': self.server.httpPrefix+'://'+self.server.domainFull+'/users/'+nickname+'/statuses/'+statusNumber+'/replies',
'last': self.server.httpPrefix+'://'+domainFull+'/users/'+nickname+'/statuses/'+statusNumber+'/replies?page=true', 'last': self.server.httpPrefix+'://'+self.server.domainFull+'/users/'+nickname+'/statuses/'+statusNumber+'/replies?page=true',
'totalItems': 0, 'totalItems': 0,
'type': 'OrderedCollection'} 'type': 'OrderedCollection'}
if 'text/html' in self.headers['Accept']: if 'text/html' in self.headers['Accept']:
@ -586,10 +590,10 @@ class PubServer(BaseHTTPRequestHandler):
# replies exist. Itterate through the text file containing message ids # replies exist. Itterate through the text file containing message ids
repliesJson = { repliesJson = {
'@context': 'https://www.w3.org/ns/activitystreams', '@context': 'https://www.w3.org/ns/activitystreams',
'id': self.server.httpPrefix+'://'+domainFull+'/users/'+nickname+'/statuses/'+statusNumber+'?page=true', 'id': self.server.httpPrefix+'://'+self.server.domainFull+'/users/'+nickname+'/statuses/'+statusNumber+'?page=true',
'orderedItems': [ 'orderedItems': [
], ],
'partOf': self.server.httpPrefix+'://'+domainFull+'/users/'+nickname+'/statuses/'+statusNumber, 'partOf': self.server.httpPrefix+'://'+self.server.domainFull+'/users/'+nickname+'/statuses/'+statusNumber,
'type': 'OrderedCollectionPage'} 'type': 'OrderedCollectionPage'}
# populate the items list with replies # populate the items list with replies
@ -725,12 +729,9 @@ class PubServer(BaseHTTPRequestHandler):
nickname=postSections[0] nickname=postSections[0]
statusNumber=postSections[2] statusNumber=postSections[2]
if len(statusNumber)>10 and statusNumber.isdigit(): if len(statusNumber)>10 and statusNumber.isdigit():
domainFull=self.server.domain
if self.server.port!=80 and self.server.port!=443:
domainFull=self.server.domain+':'+str(self.server.port)
postFilename= \ postFilename= \
self.server.baseDir+'/accounts/'+nickname+'@'+self.server.domain+'/outbox/'+ \ self.server.baseDir+'/accounts/'+nickname+'@'+self.server.domain+'/outbox/'+ \
self.server.httpPrefix+':##'+domainFull+'#users#'+nickname+'#statuses#'+statusNumber+'.json' self.server.httpPrefix+':##'+self.server.domainFull+'#users#'+nickname+'#statuses#'+statusNumber+'.json'
if os.path.isfile(postFilename): if os.path.isfile(postFilename):
postJsonObject={} postJsonObject={}
with open(postFilename, 'r') as fp: with open(postFilename, 'r') as fp: