feat: implement HTTP auth
Some checks failed
ci / docker (push) Has been cancelled

This commit is contained in:
2025-04-18 11:59:59 +02:00
parent cf55f6f387
commit 472d9cfca2
3 changed files with 17 additions and 15 deletions

View File

@@ -20,6 +20,7 @@ class DataBackend:
self.user = user
self.password = password
self.auth = (self.user, self.password)
self.remote_root_dir = remote_root_dir
self.server = server
self.install_dir = install_dir
@@ -92,6 +93,7 @@ class LocalFS(DataBackend):
meta_info_list.append(software.Software(meta_file, self, self.progress_bar_wrapper))
return list(filter(lambda x: not x.invalid, meta_info_list))
class HTTP(DataBackend):
paths_listed = {}
@@ -165,7 +167,7 @@ class HTTP(DataBackend):
# this is with streaming
chunk_size = 1024 * 1024 * 5 # 5MB
r = requests.get(self._get_url(), params={"path": path, "as_string": True}, stream=True)
r = requests.get(self._get_url(), params={"path": path, "as_string": True}, stream=True, auth=(self.user, self.password))
r.raise_for_status()
if path.endswith(".txt"):
@@ -197,7 +199,7 @@ class HTTP(DataBackend):
else:
print("Async Requested for:", local_file)
statekeeper.add_to_download_queue(self._get_url(), path)
statekeeper.add_to_download_queue(self._get_url(), path, auth=(self.user, self.password))
return local_file
elif return_content:
@@ -220,7 +222,7 @@ class HTTP(DataBackend):
paths = self.paths_listed[fullpath]
else:
r = requests.get(self._get_url(), params={ "path" : path })
r = requests.get(self._get_url(), params={ "path" : path }, auth=(self.user, self.password))
r.raise_for_status()
#print(r, r.status_code, r.content)
paths = r.json()["contents"]
@@ -273,4 +275,4 @@ class HTTP(DataBackend):
print("Age limit set to", self.hide_above_age, "games have", [x.age_limit for x in software_list])
results_with_age = list(filter(lambda x: x.age_limit <= self.hide_above_age, results_valid))
return results_with_age
return results_with_age

View File

@@ -86,7 +86,7 @@ class ProgressBarApp:
return
try:
percent_filled = statekeeper.get_percent_filled(path)
percent_filled = statekeeper.get_percent_filled(path, self.data_backend.auth)
except OSError as e:
fail_count += 1
if fail_count > 6:
@@ -143,4 +143,4 @@ class ProgressBarApp:
def on_close(self):
self.running = False
self.root.destroy()
self.root.destroy()

View File

@@ -8,10 +8,10 @@ from sqlalchemy import or_, and_
def _bytes_to_mb(size):
return size / (1024*1024)
def add_to_download_queue(url, path):
def add_to_download_queue(url, path, auth):
'''The download is added to the global queue and downloaded eventually'''
#_download(url, path)
thread = threading.Thread(target=_download, args=(url, path))
thread = threading.Thread(target=_download, args=(url, path, auth))
thread.start()
def add_to_task_queue(task):
@@ -21,9 +21,9 @@ def add_to_task_queue(task):
thread.start()
#task()
def _download(url, path):
def _download(url, path, auth):
response = requests.get(url + "?path=" + path, stream=True)
response = requests.get(url + "?path=" + path, stream=True, auth=auth)
# Check if the request was successful
if response.status_code == 200:
@@ -72,7 +72,7 @@ def log_end_download(path):
db.close_session()
def get_download_size(path):
def get_download_size(path, auth):
session = db.session()
obj = session.query(Download).filter(Download.path==path).first()
@@ -85,7 +85,7 @@ def get_download_size(path):
return obj.size
# query size #
r = requests.get(obj.url, params={"path": path, "info": 1})
r = requests.get(obj.url, params={"path": path, "info": 1}, auth=auth)
r.raise_for_status()
size = r.json()["size"]
@@ -96,14 +96,14 @@ def get_download_size(path):
return size
def get_percent_filled(path):
def get_percent_filled(path, auth):
session = db.session()
obj = session.query(Download).filter(Download.path==path, Download.finished==False).first()
if not obj:
return 100 # means its finished
size = _bytes_to_mb(os.stat(obj.local_path).st_size)
total_size = get_download_size(obj.path)
total_size = get_download_size(obj.path, auth)
session.close()
if total_size == 0:
@@ -122,4 +122,4 @@ def get_download(path=None):
downloads = session.query(Download).filter(Download.finished==False).all()
session.close()
return downloads
return downloads