Show More
@@ -405,19 +405,6 b'' | |||
|
405 | 405 | license = [ pkgs.lib.licenses.mit ]; |
|
406 | 406 | }; |
|
407 | 407 | }; |
|
408 | backport-ipaddress = super.buildPythonPackage { | |
|
409 | name = "backport-ipaddress-0.1"; | |
|
410 | buildInputs = with self; []; | |
|
411 | doCheck = false; | |
|
412 | propagatedBuildInputs = with self; []; | |
|
413 | src = fetchurl { | |
|
414 | url = "https://pypi.python.org/packages/d3/30/54c6dab05a4dec44db25ff309f1fbb6b7a8bde3f2bade38bb9da67bbab8f/backport_ipaddress-0.1.tar.gz"; | |
|
415 | md5 = "9c1f45f4361f71b124d7293a60006c05"; | |
|
416 | }; | |
|
417 | meta = { | |
|
418 | license = [ pkgs.lib.licenses.psfl ]; | |
|
419 | }; | |
|
420 | }; | |
|
421 | 408 | backports.shutil-get-terminal-size = super.buildPythonPackage { |
|
422 | 409 | name = "backports.shutil-get-terminal-size-1.0.0"; |
|
423 | 410 | buildInputs = with self; []; |
@@ -822,13 +809,13 b'' | |||
|
822 | 809 | }; |
|
823 | 810 | }; |
|
824 | 811 | graphviz = super.buildPythonPackage { |
|
825 |
name = "graphviz-0. |
|
|
812 | name = "graphviz-0.8"; | |
|
826 | 813 | buildInputs = with self; []; |
|
827 | 814 | doCheck = false; |
|
828 | 815 | propagatedBuildInputs = with self; []; |
|
829 | 816 | src = fetchurl { |
|
830 | url = "https://pypi.python.org/packages/7d/2d/f5cfa56467ca5a65eb44e1103d89d2f65dbc4f04cf7a1f3d38e973c3d1a8/graphviz-0.7.1.zip"; | |
|
831 | md5 = "d5926e89975121d56dec777a79bfc9d1"; | |
|
817 | url = "https://pypi.python.org/packages/da/84/0e997520323d6b01124eb01c68d5c101814d0aab53083cd62bd75a90f70b/graphviz-0.8.zip"; | |
|
818 | md5 = "9486a885360a5ee54a81eb2950470c71"; | |
|
832 | 819 | }; |
|
833 | 820 | meta = { |
|
834 | 821 | license = [ pkgs.lib.licenses.mit ]; |
@@ -899,6 +886,19 b'' | |||
|
899 | 886 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
900 | 887 | }; |
|
901 | 888 | }; |
|
889 | ipaddress = super.buildPythonPackage { | |
|
890 | name = "ipaddress-1.0.18"; | |
|
891 | buildInputs = with self; []; | |
|
892 | doCheck = false; | |
|
893 | propagatedBuildInputs = with self; []; | |
|
894 | src = fetchurl { | |
|
895 | url = "https://pypi.python.org/packages/4e/13/774faf38b445d0b3a844b65747175b2e0500164b7c28d78e34987a5bfe06/ipaddress-1.0.18.tar.gz"; | |
|
896 | md5 = "310c2dfd64eb6f0df44aa8c59f2334a7"; | |
|
897 | }; | |
|
898 | meta = { | |
|
899 | license = [ pkgs.lib.licenses.psfl ]; | |
|
900 | }; | |
|
901 | }; | |
|
902 | 902 | ipdb = super.buildPythonPackage { |
|
903 | 903 | name = "ipdb-0.10.3"; |
|
904 | 904 | buildInputs = with self; []; |
@@ -1446,13 +1446,13 b'' | |||
|
1446 | 1446 | }; |
|
1447 | 1447 | }; |
|
1448 | 1448 | pyramid-debugtoolbar = super.buildPythonPackage { |
|
1449 |
name = "pyramid-debugtoolbar- |
|
|
1449 | name = "pyramid-debugtoolbar-4.2.1"; | |
|
1450 | 1450 | buildInputs = with self; []; |
|
1451 | 1451 | doCheck = false; |
|
1452 | propagatedBuildInputs = with self; [pyramid pyramid-mako repoze.lru Pygments]; | |
|
1452 | propagatedBuildInputs = with self; [pyramid pyramid-mako repoze.lru Pygments ipaddress]; | |
|
1453 | 1453 | src = fetchurl { |
|
1454 |
url = "https://pypi.python.org/packages/64 |
|
|
1455 | md5 = "aebab8c3bfdc6f89e4d3adc1d126538e"; | |
|
1454 | url = "https://pypi.python.org/packages/db/26/94620b7752936e2cd74838263ff366db9b454f7394bfb62d1eb2f84b29c1/pyramid_debugtoolbar-4.2.1.tar.gz"; | |
|
1455 | md5 = "3dfaced2fab1644ff5284017be9d92b9"; | |
|
1456 | 1456 | }; |
|
1457 | 1457 | meta = { |
|
1458 | 1458 | license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ]; |
@@ -1722,7 +1722,7 b'' | |||
|
1722 | 1722 | name = "rhodecode-enterprise-ce-4.9.0"; |
|
1723 | 1723 | buildInputs = with self; [pytest py pytest-cov pytest-sugar pytest-runner pytest-catchlog pytest-profiling gprof2dot pytest-timeout mock WebTest cov-core coverage configobj]; |
|
1724 | 1724 | doCheck = true; |
|
1725 |
propagatedBuildInputs = with self; [Babel Beaker FormEncode Mako Markdown MarkupSafe MySQL-python Paste PasteDeploy PasteScript Pygments pygments-markdown-lexer Pylons Routes SQLAlchemy Tempita URLObject WebError WebHelpers WebHelpers2 WebOb WebTest Whoosh alembic amqplib anyjson appenlight-client authomatic |
|
|
1725 | propagatedBuildInputs = with self; [Babel Beaker FormEncode Mako Markdown MarkupSafe MySQL-python Paste PasteDeploy PasteScript Pygments pygments-markdown-lexer Pylons Routes SQLAlchemy Tempita URLObject WebError WebHelpers WebHelpers2 WebOb WebTest Whoosh alembic amqplib anyjson appenlight-client authomatic cssselect celery channelstream colander decorator deform docutils gevent gunicorn infrae.cache ipython iso8601 kombu lxml msgpack-python nbconvert packaging psycopg2 py-gfm pycrypto pycurl pyparsing pyramid pyramid-debugtoolbar pyramid-mako pyramid-beaker pysqlite python-dateutil python-ldap python-memcached python-pam recaptcha-client repoze.lru requests simplejson subprocess32 waitress zope.cachedescriptors dogpile.cache dogpile.core psutil py-bcrypt]; | |
|
1726 | 1726 | src = ./.; |
|
1727 | 1727 | meta = { |
|
1728 | 1728 | license = [ { fullName = "Affero GNU General Public License v3 or later (AGPLv3+)"; } { fullName = "AGPLv3, and Commercial License"; } ]; |
@@ -6,7 +6,6 b' amqplib==1.0.2' | |||
|
6 | 6 | anyjson==0.3.3 |
|
7 | 7 | authomatic==0.1.0.post1 |
|
8 | 8 | Babel==1.3 |
|
9 | backport-ipaddress==0.1 | |
|
10 | 9 | Beaker==1.9.0 |
|
11 | 10 | celery==2.2.10 |
|
12 | 11 | Chameleon==2.24 |
@@ -55,7 +54,7 b' pygments-markdown-lexer==0.1.0.dev39' | |||
|
55 | 54 | Pygments==2.2.0 |
|
56 | 55 | pyparsing==1.5.7 |
|
57 | 56 | pyramid-beaker==0.8 |
|
58 |
pyramid-debugtoolbar== |
|
|
57 | pyramid-debugtoolbar==4.2.1 | |
|
59 | 58 | pyramid-jinja2==2.5 |
|
60 | 59 | pyramid-mako==1.0.2 |
|
61 | 60 | pyramid==1.9.0 |
@@ -89,10 +89,7 b'' | |||
|
89 | 89 | }, |
|
90 | 90 | "python2.7-authomatic-0.1.0.post1": { |
|
91 | 91 | "MIT License": "http://spdx.org/licenses/MIT" |
|
92 |
}, |
|
|
93 | "python2.7-backport-ipaddress-0.1": { | |
|
94 | "Python Software Foundation License version 2": "http://spdx.org/licenses/Python-2.0" | |
|
95 | }, | |
|
92 | }, | |
|
96 | 93 | "python2.7-backports.shutil-get-terminal-size-1.0.0": { |
|
97 | 94 | "MIT License": "http://spdx.org/licenses/MIT" |
|
98 | 95 | }, |
@@ -1991,9 +1991,10 b' def check_ip_access(source_ip, allowed_i' | |||
|
1991 | 1991 | :param allowed_ips: list of allowed ips together with mask |
|
1992 | 1992 | """ |
|
1993 | 1993 | log.debug('checking if ip:%s is subnet of %s' % (source_ip, allowed_ips)) |
|
1994 | source_ip_address = ipaddress.ip_address(source_ip) | |
|
1994 | source_ip_address = ipaddress.ip_address(safe_unicode(source_ip)) | |
|
1995 | 1995 | if isinstance(allowed_ips, (tuple, list, set)): |
|
1996 | 1996 | for ip in allowed_ips: |
|
1997 | ip = safe_unicode(ip) | |
|
1997 | 1998 | try: |
|
1998 | 1999 | network_address = ipaddress.ip_network(ip, strict=False) |
|
1999 | 2000 | if source_ip_address in network_address: |
@@ -101,7 +101,7 b' def _filter_port(ip):' | |||
|
101 | 101 | else: |
|
102 | 102 | # fallback to ipaddress |
|
103 | 103 | try: |
|
104 | ipaddress.IPv6Address(ip_addr) | |
|
104 | ipaddress.IPv6Address(safe_unicode(ip_addr)) | |
|
105 | 105 | except Exception: |
|
106 | 106 | return False |
|
107 | 107 | return True |
@@ -286,6 +286,7 b' def attach_context_attributes(context, r' | |||
|
286 | 286 | Attach variables into template context called `c`, please note that |
|
287 | 287 | request could be pylons or pyramid request in here. |
|
288 | 288 | """ |
|
289 | ||
|
289 | 290 | rc_config = SettingsModel().get_all_settings(cache=True) |
|
290 | 291 | |
|
291 | 292 | context.rhodecode_version = rhodecode.__version__ |
@@ -1123,7 +1123,7 b' class UserIpMap(Base, BaseModel):' | |||
|
1123 | 1123 | |
|
1124 | 1124 | @classmethod |
|
1125 | 1125 | def _get_ip_range(cls, ip_addr): |
|
1126 | net = ipaddress.ip_network(ip_addr, strict=False) | |
|
1126 | net = ipaddress.ip_network(safe_unicode(ip_addr), strict=False) | |
|
1127 | 1127 | return [str(net.network_address), str(net.broadcast_address)] |
|
1128 | 1128 | |
|
1129 | 1129 | def __json__(self): |
@@ -777,6 +777,7 b' class UserModel(BaseModel):' | |||
|
777 | 777 | |
|
778 | 778 | def parse_ip_range(self, ip_range): |
|
779 | 779 | ip_list = [] |
|
780 | ||
|
780 | 781 | def make_unique(value): |
|
781 | 782 | seen = [] |
|
782 | 783 | return [c for c in value if not (c in seen or seen.append(c))] |
@@ -788,8 +789,8 b' class UserModel(BaseModel):' | |||
|
788 | 789 | ip_range = ip_range.strip() |
|
789 | 790 | if '-' in ip_range: |
|
790 | 791 | start_ip, end_ip = ip_range.split('-', 1) |
|
791 | start_ip = ipaddress.ip_address(start_ip.strip()) | |
|
792 | end_ip = ipaddress.ip_address(end_ip.strip()) | |
|
792 | start_ip = ipaddress.ip_address(safe_unicode(start_ip.strip())) | |
|
793 | end_ip = ipaddress.ip_address(safe_unicode(end_ip.strip())) | |
|
793 | 794 | parsed_ip_range = [] |
|
794 | 795 | |
|
795 | 796 | for index in xrange(int(start_ip), int(end_ip) + 1): |
@@ -27,7 +27,7 b' import ipaddress' | |||
|
27 | 27 | import colander |
|
28 | 28 | |
|
29 | 29 | from rhodecode.translation import _ |
|
30 | from rhodecode.lib.utils2 import glob2re | |
|
30 | from rhodecode.lib.utils2 import glob2re, safe_unicode | |
|
31 | 31 | |
|
32 | 32 | log = logging.getLogger(__name__) |
|
33 | 33 | |
@@ -35,7 +35,7 b' log = logging.getLogger(__name__)' | |||
|
35 | 35 | def ip_addr_validator(node, value): |
|
36 | 36 | try: |
|
37 | 37 | # this raises an ValueError if address is not IpV4 or IpV6 |
|
38 | ipaddress.ip_network(value, strict=False) | |
|
38 | ipaddress.ip_network(safe_unicode(value), strict=False) | |
|
39 | 39 | except ValueError: |
|
40 | 40 | msg = _(u'Please enter a valid IPv4 or IpV6 address') |
|
41 | 41 | raise colander.Invalid(node, msg) |
@@ -48,7 +48,7 b' class IpAddrValidator(object):' | |||
|
48 | 48 | def __call__(self, node, value): |
|
49 | 49 | try: |
|
50 | 50 | # this raises an ValueError if address is not IpV4 or IpV6 |
|
51 | ipaddress.ip_network(value, strict=self.strict) | |
|
51 | ipaddress.ip_network(safe_unicode(value), strict=self.strict) | |
|
52 | 52 | except ValueError: |
|
53 | 53 | msg = _(u'Please enter a valid IPv4 or IpV6 address') |
|
54 | 54 | raise colander.Invalid(node, msg) |
@@ -44,7 +44,7 b' from rhodecode.authentication.base impor' | |||
|
44 | 44 | from rhodecode.config.routing import ADMIN_PREFIX |
|
45 | 45 | from rhodecode.lib.auth import HasRepoGroupPermissionAny, HasPermissionAny |
|
46 | 46 | from rhodecode.lib.utils import repo_name_slug, make_db_config |
|
47 | from rhodecode.lib.utils2 import safe_int, str2bool, aslist, md5 | |
|
47 | from rhodecode.lib.utils2 import safe_int, str2bool, aslist, md5, safe_unicode | |
|
48 | 48 | from rhodecode.lib.vcs.backends.git.repository import GitRepository |
|
49 | 49 | from rhodecode.lib.vcs.backends.hg.repository import MercurialRepository |
|
50 | 50 | from rhodecode.lib.vcs.backends.svn.repository import SubversionRepository |
@@ -972,13 +972,13 b' def ValidIp():' | |||
|
972 | 972 | # we ovveride the default to_python() call |
|
973 | 973 | def to_python(self, value, state): |
|
974 | 974 | v = super(_validator, self).to_python(value, state) |
|
975 | v = v.strip() | |
|
975 | v = safe_unicode(v.strip()) | |
|
976 | 976 | net = ipaddress.ip_network(address=v, strict=False) |
|
977 | 977 | return str(net) |
|
978 | 978 | |
|
979 | 979 | def validate_python(self, value, state): |
|
980 | 980 | try: |
|
981 | addr = value.strip() | |
|
981 | addr = safe_unicode(value.strip()) | |
|
982 | 982 | # this raises an ValueError if address is not IpV4 or IpV6 |
|
983 | 983 | ipaddress.ip_network(addr, strict=False) |
|
984 | 984 | except ValueError: |
@@ -261,7 +261,7 b' def test_revoke_perm(test_user):' | |||
|
261 | 261 | def test_ip_range_generator(ip_range, expected, expect_errors): |
|
262 | 262 | func = UserModel().parse_ip_range |
|
263 | 263 | if expect_errors: |
|
264 |
pytest.raises( |
|
|
264 | pytest.raises(ValueError, func, ip_range) | |
|
265 | 265 | else: |
|
266 | 266 | parsed_list = func(ip_range) |
|
267 | 267 | assert parsed_list == expected |
General Comments 0
You need to be logged in to leave comments.
Login now