Skip to content

Commit

Permalink
[Hardening] check for empty strings other than 'None' attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
afabiani committed Oct 31, 2020
1 parent 12f5f86 commit 68797e6
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 36 deletions.
2 changes: 1 addition & 1 deletion examples/copy_layergroup.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
prefix = "wayne_"

def resolve(layer, style):
if style is not None:
if style is not None and style:
return (layer, style)
else:
return (layer, demo.get_layer(layer).default_style.name)
Expand Down
29 changes: 15 additions & 14 deletions src/geoserver/catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ def create_wmslayer(self, workspace, store, name, nativeName=None):
def add_data_to_store(self, store, name, data, workspace=None, overwrite = False, charset = None):
if isinstance(store, string_types):
store = self.get_stores(names=store, workspaces=[workspace])[0]
if workspace is not None:
if workspace is not None and workspace:
workspace = _name(workspace)
assert store.workspace.name == workspace, "Specified store (%s) is not in specified workspace (%s)!" % (store, workspace)
else:
Expand All @@ -412,7 +412,7 @@ def add_data_to_store(self, store, name, data, workspace=None, overwrite = False
params = dict()
if overwrite:
params["update"] = "overwrite"
if charset is not None:
if charset is not None and charset:
params["charset"] = charset
params["filename"] = "{}.zip".format(name)
params["target"] = "shp"
Expand Down Expand Up @@ -453,7 +453,7 @@ def create_featurestore(self, name, data, workspace=None, overwrite=False, chars
raise ConflictingDataError(msg)

params = dict()
if charset is not None:
if charset is not None and charset:
params['charset'] = charset
url = build_url(
self.service_url,
Expand Down Expand Up @@ -498,7 +498,7 @@ def create_imagemosaic(self, name, data, configure='first', workspace=None, over
raise ConflictingDataError("There is already a store named {}".format(name))

params = dict()
if charset is not None:
if charset is not None and charset:
params['charset'] = charset
if configure.lower() not in ('first', 'none', 'all'):
raise ValueError("configure most be one of: first, none, all")
Expand Down Expand Up @@ -746,11 +746,11 @@ def list_granules(self, coverage, store, workspace=None, filter=None, limit=None
'''List granules of an imagemosaic'''
params = dict()

if filter is not None:
if filter is not None and filter:
params['filter'] = filter
if limit is not None:
if limit is not None and limit:
params['limit'] = limit
if offset is not None:
if offset is not None and offset:
params['offset'] = offset

workspace_name = workspace
Expand Down Expand Up @@ -866,7 +866,7 @@ def publish_featuretype(self, name, store, native_crs, srs=None, jdbc_virtual_ta
feature_type.advertised = True
feature_type.title = name

if native_name is not None:
if native_name is not None and native_name:
feature_type.native_name = native_name

headers = {
Expand All @@ -875,7 +875,7 @@ def publish_featuretype(self, name, store, native_crs, srs=None, jdbc_virtual_ta
}

resource_url = store.resource_url
if jdbc_virtual_table is not None:
if jdbc_virtual_table is not None and jdbc_virtual_table:
feature_type.metadata = ({'JDBC_VIRTUAL_TABLE': jdbc_virtual_table})
params = dict()
resource_url = build_url(
Expand Down Expand Up @@ -1148,7 +1148,7 @@ def create_style(self, name, data, overwrite=False, workspace=None, style_format
else:
style = None

if not overwrite and style is not None:
if not overwrite and style is not None and style:
raise ConflictingDataError("There is already a style named %s" % name)

if not style:
Expand All @@ -1158,10 +1158,11 @@ def create_style(self, name, data, overwrite=False, workspace=None, style_format
"Content-type": "application/xml",
"Accept": "text/plain"
}
resp = self.http_request(style.create_href, method='post', data=xml, headers=headers)
create_url = style.create_href
resp = self.http_request(create_url, method='post', data=xml, headers=headers)
if resp.status_code == 406:
headers["Accept"] = "application/xml"
resp = self.http_request(style.create_href, method='post', data=xml, headers=headers)
resp = self.http_request(create_url, method='post', data=xml, headers=headers)

if resp.status_code not in (200, 201, 202):
raise FailedRequestError('Failed to create style {} : {}, {}'.format(name, resp.status_code, resp.text))
Expand All @@ -1184,7 +1185,7 @@ def create_style(self, name, data, overwrite=False, workspace=None, style_format

resp = self.http_request(body_href, method='put', data=data, headers=headers)
if resp.status_code not in (200, 201, 202):
raise FailedRequestError('Failed to create style {} : {}, {}'.format(name, resp.status_code, resp.text))
raise FailedRequestError('Failed to update style {} : {}, {}'.format(name, resp.status_code, resp.text))

self._cache.pop(style.href, None)
self._cache.pop(style.body_href, None)
Expand Down Expand Up @@ -1253,7 +1254,7 @@ def set_default_workspace(self, name):
if hasattr(name, 'name'):
name = name.name
workspace = self.get_workspaces(names=name)[0]
if workspace is not None:
if workspace is not None and workspace:
headers = {"Content-Type": "application/xml"}
default_workspace_url = self.service_url + "/workspaces/default.xml"
data = "<workspace><name>{}</name></workspace>".format(name)
Expand Down
26 changes: 13 additions & 13 deletions src/geoserver/layer.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,45 +40,45 @@ def _read_attribution(node):
url = node.find("logoURL")
type = node.find("logoType")

if title is not None:
if title is not None and title:
title = title.text
if width is not None:
if width is not None and width:
width = width.text
if height is not None:
if height is not None and height:
height = height.text
if href is not None:
if href is not None and href:
href = href.text
if url is not None:
if url is not None and url:
url = url.text
if type is not None:
if type is not None and type:
type = type.text

return _attribution(title, width, height, href, url, type)


def _write_attribution(builder, attr):
builder.start("attribution", dict())
if attr.title is not None:
if attr.title is not None and attr.title:
builder.start("title", dict())
builder.data(attr.title)
builder.end("title")
if attr.width is not None:
if attr.width is not None and attr.width:
builder.start("logoWidth", dict())
builder.data(attr.width)
builder.end("logoWidth")
if attr.height is not None:
if attr.height is not None and attr.height:
builder.start("logoHeight", dict())
builder.data(attr.height)
builder.end("logoHeight")
if attr.href is not None:
if attr.href is not None and attr.href:
builder.start("href", dict())
builder.data(attr.href)
builder.end("href")
if attr.url is not None:
if attr.url is not None and attr.url:
builder.start("logoURL", dict())
builder.data(attr.url)
builder.end("logoURL")
if attr.type is not None:
if attr.type is not None and attr.type:
builder.start("logoType", dict())
builder.data(attr.type)
builder.end("logoType")
Expand All @@ -98,7 +98,7 @@ def _write_style_element(builder, name):

def _write_default_style(builder, name):
builder.start("defaultStyle", dict())
if name is not None:
if name is not None and name:
_write_style_element(builder, name)
builder.end("defaultStyle")

Expand Down
4 changes: 2 additions & 2 deletions src/geoserver/layergroup.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def __init__(self, catalog, name, workspace=None):
@property
def href(self):
path_parts = "layergroups/{}.xml".format(self.name)
if self.workspace is not None:
if self.workspace is not None and self.workspace:
workspace_name = getattr(self.workspace, 'name', self.workspace)
path_parts = "workspaces/{}/{}".format(workspace_name, path_parts)
return urljoin(
Expand Down Expand Up @@ -167,7 +167,7 @@ def __init__(self, catalog, name, layers, styles, bounds, mode, abstract, title,
def href(self):
query = {'name': self.name}
path_parts = ['layergroups']
if self.workspace is not None:
if self.workspace is not None and self.workspace:
workspace_name = getattr(self.workspace, 'name', self.workspace)
path_parts = ["workspaces", workspace_name] + path_parts
return build_url(self.catalog.service_url, path_parts, query)
2 changes: 1 addition & 1 deletion src/geoserver/style.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def _build_href(self, extension, create=False):
path_parts.append(self.name + extension)
else:
query['name'] = self.name
if self.workspace is not None:
if self.workspace is not None and self.workspace:
path_parts = ["workspaces", getattr(self.workspace, 'name', self.workspace)] + path_parts
return build_url(self.catalog.service_url, path_parts, query)

Expand Down
10 changes: 5 additions & 5 deletions src/geoserver/support.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ def key_value_pairs(node):
def write_string(name):
def write(builder, value):
builder.start(name, dict())
if value is not None:
if value is not None and value:
builder.data(value)
builder.end(name)
return write
Expand Down Expand Up @@ -290,7 +290,7 @@ def bbox_xml(builder, box):
builder.start("maxy", dict())
builder.data(str(maxy))
builder.end("maxy")
if crs is not None:
if crs is not None and crs:
builder.start("crs", {"class": "projected"})
builder.data(crs)
builder.end("crs")
Expand Down Expand Up @@ -533,15 +533,15 @@ def jdbc_virtual_table(builder, metadata):
if metadata.geometry is not None:
g = metadata.geometry
builder.start("geometry", dict())
if g.name is not None:
if g.name is not None and g.name:
builder.start("name", dict())
builder.data(g.name)
builder.end("name")
if g.type is not None:
if g.type is not None and g.type:
builder.start("type", dict())
builder.data(g.type)
builder.end("type")
if g.srid is not None:
if g.srid is not None and g.srid:
builder.start("srid", dict())
builder.data(g.srid)
builder.end("srid")
Expand Down

0 comments on commit 68797e6

Please sign in to comment.