def filter_prefs(prefs, user): # replace stylesheet_override with other_theme if it doesn't exist if feature.is_enabled_for('stylesheets_everywhere', user): if not prefs["pref_default_theme_sr"]: if prefs.get("pref_other_theme", False): prefs["pref_default_theme_sr"] = prefs["pref_other_theme"] for pref_key in prefs.keys(): if pref_key not in user._preference_attrs: del prefs[pref_key] #temporary. eventually we'll change pref_clickgadget to an #integer preference prefs['pref_clickgadget'] = 5 if prefs['pref_clickgadget'] else 0 if user.pref_show_promote is None: prefs['pref_show_promote'] = None elif not prefs.get('pref_show_promote'): prefs['pref_show_promote'] = False if not prefs.get("pref_over_18") or not user.pref_over_18: prefs['pref_no_profanity'] = True if prefs.get("pref_no_profanity") or user.pref_no_profanity: prefs['pref_label_nsfw'] = True # don't update the hide_ads pref if they don't have gold if not user.gold: del prefs['pref_hide_ads'] del prefs['pref_show_gold_expiration'] if not (user.gold or user.is_moderator_somewhere): prefs['pref_highlight_new_comments'] = True # check stylesheet override if feature.is_enabled_for('stylesheets_everywhere', user): override_sr = prefs['pref_default_theme_sr'] if not override_sr: del prefs['pref_default_theme_sr'] if prefs['pref_enable_default_themes']: c.errors.add( c.errors.add(errors.SUBREDDIT_REQUIRED, field="stylesheet_override")) else: if override_sr.can_view(user): prefs['pref_default_theme_sr'] = override_sr.name else: # don't update if they can't view the chosen subreddit c.errors.add(errors.SUBREDDIT_NO_ACCESS, field='stylesheet_override') del prefs['pref_default_theme_sr']
def filter_prefs(prefs, user): # replace stylesheet_override with other_theme if it doesn't exist if feature.is_enabled_for('stylesheets_everywhere', user): if not prefs["pref_default_theme_sr"]: if prefs.get("pref_other_theme", False): prefs["pref_default_theme_sr"] = prefs["pref_other_theme"] for pref_key in prefs.keys(): if pref_key not in user._preference_attrs: del prefs[pref_key] #temporary. eventually we'll change pref_clickgadget to an #integer preference prefs['pref_clickgadget'] = 5 if prefs['pref_clickgadget'] else 0 if user.pref_show_promote is None: prefs['pref_show_promote'] = None elif not prefs.get('pref_show_promote'): prefs['pref_show_promote'] = False if not prefs.get("pref_over_18") or not user.pref_over_18: prefs['pref_no_profanity'] = True if prefs.get("pref_no_profanity") or user.pref_no_profanity: prefs['pref_label_nsfw'] = True # don't update the hide_ads pref if they don't have gold if not user.gold: del prefs['pref_hide_ads'] del prefs['pref_show_gold_expiration'] if not (user.gold or user.is_moderator_somewhere): prefs['pref_highlight_new_comments'] = True # check stylesheet override if feature.is_enabled_for('stylesheets_everywhere', user): override_sr = prefs['pref_default_theme_sr'] if not override_sr: del prefs['pref_default_theme_sr'] if prefs['pref_enable_default_themes']: c.errors.add(c.errors.add(errors.SUBREDDIT_REQUIRED, field="stylesheet_override")) else: if override_sr.can_view(user): prefs['pref_default_theme_sr'] = override_sr.name else: # don't update if they can't view the chosen subreddit c.errors.add(errors.SUBREDDIT_NO_ACCESS, field='stylesheet_override') del prefs['pref_default_theme_sr']
def message_notification_email(data): """Queues a system email for a new message notification.""" from r2.lib.pages import MessageNotificationEmail MAX_EMAILS_PER_DAY = 1000 MESSAGE_THROTTLE_KEY = 'message_notification_emails' # If our counter's expired, initialize it again. g.cache.add(MESSAGE_THROTTLE_KEY, 0, time=24 * 60 * 60) for datum in data.itervalues(): datum = json.loads(datum) user = Account._byID36(datum['to'], data=True) comment = Comment._by_fullname(datum['comment'], data=True) # In case a user has enabled the preference while it was enabled for # them, but we've since turned it off. We need to explicitly state the # user because we're not in the context of an HTTP request from them. if not feature.is_enabled_for('orangereds_as_emails', user): continue if g.cache.get(MESSAGE_THROTTLE_KEY) > MAX_EMAILS_PER_DAY: raise Exception( 'Message notification emails: safety limit exceeded!') mac = generate_notification_email_unsubscribe_token( datum['to'], user_email=user.email, user_password_hash=user.password) base = g.https_endpoint or g.origin unsubscribe_link = base + '/mail/unsubscribe/%s/%s' % (datum['to'], mac) templateData = { 'sender_username': datum.get('from', ''), 'comment': comment, 'permalink': datum['permalink'], 'unsubscribe_link': unsubscribe_link, } _system_email( user.email, MessageNotificationEmail(**templateData).render(style='email'), Email.Kind.MESSAGE_NOTIFICATION, from_address=g.notification_email) g.stats.simple_event('email.message_notification.queued') g.cache.incr(MESSAGE_THROTTLE_KEY)
def message_notification_email(data): """Queues a system email for a new message notification.""" from r2.lib.pages import MessageNotificationEmail MAX_EMAILS_PER_DAY = 1000 MESSAGE_THROTTLE_KEY = 'message_notification_emails' # If our counter's expired, initialize it again. g.cache.add(MESSAGE_THROTTLE_KEY, 0, time=24*60*60) for datum in data.itervalues(): datum = json.loads(datum) user = Account._byID36(datum['to'], data=True) comment = Comment._by_fullname(datum['comment'], data=True) # In case a user has enabled the preference while it was enabled for # them, but we've since turned it off. We need to explicitly state the # user because we're not in the context of an HTTP request from them. if not feature.is_enabled_for('orangereds_as_emails', user): continue if g.cache.get(MESSAGE_THROTTLE_KEY) > MAX_EMAILS_PER_DAY: raise Exception( 'Message notification emails: safety limit exceeded!') mac = generate_notification_email_unsubscribe_token( datum['to'], user_email=user.email, user_password_hash=user.password) base = g.https_endpoint or g.origin unsubscribe_link = base + '/mail/unsubscribe/%s/%s' % (datum['to'], mac) templateData = { 'sender_username': datum.get('from', ''), 'comment': comment, 'permalink': datum['permalink'], 'unsubscribe_link': unsubscribe_link, } _system_email(user.email, MessageNotificationEmail(**templateData).render(style='email'), Email.Kind.MESSAGE_NOTIFICATION, from_address=g.notification_email) g.stats.simple_event('email.message_notification.queued') g.cache.incr(MESSAGE_THROTTLE_KEY)
def https_forced(self): """Return whether this account may only be used via HTTPS.""" if feature.is_enabled_for("require_https", self): return True return self.pref_force_https