Rename download_count/download_id, upload_count/upload_id, and visit_count/visit_id to simply cur_history_id/history_id, and make all errors create IndividualFileHistoryItem widgets

This commit is contained in:
Micah Lee 2019-09-03 22:18:30 -07:00
parent 655bb5bad1
commit ffe12bdead
No known key found for this signature in database
GPG Key ID: 403C2657CD994F73
6 changed files with 66 additions and 46 deletions

View File

@ -19,7 +19,6 @@ class ReceiveModeWeb:
self.web = web self.web = web
self.can_upload = True self.can_upload = True
self.upload_count = 0
self.uploads_in_progress = [] self.uploads_in_progress = []
self.define_routes() self.define_routes()
@ -52,7 +51,7 @@ class ReceiveModeWeb:
# Tell the GUI the receive mode directory for this file # Tell the GUI the receive mode directory for this file
self.web.add_request(self.web.REQUEST_UPLOAD_SET_DIR, request.path, { self.web.add_request(self.web.REQUEST_UPLOAD_SET_DIR, request.path, {
'id': request.upload_id, 'id': request.history_id,
'filename': basename, 'filename': basename,
'dir': request.receive_mode_dir 'dir': request.receive_mode_dir
}) })
@ -272,10 +271,9 @@ class ReceiveModeRequest(Request):
# Prevent new uploads if we've said so (timer expired) # Prevent new uploads if we've said so (timer expired)
if self.web.receive_mode.can_upload: if self.web.receive_mode.can_upload:
# Create an upload_id, attach it to the request # Create an history_id, attach it to the request
self.upload_id = self.web.receive_mode.upload_count self.history_id = self.web.receive_mode.cur_history_id
self.web.receive_mode.cur_history_id += 1
self.web.receive_mode.upload_count += 1
# Figure out the content length # Figure out the content length
try: try:
@ -302,10 +300,10 @@ class ReceiveModeRequest(Request):
if not self.told_gui_about_request: if not self.told_gui_about_request:
# Tell the GUI about the request # Tell the GUI about the request
self.web.add_request(self.web.REQUEST_STARTED, self.path, { self.web.add_request(self.web.REQUEST_STARTED, self.path, {
'id': self.upload_id, 'id': self.history_id,
'content_length': self.content_length 'content_length': self.content_length
}) })
self.web.receive_mode.uploads_in_progress.append(self.upload_id) self.web.receive_mode.uploads_in_progress.append(self.history_id)
self.told_gui_about_request = True self.told_gui_about_request = True
@ -337,19 +335,19 @@ class ReceiveModeRequest(Request):
try: try:
if self.told_gui_about_request: if self.told_gui_about_request:
upload_id = self.upload_id history_id = self.history_id
if not self.web.stop_q.empty() or not self.progress[self.filename]['complete']: if not self.web.stop_q.empty() or not self.progress[self.filename]['complete']:
# Inform the GUI that the upload has canceled # Inform the GUI that the upload has canceled
self.web.add_request(self.web.REQUEST_UPLOAD_CANCELED, self.path, { self.web.add_request(self.web.REQUEST_UPLOAD_CANCELED, self.path, {
'id': upload_id 'id': history_id
}) })
else: else:
# Inform the GUI that the upload has finished # Inform the GUI that the upload has finished
self.web.add_request(self.web.REQUEST_UPLOAD_FINISHED, self.path, { self.web.add_request(self.web.REQUEST_UPLOAD_FINISHED, self.path, {
'id': upload_id 'id': history_id
}) })
self.web.receive_mode.uploads_in_progress.remove(upload_id) self.web.receive_mode.uploads_in_progress.remove(history_id)
except AttributeError: except AttributeError:
pass pass
@ -375,7 +373,7 @@ class ReceiveModeRequest(Request):
# Update the GUI on the upload progress # Update the GUI on the upload progress
if self.told_gui_about_request: if self.told_gui_about_request:
self.web.add_request(self.web.REQUEST_PROGRESS, self.path, { self.web.add_request(self.web.REQUEST_PROGRESS, self.path, {
'id': self.upload_id, 'id': self.history_id,
'progress': self.progress 'progress': self.progress
}) })

View File

