summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster/Ftp.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hoster/Ftp.py')
-rw-r--r--module/plugins/hoster/Ftp.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/module/plugins/hoster/Ftp.py b/module/plugins/hoster/Ftp.py
index 25eb44604..2ff1755f4 100644
--- a/module/plugins/hoster/Ftp.py
+++ b/module/plugins/hoster/Ftp.py
@@ -11,7 +11,7 @@ from module.plugins.internal.Hoster import Hoster
class Ftp(Hoster):
__name__ = "Ftp"
__type__ = "hoster"
- __version__ = "0.54"
+ __version__ = "0.55"
__status__ = "testing"
__pattern__ = r'(?:ftps?|sftp)://([\w.-]+(:[\w.-]+)?@)?[\w.-]+(:\d+)?/.+'
@@ -29,30 +29,41 @@ class Ftp(Hoster):
def process(self, pyfile):
- parsed_url = urlparse.urlparse(pyfile.url)
- netloc = parsed_url.netloc
+ p_url = urlparse.urlparse(pyfile.url)
+ netloc = p_url.netloc
- pyfile.name = parsed_url.path.rpartition('/')[2]
+ pyfile.name = p_url.path.rpartition('/')[2]
try:
pyfile.name = urllib.unquote(str(pyfile.name)).decode('utf8')
+
except Exception:
pass
if not "@" in netloc:
- servers = [x['login'] for x in self.account.getAllAccounts()] if self.account else []
+ self.log_debug("Auth required")
+
+ #@TODO: Recheck in 0.4.10
+ if self.account:
+ servers = [x['login'] for x in self.account.getAllAccounts()]
+ else:
+ servers = []
if netloc in servers:
self.log_debug("Logging on to %s" % netloc)
- self.req.addAuth(self.account.get_info(netloc)['login']['password'])
+ self.req.addAuth(self.account.get_login('password'))
+
else:
pwd = self.get_password()
if ':' in pwd:
self.req.addAuth(pwd)
+ else:
+ self.fail(_("Authorization required"))
self.req.http.c.setopt(pycurl.NOBODY, 1)
try:
res = self.load(pyfile.url)
+
except pycurl.error, e:
self.fail(_("Error %d: %s") % e.args)
@@ -60,19 +71,25 @@ class Ftp(Hoster):
self.log_debug(self.req.http.header)
m = re.search(r"Content-Length:\s*(\d+)", res)
- if m:
+ if m is not None:
pyfile.size = int(m.group(1))
self.download(pyfile.url)
+
else:
#: Naive ftp directory listing
if re.search(r'^25\d.*?"', self.req.http.header, re.M):
pyfile.url = pyfile.url.rstrip('/')
pkgname = "/".join([pyfile.package().name, urlparse.urlparse(pyfile.url).path.rpartition('/')[2]])
+
pyfile.url += '/'
+
self.req.http.c.setopt(48, 1) #: CURLOPT_DIRLISTONLY
res = self.load(pyfile.url, decode=False)
+
links = [pyfile.url + x for x in res.splitlines()]
self.log_debug("LINKS", links)
+
self.pyload.api.addPackage(pkgname, links)
+
else:
self.fail(_("Unexpected server response"))