Skip to content

Commit

Permalink
[#3816] resource query validator
Browse files Browse the repository at this point in the history
  • Loading branch information
wardi committed Oct 12, 2017
1 parent 3d93b55 commit e978a6b
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions ckanext/datastore/plugin.py
Expand Up @@ -36,6 +36,7 @@ class DatastorePlugin(p.SingletonPlugin):
p.implements(p.IResourceController, inherit=True)
p.implements(p.ITemplateHelpers)
p.implements(p.IForkObserver, inherit=True)
p.implements(p.IValidators)
p.implements(interfaces.IDatastore, inherit=True)
p.implements(interfaces.IDatastoreBackend, inherit=True)

Expand Down Expand Up @@ -261,3 +262,23 @@ def before_fork(self):
pass
else:
before_fork()

# IValidators

def get_validators(self):
return {u'datastore_resource_query': datastore_resource_query}


def datastore_resource_query(value):
'''Overrides default resource query field validator
checks SQL query for validity and user permissions'''
try:
p.toolkit.get_action('datastore_search_sql')(
None,
{'sql': value, 'dry_run': True})
except p.toolkit.ValidationError as e:
raise p.toolkit.Invalid(e['sql'])
except p.toolkit.NotAuthorized as e:
raise p.toolkit.Invalid(e.message)
return value

0 comments on commit e978a6b

Please sign in to comment.