Skip to content
This repository was archived by the owner on Sep 16, 2022. It is now read-only.

Commit bb654a6

Browse files
author
Hannu Kamarainen
committed
CSCMETAX-394: [ADD] Remove sensitive fields (email, phone, telephone) from OAI-PMH api outputs
1 parent a7d893a commit bb654a6

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

src/metax_api/api/oaipmh/base/metax_oai_server.py

+6
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,12 @@ def _get_oai_datacite_metadata(self, record):
204204

205205
def _get_metadata_for_record(self, record, metadata_prefix):
206206
meta = {}
207+
208+
# strip sensitive fields from research_dataset. note: the modified research_dataset
209+
# is placed back into the record's research_dataset -field. meaning, an accidental call
210+
# of record.save() would overwrite the original data
211+
# record.research_dataset = CRS.strip_catalog_record(record.research_dataset)
212+
207213
if metadata_prefix == 'oai_dc':
208214
meta = self._get_oai_dc_metadata(record)
209215
elif metadata_prefix == 'oai_datacite':

src/metax_api/tests/api/oaipmh/minimal_api.py

+30
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,33 @@ def test_get_oai_dc_metadata(self):
231231
self.assertTrue('identifier' in md)
232232
self.assertTrue('title' in md)
233233
self.assertTrue('lang' in md['title'][0])
234+
235+
def test_sensitive_fields_are_removed(self):
236+
"""
237+
Ensure some sensitive fields are never present in output of OAI-PMH apis
238+
"""
239+
240+
def _check_fields(content):
241+
"""
242+
Verify sensitive fields are not in the content
243+
"""
244+
for sensitive_field in ['email', 'telephone', 'phone']:
245+
self.assertEqual(sensitive_field not in str(content), True,
246+
'field %s should have been stripped' % sensitive_field)
247+
248+
# setup some records to have sensitive fields
249+
for cr in CatalogRecord.objects.filter(pk__in=(1, 2, 3)):
250+
cr.research_dataset['curator'][0].update({
251+
'email': '[email protected]',
252+
'phone': '123124',
253+
'telephone': '123124',
254+
})
255+
cr.force_save()
256+
257+
response = self.client.get('/oai/?verb=GetRecord&identifier=%s&metadataPrefix=oai_dc' % self.identifier)
258+
self.assertEqual(response.status_code, status.HTTP_200_OK)
259+
_check_fields(response.content)
260+
261+
response = self.client.get('/oai/?verb=GetRecord&identifier=%s&metadataPrefix=oai_datacite' % self.identifier)
262+
self.assertEqual(response.status_code, status.HTTP_200_OK)
263+
_check_fields(response.content)

0 commit comments

Comments
 (0)