def destroy(request): schema = AccountDestroySchema() button1 = Button('submit', _('Yes, I am sure. Destroy my account')) button1.css_class = 'btn-danger' button2 = Button('cancel', _('Cancel')) button2.css_class = 'btn-default' form = Form(schema, buttons=(button1, button2)) user = request.user can_destroy = len(user.applications) == 0 context = { 'passwords': len(user.passwords), 'can_destroy': can_destroy, } if 'submit' in request.POST: if not can_destroy: request.session.flash( _('You must remove your applications before destroying your account' ), 'error', ) return HTTPFound( location=request.route_path('oauth2_developer_applications')) controls = request.POST.items() try: appstruct = form.validate(controls) except ValidationFailure as e: context['form'] = e.render() return context reason = appstruct['reason'] notify_admins_of_account_removal(request, user, reason) Session.delete(user) request.session.flash( _('Your account has been removed. Have a nice day!'), 'success', ) return logout(request) elif 'cancel' in request.POST: request.session.flash( _('Thanks for reconsidering removing your account!'), 'info', ) return HTTPFound(location=request.route_path('user_information')) context['form'] = form.render() return context
def destroy(request): schema = AccountDestroySchema() button1 = Button('submit', _('Yes, I am sure. Destroy my account')) button1.css_class = 'btn-danger' button2 = Button('cancel', _('Cancel')) button2.css_class = 'btn-default' form = Form(schema, buttons=(button1, button2)) user = request.user can_destroy = len(user.applications) == 0 context = { 'passwords': len(user.passwords), 'can_destroy': can_destroy, } if 'submit' in request.POST: if not can_destroy: request.session.flash( _('You must remove your applications before destroying your account'), 'error', ) return HTTPFound(location=request.route_path('oauth2_developer_applications')) controls = request.POST.items() try: appstruct = form.validate(controls) except ValidationFailure as e: context['form'] = e.render() return context reason = appstruct['reason'] notify_admins_of_account_removal(request, user, reason) Session.delete(user) request.session.flash( _('Your account has been removed. Have a nice day!'), 'success', ) return logout(request) elif 'cancel' in request.POST: request.session.flash( _('Thanks for reconsidering removing your account!'), 'info', ) return HTTPFound(location=request.route_path('user_information')) context['form'] = form.render() return context
def destroy(request): schema = AccountDestroySchema() button1 = Button('submit', _('Yes, I am sure. Destroy my account')) button1.css_class = 'btn-danger' button2 = Button('cancel', _('Cancel')) button2.css_class = '' form = Form(schema, buttons=(button1, button2)) passwords_manager = PasswordsManager(request.db) context = { 'passwords': passwords_manager.retrieve(request.user).count(), } if 'submit' in request.POST: controls = request.POST.items() try: appstruct = form.validate(controls) except ValidationFailure as e: context['form'] = e.render() return context reason = appstruct['reason'] admin_emails = request.registry.settings['admin_emails'] if admin_emails: notify_admins_of_account_removal(request, request.user, reason, admin_emails) passwords_manager.delete(request.user) # TODO: remove user's applications delete_user(request.db, request.user) request.session.flash( _('Your account has been removed. Have a nice day!'), 'success', ) return logout(request) elif 'cancel' in request.POST: request.session.flash( _('Thanks for reconsidering removing your account!'), 'info', ) return HTTPFound(location=request.route_path('user_information')) context['form'] = form.render() return context
def test_notify_admins_of_account_removal(self): request = DummyRequest() mailer = get_mailer(request) self.assertEqual(len(mailer.outbox), 0) user = {'first_name': 'John', 'last_name': 'Doe', 'email': '*****@*****.**'} reason = 'I do not trust free services' notify_admins_of_account_removal(request, user, reason) self.assertEqual(len(mailer.outbox), 1) self.assertEqual(mailer.outbox[0].subject, 'A user has destroyed his Yith Library account') self.assertEqual(mailer.outbox[0].recipients, self.admin_emails) self.assertTrue('John Doe <*****@*****.**' in mailer.outbox[0].body) self.assertTrue('I do not trust free services' in mailer.outbox[0].body)