def validate_external_location(uri): """ Validate if URI of external location are supported. Only over non-local store types are OK, i.e. Swift, HTTP. Note the absence of 'file://' for security reasons, see LP bug #942118, 1400966, 'swift+config://' is also absent for security reasons, see LP bug #1334196. :param uri: The URI of external image location. :returns: Whether given URI of external image location are OK. """ if not uri: return False # TODO(zhiyan): This function could be moved to glance_store. # TODO(gm): Use a whitelist of allowed schemes scheme = urlparse.urlparse(uri).scheme known_schemes = store_api.get_known_schemes() if CONF.enabled_backends: known_schemes = store_api.get_known_schemes_for_multi_store() return (scheme in known_schemes and scheme not in RESTRICTED_URI_SCHEMAS)
def validate_external_location(uri): """ Validate if URI of external location are supported. Only over non-local store types are OK, i.e. Swift, HTTP. Note the absence of 'file://' for security reasons, see LP bug #942118, 1400966, 'swift+config://' is also absent for security reasons, see LP bug #1334196. :param uri: The URI of external image location. :returns: Whether given URI of external image location are OK. """ if not uri: return False # TODO(zhiyan): This function could be moved to glance_store. # TODO(gm): Use a whitelist of allowed schemes scheme = urlparse.urlparse(uri).scheme known_schemes = store_api.get_known_schemes() if CONF.enabled_backends: known_schemes = store_api.get_known_schemes_for_multi_store() return (scheme in known_schemes and scheme not in RESTRICTED_URI_SCHEMAS)