def test_confirm(self): subscribe.register('*****@*****.**', {'foo': 'bar'}) subscriber = subscribe.get_subscriber('*****@*****.**') self.request.form.update({ 'confirmed_email': u'*****@*****.**', 'confirmed_code': subscriber['code'] }) form = SubscribeForm(self.portal, self.request) form() self.assertTrue(form.subscribed) mailhost = self.portal.MailHost self.assertEqual(len(mailhost.messages), 0) self.assertEquals(len([i for i in subscribe.all()]), 1) subscriber = subscribe.get_subscriber('*****@*****.**') self.assertTrue(subscriber['confirmed'])
def action_subscribe(self, action): data, errors = self.extractData() subscriber = subscribe.get_subscriber(data['email']) if errors: return if subscriber.get('phone_number') != data['phone_number']: subscriber['phone_number'] = data['phone_number'] if not self.send_text_message(subscriber): api.portal.show_message('Error sending code', request=self.request, type='error') else: api.portal.show_message('Phone number changed, code re-sent', request=self.request, type='info') if not data.get('phone_number_code'): ActionErrorOccurred( action, WidgetActionExecutionError('phone_number_code', Invalid('No code specified'))) if not errors: try: alsoProvides(self.request, IDisableCSRFProtection) subscribe.confirm_phone_number(data['email'], data['phone_number_code']) self.confirmed = True api.portal.show_message( 'Phone number successfully confirmed', request=self.request, type='info') except subscribe.InvalidEmailException: api.portal.show_message('Invalid Email', request=self.request, type='error') except subscribe.InvalidCodeException: api.portal.show_message('Invalid Code', request=self.request, type='error')
def action_resend(self, action): data, errors = self.extractData() subscriber = subscribe.get_subscriber(data['email']) if errors: return if subscriber.get('phone_number') != data['phone_number']: subscriber['phone_number'] = data['phone_number'] if not self.send_text_message(subscriber): api.portal.show_message('Error sending code', request=self.request, type='error') else: api.portal.show_message('Code sent', request=self.request, type='info')
def handle_export(self, action): data, errors = self.extractData() if not errors: lines = data['csv_upload'].split('\n') columns = lines[0].split(',') categoryindex = columns.index('categories') emailindex = columns.index('email') for line in lines[1:]: cols = line.split(',') if len(cols) <= 1: continue subscriber = { 'categories': map(safe_unicode, cols[categoryindex].strip('"').split(';')), 'email': cols[emailindex] } match = subscribe.get_subscriber(subscriber['email']) if match is not None: for cat in subscriber['categories']: if cat not in match['categories']: match['categories'].append(cat) else: for index, col in enumerate(cols): if (index == categoryindex): continue if col == '': subscriber[columns[index]] = None elif col == 'True' or col == 'False': subscriber[columns[index]] = col == 'True' else: try: subscriber[columns[index]] = float(col) except ValueError: subscriber[columns[index]] = col subscribe.register(subscriber['email'], subscriber) allcategories = api.portal.get_registry_record(reg_key) for cat in subscriber['categories']: if cat not in allcategories: allcategories.append(cat) api.portal.set_registry_record(reg_key, allcategories)
def action_subscribe(self, action): data, errors = self.extractData() if self.has_captcha and self.isAnon: if not verify_recaptcha(self.request): notify( ActionErrorOccurred( action, WidgetActionExecutionError('captcha', Invalid('Invalid Recaptcha')))) return subsciber = subscribe.get_subscriber(data.get('email')) if subsciber: notify( ActionErrorOccurred( action, WidgetActionExecutionError('email', Invalid('User already subscribed')))) return if not errors: item = subscribe.register(data['email'], data) self.send_mail(data['email'], item) self.sent = True api.portal.show_message( 'Verification email has been sent to your email', request=self.request, type='info') if self.has_texting and data.get('phone_number'): if not self.send_text_message(item): api.portal.show_message('Error sending code', request=self.request, type='error') else: api.portal.show_message('Code texted to your number to verify', request=self.request, type='info') self.request.response.redirect('%s/@@subscribe-phone?%s' % ( self.context.absolute_url(), urlencode({ 'form.widgets.email': item['email'], 'form.widgets.phone_number': item.get('phone_number', '') }) ))
def test_adds_code(self): subscribe.register('*****@*****.**', {'foo': 'bar'}) item = subscribe.get_subscriber('*****@*****.**') self.assertTrue('code' in item)