Skip to content
This repository was archived by the owner on Oct 21, 2022. It is now read-only.

Commit cb5536c

Browse files
authored
Add whitelist check for github head version packages (#172)
1 parent 2505b0a commit cb5536c

2 files changed

Lines changed: 42 additions & 4 deletions

File tree

compatibility_lib/compatibility_lib/compatibility_checker.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,13 @@
2222

2323
from compatibility_lib import configs
2424

25-
SERVER_URL = 'http://104.197.8.72'
25+
SERVER_URL = 'http://0.0.0.0:8888'
26+
27+
PACKAGE_NOT_IN_WHITELIST = 'Request contains third party github head packages.'
28+
29+
UNKNOWN_STATUS_RESULT = {
30+
'result': 'UNKNOWN',
31+
}
2632

2733

2834
class CompatibilityChecker(object):
@@ -37,8 +43,13 @@ def check(self, packages, python_version):
3743
'package': packages
3844
}
3945
result = requests.get(SERVER_URL, params=data)
46+
content = result.content.decode('utf-8')
47+
if content == PACKAGE_NOT_IN_WHITELIST:
48+
UNKNOWN_STATUS_RESULT['packages'] = packages
49+
UNKNOWN_STATUS_RESULT['description'] = PACKAGE_NOT_IN_WHITELIST
50+
return UNKNOWN_STATUS_RESULT
4051

41-
return json.loads(result.content.decode('utf-8'))
52+
return json.loads(content)
4253

4354
@retrying.retry(wait_exponential_multiplier=5000,
4455
wait_exponential_max=20000)

compatibility_server/compatibility_checker_server.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@
4949

5050
import pip_checker
5151

52+
# White list Google owned Python packages
53+
GITHUB_PREFIX = 'github.com/'
54+
WHITELIST_GITHUB_REPO = ['GoogleCloudPlatform/',
55+
'google/',
56+
'googleapis/']
57+
5258

5359
def _parse_python_version_to_interpreter_mapping(s):
5460
version_to_interpreter = {}
@@ -96,6 +102,13 @@ def _check(self, start_response, python_version, packages):
96102
[('Content-Type', 'text/plain; charset=utf-8')])
97103
return [b'Request must specify at least one package']
98104

105+
sanitized_packages = self._sanitize_packages(packages)
106+
107+
if sanitized_packages != packages:
108+
start_response('400 Bad Request',
109+
[('Content-Type', 'text/plain; charset=utf-8')])
110+
return [b'Request contains third party github head packages.']
111+
99112
if not python_version:
100113
start_response('400 Bad Request',
101114
[('Content-Type', 'text/plain; charset=utf-8')])
@@ -139,6 +152,21 @@ def _check(self, start_response, python_version, packages):
139152
start_response('200 OK', [('Content-Type', 'application/json')])
140153
return [json.dumps(results).encode('utf-8')]
141154

155+
def _sanitize_packages(self, packages):
156+
# If checking github head version, only run checks for whitelisted
157+
# repos.
158+
sanitized_packages = []
159+
for pkg in packages:
160+
if GITHUB_PREFIX in pkg:
161+
for whitelist_repo in WHITELIST_GITHUB_REPO:
162+
github_whitelist = GITHUB_PREFIX + whitelist_repo
163+
if github_whitelist in pkg:
164+
sanitized_packages.append(pkg)
165+
else:
166+
sanitized_packages.append(pkg)
167+
168+
return sanitized_packages
169+
142170
def _wsgi_app(self, environ, start_response):
143171
if environ.get('REQUEST_METHOD') == 'GET':
144172
parameters = urllib.parse.parse_qs(environ.get('QUERY_STRING', ''))
@@ -170,8 +198,7 @@ def _wsgi_app(self, environ, start_response):
170198
environ.get('REQUEST_METHOD').encode('utf-8')
171199
]
172200

173-
return self._check(start_response, python_version,
174-
packages)
201+
return self._check(start_response, python_version, packages)
175202

176203
def serve(self):
177204
with wsgiref.simple_server.make_server(self._host, self._port,

0 commit comments

Comments
 (0)