Refuse any url with a scheme or path

This commit is contained in:
Eshan Singh
2018-01-05 10:46:36 +00:00
parent 04c25ca644
commit 7d154a3cfe
3 changed files with 18 additions and 7 deletions

View File

@@ -22,7 +22,14 @@ def main():
# set user agent
musicbrainzngs.set_useragent("whipper", whipper.__version__,
"https://github.com/JoeLametta/whipper")
musicbrainzngs.set_hostname(config.Config().get_musicbrainz_server())
try:
server = config.Config().get_musicbrainz_server()
except KeyError, e:
sys.stderr.write('whipper: %s\n' % e.message)
sys.exit()
musicbrainzngs.set_hostname(server)
# register plugins with pkg_resources
distributions, _ = pkg_resources.working_set.find_plugins(
pkg_resources.Environment([directory.data_path('plugins')])

View File

@@ -21,7 +21,6 @@
import ConfigParser
import codecs
import os.path
import re
import shutil
import tempfile
import urllib
@@ -78,8 +77,10 @@ class Config:
def get_musicbrainz_server(self):
server = self.get('musicbrainz', 'server') or 'musicbrainz.org'
server_url = server if re.match(r'^\D*//', server) else '//' + server
return urlparse(server_url).netloc
server_url = urlparse('//' + server)
if server_url.scheme != '' or server_url.path != '':
raise KeyError('Invalid MusicBrainz server: %s' % server)
return server
# drive sections

View File

@@ -84,8 +84,11 @@ class ConfigTestCase(tcommon.TestCase):
self._config._parser.set('musicbrainz', 'server',
'192.168.2.141:5000/hello/world')
self._config.write()
self.assertEquals(self._config.get_musicbrainz_server(),
'192.168.2.141:5000',
msg='Correctly strips out path after port number')
self.assertRaises(KeyError, self._config.get_musicbrainz_server)
self._config._parser.set('musicbrainz', 'server',
'http://192.168.2.141:5000')
self._config.write()
self.assertRaises(KeyError, self._config.get_musicbrainz_server)
self._config._parser.remove_section('musicbrainz')