Exemplo n.º 1
0
 def save(self, commit=True, *args, **kwargs):
     user = super().save(commit=False)
     pass_generated = self.password_generator()
     try:
         CkanHandler.add_user(user, pass_generated, state='active')
     except Exception as e:
         raise ValidationError(
             "L'ajout de l'utilisateur sur CKAN a échoué: {}.".format(e))
     user.set_password(pass_generated)
     if commit:
         user.save()
     return user
Exemplo n.º 2
0
    def post(self, request):

        form = SignUpForm(request.POST, request.FILES)

        if not form.is_valid():
            return render(request, self.template, context={'form': form})

        try:
            with transaction.atomic():

                profile_data = {
                    **form.cleaned_profile_data,
                    **{
                        'user': User.objects.create_user(**form.cleaned_user_data)
                    }
                }

                if form.create_organisation:
                    kvp = {}
                    for k, v in form.cleaned_organisation_data.items():
                        if k.startswith('org_'):
                            k = k[4:]
                        kvp[k] = v
                    organisation = Organisation.objects.create(**kvp)
                else:
                    organisation = form.cleaned_profile_data['organisation']

                profile_data['organisation'] = organisation
                profile = Profile.objects.create(**profile_data)

                self.gdpr_aggrement(
                    profile,
                    form.cleaned_data.get('terms_and_conditions', False))

                CkanHandler.add_user(profile.user,
                                     form.cleaned_user_data['password'])
        except ValidationError as e:
            messages.error(request, e.message)
            return render(request, self.template, context={'form': form})
        except CkanBaseError as e:
            form.add_error('__all__', e.__str__())
            messages.error(request, e.__str__())
            return render(request, self.template, context={'form': form})

        # else:
        self.sign_up_process(request, profile)

        if form.create_organisation:
            creation_process(request, profile, organisation, mail=False)

        if form.is_member:
            member_subscribe_process(request,
                                     profile,
                                     organisation,
                                     mail=False)

        # Dans le cas ou seul le role de contributeur est demandé
        if form.is_contributor and not form.is_referent:
            contributor_subscribe_process(request,
                                          profile,
                                          organisation,
                                          mail=False)

        # role de référent requis donc role de contributeur requis
        if form.is_referent:
            referent_subscribe_process(request,
                                       profile,
                                       organisation,
                                       mail=False)

        message = ('Votre compte a bien été créé. Vous recevrez un e-mail '
                   "de confirmation d'ici quelques minutes. Pour activer "
                   'votre compte, cliquez sur le lien qui vous sera indiqué '
                   "dans les 48h après réception de l'e-mail.")

        return render(request,
                      'idgo_admin/message.html',
                      context={'message': message},
                      status=200)
