Send the authz headers on all requests

This commit is contained in:
Adrià Mercader 2011-03-10 15:32:51 +00:00
parent ad239b93e8
commit 6cc73aa1f7
1 changed files with 40 additions and 42 deletions

View File

@ -8,43 +8,52 @@ from ckan.lib.base import BaseController, c, g, request, \
class ViewController(BaseController): class ViewController(BaseController):
api_url = config.get('ckan.api_url', 'http://localhost:5000').rstrip('/')+'/api/2/rest' api_url = config.get('ckan.api_url', 'http://localhost:5000').rstrip('/')+'/api/2/rest'
api_key = config.get('ckan.harvesting.api_key')
def index(self):
def _do_request(self,url,data = None):
http_request = urllib2.Request(
url = url,
headers = {'Authorization' : self.api_key}
)
if data:
http_request.add_data(data)
try: try:
# Request all harvesting sources return urllib2.urlopen(http_request)
sources_url = self.api_url + '/harvestsource'
doc = urllib2.urlopen(sources_url).read()
sources_ids = json.loads(doc)
source_url = sources_url + '/%s'
sources = []
# For each source, request its details
for source_id in sources_ids:
doc = urllib2.urlopen(source_url % source_id).read()
sources.append(json.loads(doc))
c.sources = sources
return render('ckanext/harvest/index.html')
except urllib2.HTTPError as e: except urllib2.HTTPError as e:
raise Exception('The forms API returned an error:' + str(e.getcode()) + ' ' + e.msg ) raise Exception('The API call returned an error: ' + str(e.getcode()) + \
' ' + e.msg + ' [' + e.url + ']')
def index(self):
# Request all harvesting sources
sources_url = self.api_url + '/harvestsource'
doc = self._do_request(sources_url).read()
sources_ids = json.loads(doc)
source_url = sources_url + '/%s'
sources = []
# For each source, request its details
for source_id in sources_ids:
doc = self._do_request(source_url % source_id).read()
sources.append(json.loads(doc))
c.sources = sources
return render('ckanext/harvest/index.html')
def create(self): def create(self):
# This is the DGU form API, so we don't use self.api_url # This is the DGU form API, so we don't use self.api_url
form_url = config.get('ckan.api_url', '/').rstrip('/') + \ form_url = config.get('ckan.api_url', '/').rstrip('/') + \
'/api/2/form/harvestsource/create' '/api/2/form/harvestsource/create'
# Create a Request object to define the Authz header
http_request = urllib2.Request(
url = form_url,
headers = {'Authorization' : config.get('ckan.harvesting.api_key')}
)
if request.method == 'GET': if request.method == 'GET':
# Request the fields # Request the fields
c.form = urllib2.urlopen(http_request).read() c.form = self._do_request(form_url).read()
return render('ckanext/harvest/create.html') return render('ckanext/harvest/create.html')
if request.method == 'POST': if request.method == 'POST':
@ -57,30 +66,19 @@ class ViewController(BaseController):
'publisher_ref':'' 'publisher_ref':''
} }
data = json.dumps(data) data = json.dumps(data)
http_request.add_data(data)
try: try:
r = urllib2.urlopen(http_request) r = self._do_request(form_url,data)
h.flash_success('Harvesting source added successfully') h.flash_success('Harvesting source added successfully')
redirect(h.url_for(controller='harvest', action='index')) redirect(h.url_for(controller='harvest', action='index'))
except urllib2.HTTPError as e: except urllib2.HTTPError as e:
h.flash_error('An error occurred: ' + str(e.getcode()) + ' ' + e.msg) raise Exception('The forms API returned an error:' + str(e.getcode()) + ' ' + e.msg )
redirect(h.url_for(controller='harvest', action='create'))
"""
if e.getcode() == 403:
abort(403)
else:
raise Exception('The forms API returned an error:' + str(e.getcode()) + ' ' + e.msg )
"""
def show(self,id): def show(self,id):
sources_url = self.api_url + '/harvestsource/%s' % id sources_url = self.api_url + '/harvestsource/%s' % id
try: doc = self._do_request(sources_url).read()
doc = urllib2.urlopen(sources_url).read()
except urllib2.HTTPError as e:
raise Exception('The forms API returned an error:' + str(e.getcode()) + ' ' + e.msg )
c.source = json.loads(doc) c.source = json.loads(doc)
return render('ckanext/harvest/show.html') return render('ckanext/harvest/show.html')