def fire_email_event(reminder, handler, recipients, verified_numbers, logged_event): current_event = reminder.current_event case = reminder.case template_params = get_message_template_params(case) email_usage = EmailUsage.get_or_create_usage_record(reminder.domain) is_trial = domain_is_on_trial(reminder.domain) uses_custom_content_handler, content_handler = get_custom_content_handler( handler, logged_event) if uses_custom_content_handler and not content_handler: return for recipient in recipients: _add_recipient_to_template_params(recipient, template_params) logged_subevent = logged_event.create_subevent(handler, reminder, recipient) try: lang = recipient.get_language_code() except Exception: lang = None if content_handler: subject, message = content_handler(reminder, handler, recipient) else: subject = current_event.subject.get( lang, current_event.subject[handler.default_lang]) message = current_event.message.get( lang, current_event.message[handler.default_lang]) try: subject = Message.render(subject, **template_params) message = Message.render(message, **template_params) except Exception: logged_subevent.error( MessagingEvent.ERROR_CANNOT_RENDER_MESSAGE) continue subject = subject or '(No Subject)' if message: try: email_address = recipient.get_email() except: email_address = None if email_address: if is_trial and EmailUsage.get_total_count( reminder.domain) >= TRIAL_MAX_EMAILS: logged_subevent.error( MessagingEvent.ERROR_TRIAL_EMAIL_LIMIT_REACHED) continue send_mail_async.delay(subject, message, settings.DEFAULT_FROM_EMAIL, [email_address]) email_usage.update_count() else: logged_subevent.error(MessagingEvent.ERROR_NO_EMAIL_ADDRESS) continue logged_subevent.completed()
def get_main(self, request, domain): restore_as, set_cookie = self.get_restore_as_user(request, domain) apps = self.get_web_apps_available_to_user(domain, restore_as) def _default_lang(): try: return apps[0]['langs'][0] except Exception: return 'en' # default language to user's preference, followed by # first app's default, followed by english language = request.couch_user.language or _default_lang() context = { "domain": domain, "language": language, "apps": apps, "domain_is_on_trial": domain_is_on_trial(domain), "maps_api_key": settings.GMAPS_API_KEY, "username": request.couch_user.username, "formplayer_url": settings.FORMPLAYER_URL, "single_app_mode": False, "home_url": reverse(self.urlname, args=[domain]), "environment": WEB_APPS_ENVIRONMENT, 'use_live_query': toggles.FORMPLAYER_USE_LIVEQUERY.enabled(domain), } return set_cookie( render(request, "cloudcare/formplayer_home.html", context))
def get_main(self, request, domain): restore_as, set_cookie = self.get_restore_as_user(request, domain) apps = self.get_web_apps_available_to_user(domain, restore_as) def _default_lang(): try: return apps[0]['langs'][0] except Exception: return 'en' # default language to user's preference, followed by # first app's default, followed by english language = request.couch_user.language or _default_lang() domain_obj = Domain.get_by_name(domain) context = { "domain": domain, "default_geocoder_location": domain_obj.default_geocoder_location, "language": language, "apps": apps, "domain_is_on_trial": domain_is_on_trial(domain), "mapbox_access_token": settings.MAPBOX_ACCESS_TOKEN, "username": request.couch_user.username, "formplayer_url": get_formplayer_url(for_js=True), "single_app_mode": False, "home_url": reverse(self.urlname, args=[domain]), "environment": WEB_APPS_ENVIRONMENT, "integrations": integration_contexts(domain), "has_geocoder_privs": has_geocoder_privs(domain), } return set_cookie( render(request, "cloudcare/formplayer_home.html", context))
def get_main(self, request, domain): restore_as, set_cookie = self.get_restore_as_user(request, domain) apps = self.get_web_apps_available_to_user(domain, restore_as) def _default_lang(): try: return apps[0]['langs'][0] except Exception: return 'en' # default language to user's preference, followed by # first app's default, followed by english language = request.couch_user.language or _default_lang() context = { "domain": domain, "language": language, "apps": apps, "domain_is_on_trial": domain_is_on_trial(domain), "maps_api_key": settings.GMAPS_API_KEY, "username": request.couch_user.username, "formplayer_url": settings.FORMPLAYER_URL, "single_app_mode": False, "home_url": reverse(self.urlname, args=[domain]), "environment": WEB_APPS_ENVIRONMENT, 'use_live_query': toggles.FORMPLAYER_USE_LIVEQUERY.enabled(domain), } return set_cookie( render(request, "cloudcare/formplayer_home.html", context) )
def send(self, recipient, logged_event, phone_entry=None): email_usage = EmailUsage.get_or_create_usage_record(logged_event.domain) is_trial = domain_is_on_trial(logged_event.domain) domain_obj = Domain.get_by_name(logged_event.domain) logged_subevent = logged_event.create_subevent_from_contact_and_content( recipient, self, case_id=self.case.case_id if self.case else None, ) subject = self.get_translation_from_message_dict( domain_obj, self.subject, recipient.get_language_code() ) message = self.get_translation_from_message_dict( domain_obj, self.message, recipient.get_language_code() ) try: subject, message = self.render_subject_and_message(subject, message, recipient) except: logged_subevent.error(MessagingEvent.ERROR_CANNOT_RENDER_MESSAGE) return subject = subject or '(No Subject)' if not message: logged_subevent.error(MessagingEvent.ERROR_NO_MESSAGE) return email_address = recipient.get_email() if not email_address: logged_subevent.error(MessagingEvent.ERROR_NO_EMAIL_ADDRESS) return if is_trial and EmailUsage.get_total_count(logged_event.domain) >= self.TRIAL_MAX_EMAILS: logged_subevent.error(MessagingEvent.ERROR_TRIAL_EMAIL_LIMIT_REACHED) return send_mail_async.delay(subject, message, settings.DEFAULT_FROM_EMAIL, [email_address], logged_subevent.id) email = Email( domain=logged_event.domain, date=datetime.utcnow(), couch_recipient_doc_type=logged_subevent.recipient_type, couch_recipient=logged_subevent.recipient_id, messaging_subevent_id=logged_subevent.pk, recipient_address=email_address, subject=subject, body=message, ) email.save() email_usage.update_count()
def passes_trial_check(msg): if msg.domain and domain_is_on_trial(msg.domain): with CriticalSection(['check-sms-sent-on-trial-for-%s' % msg.domain], timeout=60): key = 'sms-sent-on-trial-for-%s' % msg.domain expiry = 90 * 24 * 60 * 60 client = get_redis_client() value = client.get(key) or 0 if value >= MAX_TRIAL_SMS: msg.set_system_error(SMS.ERROR_TRIAL_SMS_EXCEEDED) return False client.set(key, value + 1, timeout=expiry) return True
def passes_trial_check(msg): if msg.domain and domain_is_on_trial(msg.domain): with CriticalSection(['check-sms-sent-on-trial-for-%s' % msg.domain], timeout=60): key = 'sms-sent-on-trial-for-%s' % msg.domain expiry = 90 * 24 * 60 * 60 client = get_redis_client() value = client.get(key) or 0 if value >= MAX_TRIAL_SMS: msg.set_system_error(SMS.ERROR_TRIAL_SMS_EXCEEDED) return False client.set(key, value + 1, timeout=expiry) return True
def fire_email_event(reminder, handler, recipients, verified_numbers, logged_event): current_event = reminder.current_event case = reminder.case template_params = get_message_template_params(case) email_usage = EmailUsage.get_or_create_usage_record(reminder.domain) is_trial = domain_is_on_trial(reminder.domain) uses_custom_content_handler, content_handler = get_custom_content_handler(handler, logged_event) if uses_custom_content_handler and not content_handler: return for recipient in recipients: logged_subevent = logged_event.create_subevent(handler, reminder, recipient) try: lang = recipient.get_language_code() except Exception: lang = None if content_handler: subject, message = content_handler(reminder, handler, recipient) else: subject = current_event.subject.get(lang, current_event.subject[handler.default_lang]) message = current_event.message.get(lang, current_event.message[handler.default_lang]) try: subject = Message.render(subject, **template_params) message = Message.render(message, **template_params) except Exception: logged_subevent.error(MessagingEvent.ERROR_CANNOT_RENDER_MESSAGE) continue subject = subject or '(No Subject)' if message: try: email_address = recipient.get_email() except: email_address = None if email_address: if is_trial and EmailUsage.get_total_count(reminder.domain) >= TRIAL_MAX_EMAILS: logged_subevent.error(MessagingEvent.ERROR_TRIAL_EMAIL_LIMIT_REACHED) continue send_mail_async.delay(subject, message, settings.DEFAULT_FROM_EMAIL, [email_address]) email_usage.update_count() else: logged_subevent.error(MessagingEvent.ERROR_NO_EMAIL_ADDRESS) continue logged_subevent.completed()
def send(self, recipient, logged_event, phone_entry=None): email_usage = EmailUsage.get_or_create_usage_record(logged_event.domain) is_trial = domain_is_on_trial(logged_event.domain) logged_subevent = logged_event.create_subevent_from_contact_and_content( recipient, self, case_id=self.case.case_id if self.case else None, ) subject = self.get_translation_from_message_dict( logged_event.domain, self.subject, recipient.get_language_code() ) message = self.get_translation_from_message_dict( logged_event.domain, self.message, recipient.get_language_code() ) try: subject, message = self.render_subject_and_message(subject, message, recipient) except: logged_subevent.error(MessagingEvent.ERROR_CANNOT_RENDER_MESSAGE) return subject = subject or '(No Subject)' if not message: logged_subevent.error(MessagingEvent.ERROR_NO_MESSAGE) return email_address = recipient.get_email() if not email_address: logged_subevent.error(MessagingEvent.ERROR_NO_EMAIL_ADDRESS) return if is_trial and EmailUsage.get_total_count(logged_event.domain) >= self.TRIAL_MAX_EMAILS: logged_subevent.error(MessagingEvent.ERROR_TRIAL_EMAIL_LIMIT_REACHED) return send_mail_async.delay(subject, message, settings.DEFAULT_FROM_EMAIL, [email_address]) email_usage.update_count() logged_subevent.completed()
def send(self, recipient, logged_event): email_usage = EmailUsage.get_or_create_usage_record(logged_event.domain) is_trial = domain_is_on_trial(logged_event.domain) logged_subevent = logged_event.create_subevent_from_contact_and_content( recipient, self, case_id=self.case.case_id if self.case else None, ) subject = self.get_translation_from_message_dict( logged_event.domain, self.subject, recipient.get_language_code() ) message = self.get_translation_from_message_dict( logged_event.domain, self.message, recipient.get_language_code() ) try: subject, message = self.render_subject_and_message(subject, message, recipient) except: logged_subevent.error(MessagingEvent.ERROR_CANNOT_RENDER_MESSAGE) return subject = subject or '(No Subject)' if not message: logged_subevent.error(MessagingEvent.ERROR_NO_MESSAGE) return email_address = recipient.get_email() if not email_address: logged_subevent.error(MessagingEvent.ERROR_NO_EMAIL_ADDRESS) return if is_trial and EmailUsage.get_total_count(logged_event.domain) >= self.TRIAL_MAX_EMAILS: logged_subevent.error(MessagingEvent.ERROR_TRIAL_EMAIL_LIMIT_REACHED) return send_mail_async.delay(subject, message, settings.DEFAULT_FROM_EMAIL, [email_address]) email_usage.update_count() logged_subevent.completed()
def confirm_domain(request, guid=''): with CriticalSection(['confirm_domain_' + guid]): error = None # Did we get a guid? if not guid: error = _('An account activation key was not provided. If you think this ' 'is an error, please contact the system administrator.') # Does guid exist in the system? else: req = RegistrationRequest.get_by_guid(guid) if not req: error = _('The account activation key "%s" provided is invalid. If you ' 'think this is an error, please contact the system ' 'administrator.') % guid if error is not None: context = { 'message_body': error, 'current_page': {'page_name': 'Account Not Activated'}, } return render(request, 'registration/confirmation_error.html', context) requested_domain = Domain.get_by_name(req.domain) view_name = "dashboard_default" view_args = [requested_domain.name] if not domain_has_apps(req.domain): if False and settings.IS_SAAS_ENVIRONMENT and domain_is_on_trial(req.domain): view_name = "app_from_template" view_args.append("appcues") else: view_name = "default_new_app" # Has guid already been confirmed? if requested_domain.is_active: assert(req.confirm_time is not None and req.confirm_ip is not None) messages.success(request, 'Your account %s has already been activated. ' 'No further validation is required.' % req.new_user_username) return HttpResponseRedirect(reverse(view_name, args=view_args)) # Set confirm time and IP; activate domain and new user who is in the req.confirm_time = datetime.utcnow() req.confirm_ip = get_ip(request) req.save() requested_domain.is_active = True requested_domain.save() requesting_user = WebUser.get_by_username(req.new_user_username) send_new_request_update_email(requesting_user, get_ip(request), requested_domain.name, is_confirming=True) messages.success(request, 'Your account has been successfully activated. Thank you for taking ' 'the time to confirm your email address: %s.' % (requesting_user.username)) track_workflow(requesting_user.email, "Confirmed new project") track_confirmed_account_on_hubspot.delay(requesting_user) request.session['CONFIRM'] = True if settings.IS_SAAS_ENVIRONMENT: # For AppCues v3, land new user in Web Apps view_name = get_cloudcare_urlname(requested_domain.name) return HttpResponseRedirect(reverse(view_name, args=view_args))
def confirm_domain(request, guid=''): with CriticalSection(['confirm_domain_' + guid]): error = None # Did we get a guid? if not guid: error = _('An account activation key was not provided. If you think this ' 'is an error, please contact the system administrator.') # Does guid exist in the system? else: req = RegistrationRequest.get_by_guid(guid) if not req: error = _('The account activation key "%s" provided is invalid. If you ' 'think this is an error, please contact the system ' 'administrator.') % guid if error is not None: context = { 'message_body': error, 'current_page': {'page_name': 'Account Not Activated'}, } return render(request, 'registration/confirmation_error.html', context) requested_domain = Domain.get_by_name(req.domain) view_name = "dashboard_default" view_args = [requested_domain.name] if not domain_has_apps(req.domain): if False and settings.IS_SAAS_ENVIRONMENT and domain_is_on_trial(req.domain): view_name = "app_from_template" view_args.append("appcues") else: view_name = "default_new_app" # Has guid already been confirmed? if requested_domain.is_active: assert(req.confirm_time is not None and req.confirm_ip is not None) messages.success(request, 'Your account %s has already been activated. ' 'No further validation is required.' % req.new_user_username) return HttpResponseRedirect(reverse(view_name, args=view_args)) # Set confirm time and IP; activate domain and new user who is in the req.confirm_time = datetime.utcnow() req.confirm_ip = get_ip(request) req.save() requested_domain.is_active = True requested_domain.save() requesting_user = WebUser.get_by_username(req.new_user_username) send_new_request_update_email(requesting_user, get_ip(request), requested_domain.name, is_confirming=True) messages.success(request, 'Your account has been successfully activated. Thank you for taking ' 'the time to confirm your email address: %s.' % (requesting_user.username)) track_workflow(requesting_user.email, "Confirmed new project") track_confirmed_account_on_hubspot_v2.delay(requesting_user) request.session['CONFIRM'] = True if settings.IS_SAAS_ENVIRONMENT: # For AppCues v3, land new user in Web Apps view_name = get_cloudcare_urlname(requested_domain.name) return HttpResponseRedirect(reverse(view_name, args=view_args))