solis: allow dateNaissance in rsa_token payload (#39285)

This commit is contained in:
Thomas NOËL 2020-01-27 13:10:39 +01:00
parent 30132e2578
commit f44ffec80f
3 changed files with 46 additions and 16 deletions

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.18 on 2020-01-27 12:06
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('solis', '0006_solisrsalink'),
]
operations = [
migrations.AddField(
model_name='solisrsalink',
name='dob',
field=models.CharField(blank=True, max_length=64, null=True),
),
]

View File

@ -459,11 +459,11 @@ class Solis(BaseResource):
# RSA endpoints
#
def rsa_token(self, user_id, code):
response = self.request('referentiels/grsa/token', data={
'indexIndividu': user_id,
'codeConfidentiel': code,
})
def rsa_token(self, user_id, code, dob=None):
data = {'indexIndividu': user_id, 'codeConfidentiel': code}
if dob:
data['dateNaissance'] = dob
response = self.request('referentiels/grsa/token', data=data)
return response.get('token')
def rsa_fill_with_link_content(self, link):
@ -491,7 +491,7 @@ class Solis(BaseResource):
}
link['content'] = value
def rsa_get_information(self, information, user_id=None, code=None, token=None,
def rsa_get_information(self, information, user_id=None, code=None, dob=None, token=None,
index='search', links=None):
# simulate "individu" referential: get user details from civi/individu/user_id
if information == 'individu':
@ -504,7 +504,7 @@ class Solis(BaseResource):
data={'json_content': content})
return content
if token is None:
token = self.rsa_token(user_id, code)
token = self.rsa_token(user_id, code, dob)
endpoint = 'referentiels/grsa/' + information + '/' + index + '/'
args = [('token', token)]
if index.startswith('search'): # it can be "search/next" in rdvs referential
@ -530,7 +530,7 @@ class Solis(BaseResource):
@endpoint(name='rsa-link', methods=['post'], perm='can_access',
description=_('Create link between name_id and '
'Solis RSA. Payload: name_id, user_id, code'))
'Solis RSA. Payload: name_id, user_id, code, dob (optionnal)'))
def rsa_link(self, request):
try:
data = json.loads(request.body)
@ -543,12 +543,14 @@ class Solis(BaseResource):
if not data.get('user_id') or not data.get('code'):
raise APIError('missing user_id/code credentials')
name_id, user_id, code = data['name_id'], data['user_id'], data['code']
self.rsa_token(user_id, code) # invalid credentials raise APIError here
information = self.rsa_get_information('individu', user_id, code)
dob = data.get('dob')
self.rsa_token(user_id, code, dob) # invalid credentials raise APIError here
information = self.rsa_get_information('individu', user_id, code, dob)
text = get_template(self.text_template_name_rsa).render(information).strip()
link, created = SolisRSALink.objects.update_or_create(resource=self, name_id=name_id,
user_id=user_id,
defaults={'code': code,
'dob': dob,
'text': text})
return {'data': {'user_id': user_id,
'text': text,
@ -619,7 +621,7 @@ class Solis(BaseResource):
except SolisRSALink.DoesNotExist:
raise APIError('unknown link')
response = self.rsa_get_information(information=information,
user_id=user_id, code=link.code,
user_id=user_id, code=link.code, dob=link.dob,
index=index, links=links)
if information == 'individu':
text = get_template(self.text_template_name_rsa).render(response).strip()
@ -651,4 +653,5 @@ class SolisRSALink(models.Model):
name_id = models.CharField(blank=False, max_length=256)
user_id = models.CharField(blank=False, max_length=64)
code = models.CharField(blank=False, max_length=64)
dob = models.CharField(blank=True, max_length=64, null=True)
text = models.CharField(blank=False, max_length=256)

View File

@ -761,10 +761,11 @@ def test_solis_rsa_link_infos_unlink(app, solis):
assert SolisRSALink.objects.first().user_id == '4273'
assert SolisRSALink.objects.first().code == 'foo'
assert SolisRSALink.objects.first().text == 'MME Prenom NOM'
assert SolisRSALink.objects.first().dob is None
# change code
# change code, add dob
resp = app.post_json(endpoint,
params={'name_id': NAMEID, 'user_id': '4273', 'code': 'bar'},
params={'name_id': NAMEID, 'user_id': '4273', 'code': 'bar', 'dob': '01/01/1950'},
status=200)
assert requests_post.call_count == 3
assert requests_get.call_count == 2
@ -777,13 +778,19 @@ def test_solis_rsa_link_infos_unlink(app, solis):
assert SolisRSALink.objects.first().user_id == '4273'
assert SolisRSALink.objects.first().code == 'bar'
assert SolisRSALink.objects.first().text == 'MME Prenom NOM'
assert SolisRSALink.objects.first().dob == '01/01/1950'
# second link
requests_post.reset_mock()
requests_get.reset_mock()
resp = app.post_json(endpoint,
params={'name_id': NAMEID, 'user_id': '4242', 'code': 'bar'},
params={'name_id': NAMEID, 'user_id': '4242', 'code': 'bar', 'dob': '10/10/1960'},
status=200)
assert requests_post.call_count == 4
assert requests_get.call_count == 3
assert requests_post.call_count == 1
assert requests_get.call_count == 1
assert requests_post.call_args[1]['json'] == {'codeConfidentiel': 'bar',
'dateNaissance': '10/10/1960',
'indexIndividu': '4242'}
assert resp.json['err'] == 0
assert resp.json['data']['user_id'] == '4242'
assert resp.json['data']['created']