mirror of
https://github.com/FAUSheppy/homelab_gamevault
synced 2025-12-06 15:01:36 +01:00
feat: ftps support finished
This commit is contained in:
@@ -5,6 +5,19 @@ import software
|
|||||||
import ftplib
|
import ftplib
|
||||||
import tqdm
|
import tqdm
|
||||||
|
|
||||||
|
class SESSION_REUSE_FTP_TLS(ftplib.FTP_TLS):
|
||||||
|
"""Explicit FTPS, with shared TLS session"""
|
||||||
|
|
||||||
|
def ntransfercmd(self, cmd, rest=None):
|
||||||
|
|
||||||
|
conn, size = ftplib.FTP.ntransfercmd(self, cmd, rest)
|
||||||
|
if self._prot_p:
|
||||||
|
conn = self.context.wrap_socket(
|
||||||
|
conn,
|
||||||
|
server_hostname=self.host,
|
||||||
|
session=self.sock.session) # this is the fix
|
||||||
|
return conn, size
|
||||||
|
|
||||||
class DataBackend:
|
class DataBackend:
|
||||||
|
|
||||||
def _create_cache_dir(self, cache_dir):
|
def _create_cache_dir(self, cache_dir):
|
||||||
@@ -21,6 +34,7 @@ class DataBackend:
|
|||||||
self.progress_bar_wrapper = progress_bar_wrapper
|
self.progress_bar_wrapper = progress_bar_wrapper
|
||||||
self.root = tkinter_root
|
self.root = tkinter_root
|
||||||
self.cache_dir = "./cache/"
|
self.cache_dir = "./cache/"
|
||||||
|
self.ftp = None # ftp connection object
|
||||||
|
|
||||||
def get(self, path, return_content=False):
|
def get(self, path, return_content=False):
|
||||||
'''Return the contents of this path'''
|
'''Return the contents of this path'''
|
||||||
@@ -93,6 +107,9 @@ class FTP(DataBackend):
|
|||||||
|
|
||||||
def _connect(self):
|
def _connect(self):
|
||||||
|
|
||||||
|
if self.ftp:
|
||||||
|
return self.ftp
|
||||||
|
|
||||||
if self.server.startswith("ftp://"):
|
if self.server.startswith("ftp://"):
|
||||||
tls = False
|
tls = False
|
||||||
elif self.server.startswith("ftps://"):
|
elif self.server.startswith("ftps://"):
|
||||||
@@ -104,28 +121,39 @@ class FTP(DataBackend):
|
|||||||
server = self.server.split("://")[1]
|
server = self.server.split("://")[1]
|
||||||
port = None
|
port = None
|
||||||
try:
|
try:
|
||||||
port = int(server.split(":")[-1])
|
server = server.split(":")[0]
|
||||||
|
except (IndexError, ValueError):
|
||||||
|
port = 0
|
||||||
|
|
||||||
|
# try extract server #
|
||||||
|
try:
|
||||||
server = server.split(":")[0]
|
server = server.split(":")[0]
|
||||||
except (IndexError, ValueError):
|
except (IndexError, ValueError):
|
||||||
server = self.server
|
server = self.server
|
||||||
|
|
||||||
#print("Connectiong to:", server, "on port:", port)
|
print("Connecting to:", server, "on port:", port, "ssl =", tls)
|
||||||
|
|
||||||
# connect #
|
# connect #
|
||||||
if not tls:
|
if not tls:
|
||||||
ftp = ftplib.FTP()
|
ftp = ftplib.FTP()
|
||||||
else:
|
else:
|
||||||
ftp = ftplib.FTP_TLS()
|
ftp = SESSION_REUSE_FTP_TLS()
|
||||||
ftp.connect(server, port=port)
|
|
||||||
|
ftp.connect(server, port=port or 0)
|
||||||
|
|
||||||
if self.user:
|
if self.user:
|
||||||
ftp.login(self.user, self.password)
|
ftp.login(self.user, self.password)
|
||||||
else:
|
else:
|
||||||
ftp.login()
|
ftp.login()
|
||||||
|
|
||||||
|
# open a secure session for tls #
|
||||||
|
if tls:
|
||||||
|
ftp.prot_p()
|
||||||
|
|
||||||
# cache dir is automatically set #
|
# cache dir is automatically set #
|
||||||
self.cache_dir = None
|
self.cache_dir = None
|
||||||
|
|
||||||
|
self.ftp = ftp
|
||||||
return ftp
|
return ftp
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user