Exemplo n.º 3
0
def handle_pust_request(request, username=None):

    user = None
    if username:
        user = get_object_or_404(User, username=username)

    query_data = getattr(request, request.method)  # QueryDict

    # `first_name` est obligatoire
    first_name = query_data.pop('first_name', user and [user.first_name])
    if first_name:
        query_data.__setitem__('first_name', first_name[-1])

    # `last_name` est obligatoire
    last_name = query_data.pop('last_name', user and [user.last_name])
    if last_name:
        query_data.__setitem__('last_name', last_name[-1])

    # `email` est obligatoire
    email = query_data.pop('email', user and [user.email])
    if email:
        query_data.__setitem__('email', email[-1])

    # organisation
    organisation_slug = query_data.pop('organisation', None)
    if organisation_slug:
        try:
            organisation = Organisation.objects.get(slug=organisation_slug[-1])
        except Organisation.DoesNotExist as e:
            raise GenericException(details=e.__str__())
    elif user and user.profile:
        organisation = user.profile.organisation
    else:
        organisation = None
    if organisation:
        query_data.__setitem__('organisation', organisation.pk)

    password = query_data.pop('password', None)
    if password:
        query_data.__setitem__('password1', password[-1])
        query_data.__setitem__('password2', password[-1])

    if user:
        form = UpdateAccountForm(query_data, instance=user)
    else:
        form = SignUpForm(query_data, unlock_terms=True)
    if not form.is_valid():
        raise GenericException(details=form._errors)
    try:
        with transaction.atomic():
            if user:
                phone = form.cleaned_data.pop('phone', None)
                for k, v in form.cleaned_data.items():
                    if k == 'password':
                        # user.set_password(v)
                        pass
                    else:
                        setattr(user, k, v)
                user.save()
                if phone:
                    user.profile.phone = phone
                    user.profile.save
                CkanHandler.update_user(user)
            else:
                user = User.objects.create_user(**form.cleaned_user_data)
                profile_data = {**form.cleaned_profile_data, **{'user': user, 'is_active': True}}
                Profile.objects.create(**profile_data)
                CkanHandler.add_user(user, form.cleaned_user_data['password'], state='active')
    except (ValidationError, CkanBaseError) as e:
        raise GenericException(details=e.__str__())

    if organisation:
        user.profile.membership = True
        user.profile.save(update_fields=['membership'])

    # contribute
    contribute_for = None
    contribute_for_slugs = query_data.pop('contribute', [])
    if contribute_for_slugs:
        try:
            contribute_for = Organisation.objects.filter(slug__in=contribute_for_slugs)
        except Organisation.DoesNotExist as e:
            raise GenericException(details=e.__str__())

    # referent
    referent_for = None
    referent_for_slugs = query_data.pop('referent', None)
    if referent_for_slugs:
        try:
            referent_for = Organisation.objects.filter(slug__in=referent_for_slugs)
        except Organisation.DoesNotExist as e:
            raise GenericException(details=e.__str__())

    if contribute_for:
        for organisation in contribute_for:
            try:
                LiaisonsContributeurs.objects.get_or_create(
                    profile=user.profile, organisation=organisation,
                    defaults={'validated_on': timezone.now()}
                )
            except IntegrityError:
                pass
            else:
                AccountActions.objects.get_or_create(
                    action='confirm_contribution', organisation=organisation,
                    profile=user.profile, defaults={'closed': timezone.now()}
                )

    if referent_for:
        for organisation in referent_for:
            try:
                LiaisonsReferents.objects.get_or_create(
                    profile=user.profile, organisation=organisation,
                    defaults={'validated_on': timezone.now()})
            except IntegrityError:
                pass
            else:
                AccountActions.objects.get_or_create(
                    action='confirm_referent', organisation=organisation,
                    profile=user.profile, defaults={'closed': timezone.now()}
                )

    return user
Exemplo n.º 4
0
def handle_pust_request(request, username=None):

    user = None
    if username:
        user = get_object_or_404(User, username=username)

    data = getattr(request, request.method).dict()

    organisation = data.get('organisation')
    if organisation:
        try:
            organisation = Organisation.objects.get(slug=organisation).pk
        except Organisation.DoesNotExist:
            details = {'organisation': ["L'organisation n'existe pas."]}
            raise GenericException(details=details)

    data_form = {
        'username': data.get('username'),
        'first_name': data.get('first_name'),
        'last_name': data.get('last_name'),
        'email': data.get('email'),
        'phone': data.get('phone'),
        'organisation': organisation,
        'password1': data.get('password'),
        'password2': data.get('password'),
    }

    if username:
        form = UpdateAccountForm(data_form, instance=user)
    else:
        form = SignUpForm(data_form, unlock_terms=True)
    if not form.is_valid():
        raise GenericException(details=form._errors)
    try:
        with transaction.atomic():
            if username:
                phone = form.cleaned_data.pop('phone', None)
                for k, v in form.cleaned_data.items():
                    setattr(user, k, v)
                user.save()
                if phone:
                    user.profile.phone = phone
                    user.profile.save
                CkanHandler.update_user(user)
            else:
                user = User.objects.create_user(**form.cleaned_user_data)
                profile_data = {
                    **form.cleaned_profile_data,
                    **{
                        'user': user,
                        'is_active': True
                    }
                }
                Profile.objects.create(**profile_data)
                CkanHandler.add_user(user,
                                     form.cleaned_user_data['password'],
                                     state='active')
    except (ValidationError, CkanBaseError) as e:
        raise GenericException(details=e.__str__())

    return user