From d27b2a2b7878dbb68dd94833300fcba68bc91b10 Mon Sep 17 00:00:00 2001 From: Mario de Frutos Date: Fri, 26 Feb 2016 10:42:05 +0100 Subject: [PATCH] Block google services users to use isolines functions Due some service restrictions, google services users couldn't use the HERE services which includes the isolines functions. --- .../extension/cdb_dataservices_server--0.3.0--0.4.0.sql | 6 ++++++ server/extension/cdb_dataservices_server--0.4.0.sql | 6 ++++++ server/extension/sql/0.4.0/85_isodistance.sql | 3 +++ server/extension/sql/0.4.0/90_isochrone.sql | 3 +++ .../cartodb_services/cartodb_services/metrics/config.py | 9 ++++++++- 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/server/extension/cdb_dataservices_server--0.3.0--0.4.0.sql b/server/extension/cdb_dataservices_server--0.3.0--0.4.0.sql index 221898d..d56be82 100644 --- a/server/extension/cdb_dataservices_server--0.3.0--0.4.0.sql +++ b/server/extension/cdb_dataservices_server--0.3.0--0.4.0.sql @@ -87,6 +87,9 @@ RETURNS SETOF cdb_dataservices_server.isoline AS $$ user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] type = 'isodistance' + if user_isolines_config.google_services_user: + plpy.error('This service is not available for google service users.') + here_plan = plpy.prepare("SELECT cdb_dataservices_server._cdb_here_routing_isolines($1, $2, $3, $4, $5, $6, $7) as isoline; ", ["text", "text", "text", "geometry(Geometry, 4326)", "text", "integer[]", "text[]"]) result = plpy.execute(here_plan, [username, orgname, type, source, mode, range, options]) isolines = [] @@ -106,6 +109,9 @@ RETURNS SETOF cdb_dataservices_server.isoline AS $$ user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] type = 'isochrone' + if user_isolines_config.google_services_user: + plpy.error('This service is not available for google service users.') + here_plan = plpy.prepare("SELECT cdb_dataservices_server._cdb_here_routing_isolines($1, $2, $3, $4, $5, $6, $7) as isoline; ", ["text", "text", "text", "geometry(Geometry, 4326)", "text", "integer[]", "text[]"]) result = plpy.execute(here_plan, [username, orgname, type, source, mode, range, options]) isolines = [] diff --git a/server/extension/cdb_dataservices_server--0.4.0.sql b/server/extension/cdb_dataservices_server--0.4.0.sql index 85cffae..5aa3aac 100644 --- a/server/extension/cdb_dataservices_server--0.4.0.sql +++ b/server/extension/cdb_dataservices_server--0.4.0.sql @@ -866,6 +866,9 @@ RETURNS SETOF cdb_dataservices_server.isoline AS $$ user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] type = 'isodistance' + if user_isolines_config.google_services_user: + plpy.error('This service is not available for google service users.') + here_plan = plpy.prepare("SELECT cdb_dataservices_server._cdb_here_routing_isolines($1, $2, $3, $4, $5, $6, $7) as isoline; ", ["text", "text", "text", "geometry(Geometry, 4326)", "text", "integer[]", "text[]"]) result = plpy.execute(here_plan, [username, orgname, type, source, mode, range, options]) isolines = [] @@ -884,6 +887,9 @@ RETURNS SETOF cdb_dataservices_server.isoline AS $$ user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] type = 'isochrone' + if user_isolines_config.google_services_user: + plpy.error('This service is not available for google service users.') + here_plan = plpy.prepare("SELECT cdb_dataservices_server._cdb_here_routing_isolines($1, $2, $3, $4, $5, $6, $7) as isoline; ", ["text", "text", "text", "geometry(Geometry, 4326)", "text", "integer[]", "text[]"]) result = plpy.execute(here_plan, [username, orgname, type, source, mode, range, options]) isolines = [] diff --git a/server/extension/sql/0.4.0/85_isodistance.sql b/server/extension/sql/0.4.0/85_isodistance.sql index c6d99ae..3c3ac0e 100644 --- a/server/extension/sql/0.4.0/85_isodistance.sql +++ b/server/extension/sql/0.4.0/85_isodistance.sql @@ -6,6 +6,9 @@ RETURNS SETOF cdb_dataservices_server.isoline AS $$ user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] type = 'isodistance' + if user_isolines_config.google_services_user: + plpy.error('This service is not available for google service users.') + here_plan = plpy.prepare("SELECT cdb_dataservices_server._cdb_here_routing_isolines($1, $2, $3, $4, $5, $6, $7) as isoline; ", ["text", "text", "text", "geometry(Geometry, 4326)", "text", "integer[]", "text[]"]) result = plpy.execute(here_plan, [username, orgname, type, source, mode, range, options]) isolines = [] diff --git a/server/extension/sql/0.4.0/90_isochrone.sql b/server/extension/sql/0.4.0/90_isochrone.sql index 5ca7272..6237bd7 100644 --- a/server/extension/sql/0.4.0/90_isochrone.sql +++ b/server/extension/sql/0.4.0/90_isochrone.sql @@ -6,6 +6,9 @@ RETURNS SETOF cdb_dataservices_server.isoline AS $$ user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] type = 'isochrone' + if user_isolines_config.google_services_user: + plpy.error('This service is not available for google service users.') + here_plan = plpy.prepare("SELECT cdb_dataservices_server._cdb_here_routing_isolines($1, $2, $3, $4, $5, $6, $7) as isoline; ", ["text", "text", "text", "geometry(Geometry, 4326)", "text", "integer[]", "text[]"]) result = plpy.execute(here_plan, [username, orgname, type, source, mode, range, options]) isolines = [] diff --git a/server/lib/python/cartodb_services/cartodb_services/metrics/config.py b/server/lib/python/cartodb_services/cartodb_services/metrics/config.py index 484cbb7..2e395c5 100644 --- a/server/lib/python/cartodb_services/cartodb_services/metrics/config.py +++ b/server/lib/python/cartodb_services/cartodb_services/metrics/config.py @@ -32,7 +32,7 @@ class IsolinesRoutingConfig(ServiceConfig): ROUTING_CONFIG_KEYS = ['here_isolines_quota', 'soft_here_isolines_limit', 'period_end_date', 'username', 'orgname', - 'heremaps_app_id', 'heremaps_app_code'] + 'heremaps_app_id', 'heremaps_app_code', 'geocoder_type'] NOKIA_APP_ID_KEY = 'heremaps_app_id' NOKIA_APP_CODE_KEY = 'heremaps_app_code' QUOTA_KEY = 'here_isolines_quota' @@ -40,6 +40,8 @@ class IsolinesRoutingConfig(ServiceConfig): USERNAME_KEY = 'username' ORGNAME_KEY = 'orgname' PERIOD_END_DATE = 'period_end_date' + GEOCODER_TYPE_KEY = 'geocoder_type' + GOOGLE_GEOCODER = 'google' def __init__(self, redis_connection, username, orgname=None, heremaps_app_id=None, heremaps_app_code=None): @@ -74,6 +76,7 @@ class IsolinesRoutingConfig(ServiceConfig): user_config[self.PERIOD_END_DATE] = org_config[self.PERIOD_END_DATE] def __parse_config(self, filtered_config): + self._geocoder_type = filtered_config[self.GEOCODER_TYPE_KEY].lower() self._isolines_quota = float(filtered_config[self.QUOTA_KEY]) self._period_end_date = date_parse(filtered_config[self.PERIOD_END_DATE]) if filtered_config[self.SOFT_LIMIT_KEY].lower() == 'true': @@ -107,6 +110,10 @@ class IsolinesRoutingConfig(ServiceConfig): def heremaps_app_code(self): return self._heremaps_app_code + @property + def google_services_user(self): + return self._geocoder_type == self.GOOGLE_GEOCODER + class InternalGeocoderConfig(ServiceConfig):