WIP: API d’enregistrement par numéro de téléphone, permettre le préremplissage des champs de profil (#83227) #169
|
@ -308,6 +308,7 @@ class Register(BaseRpcView):
|
|||
code = utils_sms.send_registration_sms(
|
||||
phone,
|
||||
validated_data['ou'],
|
||||
**registration_data,
|
||||
)
|
||||
except utils_sms.SMSError as e:
|
||||
response = {
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 3.2.18 on 2023-11-08 10:23
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('authentic2', '0049_apiclient_allowed_user_attributes'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='smscode',
|
||||
name='extra_content',
|
||||
field=models.JSONField(blank=True, null=True, verbose_name='Extra content'),
|
||||
),
|
||||
]
|
|
@ -850,13 +850,15 @@ class SMSCode(models.Model):
|
|||
# fake codes to avoid disclosing account existence info on unjustified password reset attempts
|
||||
fake = models.BooleanField(default=False, verbose_name=_('Is a fake code'))
|
||||
|
||||
extra_content = JSONField(verbose_name=_('Extra content'), blank=True, null=True)
|
||||
|
||||
@classmethod
|
||||
def cleanup(cls, now=None):
|
||||
now = now or timezone.now()
|
||||
cls.objects.filter(expires__lte=now).delete()
|
||||
|
||||
@classmethod
|
||||
def create(cls, phone, user=None, kind=None, expires=None, fake=False, duration=None):
|
||||
def create(cls, phone, user=None, kind=None, expires=None, fake=False, duration=None, **kwargs):
|
||||
if not kind:
|
||||
kind = cls.KIND_REGISTRATION
|
||||
if not duration:
|
||||
|
|
|
@ -48,7 +48,7 @@ def create_sms_code():
|
|||
)
|
||||
|
||||
|
||||
def generate_code(phone_number, user=None, kind=None, fake=False):
|
||||
def generate_code(phone_number, user=None, kind=None, fake=False, **kwargs):
|
||||
from authentic2.models import SMSCode
|
||||
|
||||
return SMSCode.create(
|
||||
|
@ -56,6 +56,7 @@ def generate_code(phone_number, user=None, kind=None, fake=False):
|
|||
user=user,
|
||||
kind=kind or SMSCode.KIND_REGISTRATION,
|
||||
fake=fake or kind is SMSCode.KIND_PASSWORD_LOST and user is None,
|
||||
**kwargs,
|
||||
)
|
||||
|
||||
|
||||
|
@ -87,7 +88,7 @@ def send_sms(phone_number, ou, user=None, template_names=None, context=None, kin
|
|||
code = None
|
||||
if kind is not None:
|
||||
# SMS with a specific action requires generating a code
|
||||
code = generate_code(phone_number, user=user, kind=kind)
|
||||
code = generate_code(phone_number, user=user, kind=kind, **kwargs)
|
||||
if code.fake is True:
|
||||
return code
|
||||
context.update({'code': code})
|
||||
|
|
|
@ -1643,6 +1643,8 @@ class InputSMSCodeView(cbv.ValidateCSRFMixin, FormView):
|
|||
'phone': self.code.phone,
|
||||
'user': self.code.user.pk if self.code.user else None,
|
||||
}
|
||||
if self.code.extra_content is not None:
|
||||
content.update(extra_content)
|
||||
# create token to process final account activation and user-defined attributes
|
||||
token = models.Token.create(
|
||||
kind=self.code.CODE_TO_TOKEN_KINDS[self.code.kind],
|
||||
|
|
Loading…
Reference in New Issue