Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit ef0f12a1216d3749b42302efb6509e67b0052c7e
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Fri Feb 20 23:22:11 2015 +0100
[frontend] views.misc.intranet_required use netaddr lib to compare addresses
---------------------------------------------------------------
frontend/copr-frontend.spec | 2 ++
frontend/coprs_frontend/config/copr_devel.conf | 4 +++-
frontend/coprs_frontend/coprs/views/misc.py | 14 ++++++--------
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/frontend/copr-frontend.spec b/frontend/copr-frontend.spec
index 3df1de9..bf83869 100644
--- a/frontend/copr-frontend.spec
+++ b/frontend/copr-frontend.spec
@@ -51,6 +51,7 @@ Requires: python-pylibravatar
Requires: python-whoosh >= 2.5.3
Requires: pytz
Requires: python-six
+Requires: python-netaddr
# for tests:
Requires: pytest
Requires: python-flexmock
@@ -70,6 +71,7 @@ BuildRequires: python-flask-openid
BuildRequires: python-flask-whooshee
BuildRequires: python-pylibravatar
BuildRequires: python-flask-wtf
+BuildRequires: python-netaddr
BuildRequires: pytest
BuildRequires: yum
BuildRequires: python-flexmock
diff --git a/frontend/coprs_frontend/config/copr_devel.conf
b/frontend/coprs_frontend/config/copr_devel.conf
index d6c5615..c586406 100644
--- a/frontend/coprs_frontend/config/copr_devel.conf
+++ b/frontend/coprs_frontend/config/copr_devel.conf
@@ -44,4 +44,6 @@ ENFORCE_PROTOCOL_FOR_FRONTEND_URL = "http"
PUBLIC_COPR_HOSTNAME = "copr-fe-dev.cloud.fedoraproject.org"
LOG_FILENAME="/tmp/copr_frontend.log"
-INTRANET_IPS = ["127.0.0.1", "192.168.1.102"]
+
+# IP or subnet
+INTRANET_IPS = ["127.0.0.1", "192.168.1.0/24"]
diff --git a/frontend/coprs_frontend/coprs/views/misc.py
b/frontend/coprs_frontend/coprs/views/misc.py
index db29c29..6714f78 100644
--- a/frontend/coprs_frontend/coprs/views/misc.py
+++ b/frontend/coprs_frontend/coprs/views/misc.py
@@ -2,6 +2,7 @@ import base64
import datetime
import functools
+from netaddr import IPAddress, IPNetwork
import re
import flask
@@ -258,14 +259,11 @@ def backend_authenticated(f):
def intranet_required(f):
@functools.wraps(f)
def decorated_function(*args, **kwargs):
- # app.logger.debug("MY: {}".format(flask.request.remote_addr))
- # Use,
- # >>> import ipaddress
- # >>> ipaddress.ip_address('192.168.0.1') in
ipaddress.ip_network('192.168.0.0/24')
- if not app.config["DEBUG"]:
- if flask.request.remote_addr not in app.config["INTRANET_IPS"]:
- return ("Stats can be update only from intranet hosts, "
- "not {}, check
config\n".format(flask.request.remote_addr)), 403
+ ip_addr = IPAddress(flask.request.remote_addr)
+ if not any(ip_addr in IPNetwork(addr_or_net)
+ for addr_or_net in app.config.get(["INTRANET_IPS"],
"127.0.0.1")):
+ return ("Stats can be update only from intranet hosts, "
+ "not {}, check
config\n".format(flask.request.remote_addr)), 403
return f(*args, **kwargs)
return decorated_function