if not os.path.exists(fpath):
# download pkgs
try:
- fpath = grabber.myurlgrab(url, fpath, proxies, None)
+ fpath = grabber.myurlgrab(url.full, fpath, proxies, None)
except CreatorError:
raise
from mic import msger
from mic.utils import errors, misc, runner, fs_related as fs
from custom_commands import desktop, micrepo, micboot, partition, installerfw
+from mic.utils.safeurl import SafeURL
AUTH_URL_PTN = r"(?P<scheme>.*)://(?P<username>.*)(:?P<password>.*)?@(?P<url>.*)"
baseurl = repo_urls[repo.name]
mirrorlist = None
+ baseurl = SafeURL(baseurl)
+
if repos.has_key(repo.name):
msger.warning("Overriding already specified repo %s" %(repo.name,))
from mic import msger
from mic.utils import runner
from mic.utils.errors import CreatorError
+from mic.utils.safeurl import SafeURL
from urlgrabber import grabber
from urlgrabber import __version__ as grabber_version
else:
try:
+ # cast url to str here, sometimes it can be unicode,
+ # but pycurl only accept str
filename = g.urlgrab(url=str(url),
filename=filename,
ssl_verify_host=False,
quote=0,
progress_obj=progress_obj)
except grabber.URLGrabError, err:
+ tmp = SafeURL(url)
msg = str(err)
+
if msg.find(url) < 0:
- msg += ' on %s' % url
+ msg += ' on %s' % tmp
+ else:
+ msg = msg.replace(url, tmp)
+
raise CreatorError(msg)
return filename
from mic.utils.proxy import get_proxy_for
from mic.utils import runner
from mic.utils import rpmmisc
+from mic.utils.safeurl import SafeURL
RPM_RE = re.compile("(.*)\.(.*) (.*)-(.*)")
if 'name' not in repo:
repo['name'] = _get_temp_reponame(repodata.baseurl)
+ if hasattr(repodata, 'baseurl') and getattr(repodata, 'baseurl'):
+ repo['baseurl'] = SafeURL(getattr(repodata, 'baseurl'))
kickstart_repos.append(repo)
return kickstart_repos
def _get_uncompressed_data_from_url(url, filename, proxies):
- filename = myurlgrab(url, filename, proxies)
+ filename = myurlgrab(url.full, filename, proxies)
suffix = None
if filename.endswith(".gz"):
suffix = ".gz"
def _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, filename,
sumtype=None, checksum=None):
- url = os.path.join(baseurl, filename)
+ url = baseurl.join(filename)
filename_tmp = str("%s/%s/%s" % (cachedir, reponame, os.path.basename(filename)))
if os.path.splitext(filename_tmp)[1] in (".gz", ".bz2"):
filename = os.path.splitext(filename_tmp)[0]
reponame = repo['name']
baseurl = repo['baseurl']
-
if 'proxy' in repo:
proxy = repo['proxy']
else:
proxies = None
if proxy:
- proxies = {str(baseurl.split(":")[0]):str(proxy)}
+ proxies = {str(baseurl.split(":")[0]): str(proxy)}
makedirs(os.path.join(cachedir, reponame))
- url = os.path.join(baseurl, "repodata/repomd.xml")
+ url = baseurl.join("repodata/repomd.xml")
filename = os.path.join(cachedir, reponame, 'repomd.xml')
- repomd = myurlgrab(url, filename, proxies)
+ repomd = myurlgrab(url.full, filename, proxies)
try:
root = xmlparse(repomd)
except SyntaxError:
con.close()
if target_repo:
makedirs("%s/packages/%s" % (target_repo["cachedir"], target_repo["name"]))
- url = os.path.join(target_repo["baseurl"], pkgpath)
+ url = target_repo["baseurl"].join(pkgpath)
filename = str("%s/packages/%s/%s" % (target_repo["cachedir"], target_repo["name"], os.path.basename(pkgpath)))
if os.path.exists(filename):
ret = rpmmisc.checkRpmIntegrity('rpm', filename)
(os.path.basename(filename), filename))
os.unlink(filename)
- pkg = myurlgrab(str(url), filename, target_repo["proxies"])
+ pkg = myurlgrab(url.full, filename, target_repo["proxies"])
return pkg
else:
return None
--- /dev/null
+"safe url"
+import os
+
+from zypp import Url
+
+
+class SafeURL(str):
+ "URL wrapper which won't show password out"
+ def __new__(cls, urlstring):
+ # sometimes we get unicode here, but zypp don't accept unicode string
+ urlstring = str(urlstring)
+ safe = Url(urlstring)
+ safe.setUsername('')
+ safe.setPassword('')
+
+ safeurlstring = str(safe)
+ if safeurlstring.startswith("file:/"):
+ # zypp.Url converts file:///path/to/file to file:/path/to/file
+ safeurlstring = "file://" + safeurlstring[len("file:"):]
+
+ instance = super(SafeURL, cls).__new__(cls, safeurlstring)
+ instance.url = Url(urlstring)
+ return instance
+
+ def join(self, *path):
+ """
+ Returns a new SafeURL with new path. Search part is removed since
+ after join path is changed, keep the same search part is useless.
+ """
+ urlstring = self.without_search().full.rstrip('/')
+ return SafeURL(os.path.join(urlstring, *path))
+
+ @property
+ def full(self):
+ "Returns full url string with auth info"
+ fullstring = self.url.asCompleteString()
+ if fullstring.startswith("file:/"):
+ fullstring = "file://" + fullstring[len("file:/"):]
+ return fullstring
+
+ def without_search(self):
+ "Returns a SafeURL without search part"
+ urlstring = self.full
+ idx = urlstring.find('?')
+ return self if idx == -1 else SafeURL(urlstring[:idx])
+
+ @property
+ def scheme(self):
+ return self.url.getScheme()
+
+ @property
+ def user(self):
+ return self.url.getUsername()
+
+ @property
+ def password(self):
+ return self.url.getPassword()
+
+ @property
+ def host(self):
+ return self.url.getHost()
repo.proxy_password = proxy_password
if url:
- repo.baseurl.append(_varSubstitute(url))
+ repo.baseurl.append(_varSubstitute(url.full))
if mirrorlist:
repo.mirrorlist = _varSubstitute(mirrorlist)
repo_info.setEnabled(repo.enabled)
repo_info.setAutorefresh(repo.autorefresh)
repo_info.setKeepPackages(repo.keeppackages)
- baseurl = zypp.Url(repo.baseurl[0])
+ baseurl = repo.baseurl[0].url
if not ssl_verify:
baseurl.setQueryParam("ssl_verify", "no")
if proxy:
else:
baseurl.setQueryParam ("proxy", "_none_")
- repo.baseurl[0] = baseurl.asCompleteString()
self.repos.append(repo)
repo_info.addBaseUrl(baseurl)
proxies = self.get_proxies(po)
try:
- filename = myurlgrab(url, filename, proxies, progress_obj)
+ filename = myurlgrab(url.full, filename, proxies, progress_obj)
except CreatorError:
self.close()
raise
except IndexError:
return None
- baseurl = repo.baseurl[0]
-
- index = baseurl.find("?")
- if index > -1:
- baseurl = baseurl[:index]
-
location = pobj.location()
location = str(location.filename())
if location.startswith("./"):
location = location[2:]
- return os.path.join(baseurl, location)
+ return repo.baseurl[0].join(location)
def package_url(self, pkgname):