@ -44,8 +44,7 @@ class SendBaseModeWeb:
self.files = {} # Dictionary mapping file paths to filenames on disk self.files = {} # Dictionary mapping file paths to filenames on disk
self.root_files = {} # This is only the root files and dirs, as opposed to all of them self.root_files = {} # This is only the root files and dirs, as opposed to all of them
self.cleanup_filenames = [] self.cleanup_filenames = []
self.visit_count = 0 self.cur_history_id = 0
self.download_count = 0
self.file_info = {'files': [], 'dirs': []} self.file_info = {'files': [], 'dirs': []}
self.gzip_individual_files = {} self.gzip_individual_files = {}
self.init() self.init()
@ -80,12 +79,12 @@ class SendBaseModeWeb:
def directory_listing(self, filenames, path='', filesystem_path=None): def directory_listing(self, filenames, path='', filesystem_path=None):
# Tell the GUI about the directory listing # Tell the GUI about the directory listing
download_id = self.download_count history_id = self.cur_history_id
self.download_count += 1 self.cur_history_id += 1
self.web.add_request(self.web.REQUEST_INDIVIDUAL_FILE_STARTED, '/{}'.format(path), { self.web.add_request(self.web.REQUEST_INDIVIDUAL_FILE_STARTED, '/{}'.format(path), {
'id': download_id, 'id': history_id,
'method': request.method, 'method': request.method,
'directory_listing': True 'status_code': 200
}) })
# If filesystem_path is None, this is the root directory listing # If filesystem_path is None, this is the root directory listing
@ -144,10 +143,10 @@ class SendBaseModeWeb:
path = request.path path = request.path
# Tell GUI the individual file started # Tell GUI the individual file started
download_id = self.download_count history_id = self.cur_history_id
self.download_count += 1 self.cur_history_id += 1
self.web.add_request(self.web.REQUEST_INDIVIDUAL_FILE_STARTED, path, { self.web.add_request(self.web.REQUEST_INDIVIDUAL_FILE_STARTED, path, {
'id': download_id, 'id': history_id,
'filesize': filesize, 'filesize': filesize,
'method': request.method 'method': request.method
}) })
@ -178,7 +177,7 @@ class SendBaseModeWeb:
sys.stdout.flush() sys.stdout.flush()
self.web.add_request(self.web.REQUEST_INDIVIDUAL_FILE_PROGRESS, path, { self.web.add_request(self.web.REQUEST_INDIVIDUAL_FILE_PROGRESS, path, {
'id': download_id, 'id': history_id,
'bytes': downloaded_bytes 'bytes': downloaded_bytes
}) })
done = False done = False
@ -188,7 +187,7 @@ class SendBaseModeWeb:
# Tell the GUI the individual file was canceled # Tell the GUI the individual file was canceled
self.web.add_request(self.web.REQUEST_INDIVIDUAL_FILE_CANCELED, path, { self.web.add_request(self.web.REQUEST_INDIVIDUAL_FILE_CANCELED, path, {
'id': download_id 'id': history_id
}) })
fp.close() fp.close()

View File

@ -60,10 +60,6 @@ class ShareModeWeb(SendBaseModeWeb):
static_url_path=self.web.static_url_path)) static_url_path=self.web.static_url_path))
return self.web.add_security_headers(r) return self.web.add_security_headers(r)
# Each download has a unique id
download_id = self.download_count
self.download_count += 1
# Prepare some variables to use inside generate() function below # Prepare some variables to use inside generate() function below
# which is outside of the request context # which is outside of the request context
shutdown_func = request.environ.get('werkzeug.server.shutdown') shutdown_func = request.environ.get('werkzeug.server.shutdown')
@ -81,8 +77,10 @@ class ShareModeWeb(SendBaseModeWeb):
self.filesize = self.download_filesize self.filesize = self.download_filesize
# Tell GUI the download started # Tell GUI the download started
history_id = self.cur_history_id
self.cur_history_id += 1
self.web.add_request(self.web.REQUEST_STARTED, path, { self.web.add_request(self.web.REQUEST_STARTED, path, {
'id': download_id, 'id': history_id,
'use_gzip': use_gzip 'use_gzip': use_gzip
}) })
@ -102,7 +100,7 @@ class ShareModeWeb(SendBaseModeWeb):
# The user has canceled the download, so stop serving the file # The user has canceled the download, so stop serving the file
if not self.web.stop_q.empty(): if not self.web.stop_q.empty():
self.web.add_request(self.web.REQUEST_CANCELED, path, { self.web.add_request(self.web.REQUEST_CANCELED, path, {
'id': download_id 'id': history_id
}) })
break break
@ -124,7 +122,7 @@ class ShareModeWeb(SendBaseModeWeb):
sys.stdout.flush() sys.stdout.flush()
self.web.add_request(self.web.REQUEST_PROGRESS, path, { self.web.add_request(self.web.REQUEST_PROGRESS, path, {
'id': download_id, 'id': history_id,
'bytes': downloaded_bytes 'bytes': downloaded_bytes
}) })
self.web.done = False self.web.done = False
@ -135,7 +133,7 @@ class ShareModeWeb(SendBaseModeWeb):
# tell the GUI the download has canceled # tell the GUI the download has canceled
self.web.add_request(self.web.REQUEST_CANCELED, path, { self.web.add_request(self.web.REQUEST_CANCELED, path, {
'id': download_id 'id': history_id
}) })
fp.close() fp.close()

