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
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)
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
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