Add the ability to blacklist v2 for specific versions
This commit is contained in:
parent
4a84388f15
commit
766d60493f
7 changed files with 97 additions and 2 deletions
27
util/registry/dockerver.py
Normal file
27
util/registry/dockerver.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
import re
|
||||
|
||||
from semantic_version import Version
|
||||
|
||||
_USER_AGENT_SEARCH_REGEX = re.compile(r'docker\/([0-9]+(?:\.[0-9]+){1,2})')
|
||||
_EXACT_1_5_USER_AGENT = re.compile(r'^Go 1\.1 package http$')
|
||||
_ONE_FIVE_ZERO = '1.5.0'
|
||||
|
||||
def docker_version(user_agent_string):
|
||||
""" Extract the Docker version from the user agent, taking special care to
|
||||
handle the case of a 1.5 client requesting an auth token, which sends
|
||||
a broken user agent. If we can not positively identify a version, return
|
||||
None.
|
||||
"""
|
||||
|
||||
# First search for a well defined semver portion in the UA header.
|
||||
found_semver = _USER_AGENT_SEARCH_REGEX.search(user_agent_string)
|
||||
if found_semver:
|
||||
return Version(found_semver.group(1), partial=True)
|
||||
|
||||
# Check if we received the very specific header which represents a 1.5 request
|
||||
# to the auth endpoints.
|
||||
elif _EXACT_1_5_USER_AGENT.match(user_agent_string):
|
||||
return Version(_ONE_FIVE_ZERO)
|
||||
|
||||
else:
|
||||
return None
|
Reference in a new issue