View File

@ -63,6 +63,9 @@ class Web:
self.auth = HTTPBasicAuth() self.auth = HTTPBasicAuth()
self.auth.error_handler(self.error401) self.auth.error_handler(self.error401)
# This tracks the history id
self.cur_history_id = 0
# Verbose mode? # Verbose mode?
if self.common.verbose: if self.common.verbose:
self.verbose_mode() self.verbose_mode()
@ -193,20 +196,52 @@ class Web:
self.force_shutdown() self.force_shutdown()
print("Someone has made too many wrong attempts to guess your password, so OnionShare has stopped the server. Start sharing again and send the recipient a new address to share.") print("Someone has made too many wrong attempts to guess your password, so OnionShare has stopped the server. Start sharing again and send the recipient a new address to share.")
history_id = self.cur_history_id
self.cur_history_id += 1
self.add_request(self.REQUEST_INDIVIDUAL_FILE_STARTED, '{}'.format(request.path), {
'id': history_id,
'method': request.method,
'status_code': 401
})
r = make_response(render_template('401.html', static_url_path=self.static_url_path), 401) r = make_response(render_template('401.html', static_url_path=self.static_url_path), 401)
return self.add_security_headers(r) return self.add_security_headers(r)
def error403(self): def error403(self):
history_id = self.cur_history_id
self.cur_history_id += 1
self.add_request(self.REQUEST_INDIVIDUAL_FILE_STARTED, '{}'.format(request.path), {
'id': history_id,
'method': request.method,
'status_code': 403
})
self.add_request(Web.REQUEST_OTHER, request.path) self.add_request(Web.REQUEST_OTHER, request.path)
r = make_response(render_template('403.html', static_url_path=self.static_url_path), 403) r = make_response(render_template('403.html', static_url_path=self.static_url_path), 403)
return self.add_security_headers(r) return self.add_security_headers(r)
def error404(self): def error404(self):
history_id = self.cur_history_id
self.cur_history_id += 1
self.add_request(self.REQUEST_INDIVIDUAL_FILE_STARTED, '{}'.format(request.path), {
'id': history_id,
'method': request.method,
'status_code': 404
})
self.add_request(Web.REQUEST_OTHER, request.path) self.add_request(Web.REQUEST_OTHER, request.path)
r = make_response(render_template('404.html', static_url_path=self.static_url_path), 404) r = make_response(render_template('404.html', static_url_path=self.static_url_path), 404)
return self.add_security_headers(r) return self.add_security_headers(r)
def error405(self): def error405(self):
history_id = self.cur_history_id
self.cur_history_id += 1
self.add_request(self.REQUEST_INDIVIDUAL_FILE_STARTED, '{}'.format(request.path), {
'id': history_id,
'method': request.method,
'status_code': 405
})
r = make_response(render_template('405.html', static_url_path=self.static_url_path), 405) r = make_response(render_template('405.html', static_url_path=self.static_url_path), 405)
return self.add_security_headers(r) return self.add_security_headers(r)

View File

@ -28,17 +28,6 @@ class WebsiteModeWeb(SendBaseModeWeb):
""" """
Render the onionshare website. Render the onionshare website.
""" """
# Each download has a unique id
visit_id = self.visit_count
self.visit_count += 1
# Tell GUI the page has been visited
self.web.add_request(self.web.REQUEST_STARTED, path, {
'id': visit_id,
'action': 'visit'
})
return self.render_logic(path) return self.render_logic(path)
def directory_listing_template(self, path, files, dirs): def directory_listing_template(self, path, files, dirs):

View File

@ -394,9 +394,9 @@ class IndividualFileHistoryItem(HistoryItem):
self.progress_bar.hide() self.progress_bar.hide()
return return
# Is this a directory listing? # Is a status code already sent?
if self.directory_listing: if 'status_code' in data:
self.status_code_label.setText("200") self.status_code_label.setText("{}".format(data['status_code']))
self.status = HistoryItem.STATUS_FINISHED self.status = HistoryItem.STATUS_FINISHED
self.progress_bar.hide() self.progress_bar.hide()
return return
@ -415,6 +415,7 @@ class IndividualFileHistoryItem(HistoryItem):
self.progress_bar.setValue(downloaded_bytes) self.progress_bar.setValue(downloaded_bytes)
if downloaded_bytes == self.progress_bar.total_bytes: if downloaded_bytes == self.progress_bar.total_bytes:
self.status_code_label.setText("200")
self.progress_bar.hide() self.progress_bar.hide()
self.status = HistoryItem.STATUS_FINISHED self.status = HistoryItem.STATUS_FINISHED