def POST_authorize(self, authorize, client, redirect_uri, scope, state, duration, response_type): """Endpoint for OAuth2 authorization.""" self._check_employee_grants(client, scope) self._check_redirect_uri(client, redirect_uri) self._check_response_type_and_scope(response_type, scope) self._check_client_type_and_duration(response_type, client, duration) if c.errors: return self._error_response(state, redirect_uri, as_fragment=(response_type == "token")) if response_type == "code": code = OAuth2AuthorizationCode._new(client._id, redirect_uri, c.user._id36, scope, duration == "permanent") resp = {"code": code._id, "state": state} final_redirect = _update_redirect_uri(redirect_uri, resp) g.stats.simple_event('oauth2.POST_authorize.authorization_code_create') elif response_type == "token": token = OAuth2AccessToken._new(client._id, c.user._id36, scope) token_data = OAuth2AccessController._make_token_dict(token) token_data["state"] = state final_redirect = _update_redirect_uri(redirect_uri, token_data, as_fragment=True) g.stats.simple_event('oauth2.POST_authorize.access_token_create') # If this is the first time the user is logging in with an official # mobile app, gild them if (g.live_config.get('mobile_gild_first_login') and not c.user.has_used_mobile_app and client._id in g.mobile_auth_gild_clients): buyer = Account.system_user() admintools.adjust_gold_expiration( c.user, days=g.mobile_auth_gild_time) create_gift_gold( buyer._id, c.user._id, g.mobile_auth_gild_time, datetime.now(g.tz), signed=True, note='first_mobile_auth') subject = 'Let there be gold! Reddit just sent you Reddit gold!' message = ( "Thank you for using the Reddit mobile app! As a thank you " "for logging in during launch week, you've been gifted %s of " "Reddit Gold.\n\n" "Reddit Gold is Reddit's premium membership program, which " "grants you: \n" "An ads-free experience in Reddit's mobile apps, and\n" "Extra site features on desktop\n\n" "Discuss and get help on the features and perks at " "r/goldbenefits." ) % g.mobile_auth_gild_message message += '\n\n' + strings.gold_benefits_msg send_system_message(c.user, subject, message, add_to_sent=False) c.user.has_used_mobile_app = True c.user._commit() return self.redirect(final_redirect, code=302)
def send_gift(buyer, recipient, months, days, signed, giftmessage, thing_fullname): admintools.engolden(recipient, days) if thing_fullname: thing = Thing._by_fullname(thing_fullname, data=True) thing._gild(buyer) else: thing = None if signed: sender = buyer.name md_sender = "[%s](/user/%s)" % (sender, sender) else: sender = _("An anonymous redditor") md_sender = _("An anonymous redditor") create_gift_gold(buyer._id, recipient._id, days, c.start_time, signed) if months == 1: amount = "a month" else: amount = "%d months" % months if not thing: subject = _( 'Let there be gold! %s just sent you reddit gold!') % sender message = strings.youve_got_gold % dict(sender=md_sender, amount=amount) if giftmessage and giftmessage.strip(): message += "\n\n" + strings.giftgold_note + giftmessage + '\n\n----' else: url = thing.make_permalink_slow() if isinstance(thing, Comment): subject = _('Your comment has been gilded!') message = strings.youve_been_gilded_comment % {'url': url} else: subject = _('Your submission has been gilded!') message = strings.youve_been_gilded_link % {'url': url} message += '\n\n' + strings.gold_benefits_msg if g.lounge_reddit: message += '\n* ' + strings.lounge_msg message = append_random_bottlecap_phrase(message) try: send_system_message(recipient, subject, message, distinguished='gold-auto') except MessageError: g.log.error('send_gift: could not send system message') g.log.info("%s gifted %s to %s" % (buyer.name, amount, recipient.name)) return thing
def send_gift(buyer, recipient, months, days, signed, giftmessage, thing_fullname): admintools.engolden(recipient, days) if thing_fullname: thing = Thing._by_fullname(thing_fullname, data=True) thing._gild(buyer) else: thing = None if signed: sender = buyer.name md_sender = "[%s](/user/%s)" % (sender, sender) else: sender = _("An anonymous redditor") md_sender = _("An anonymous redditor") create_gift_gold(buyer._id, recipient._id, days, c.start_time, signed) if months == 1: amount = "a month" else: amount = "%d months" % months if not thing: subject = _( 'Let there be gold! %s just sent you reddit gold!') % sender message = strings.youve_got_gold % dict( sender=md_sender, amount=amount) if giftmessage and giftmessage.strip(): message += "\n\n" + strings.giftgold_note + giftmessage + '\n\n----' else: url = thing.make_permalink_slow() if isinstance(thing, Comment): subject = _('Your comment has been gilded!') message = strings.youve_been_gilded_comment % {'url': url} else: subject = _('Your submission has been gilded!') message = strings.youve_been_gilded_link % {'url': url} message += '\n\n' + strings.gold_benefits_msg if g.lounge_reddit: message += '\n* ' + strings.lounge_msg message = append_random_bottlecap_phrase(message) try: send_system_message( recipient, subject, message, distinguished='gold-auto') except MessageError: g.log.error('send_gift: could not send system message') g.log.info("%s gifted %s to %s" % (buyer.name, amount, recipient.name)) return thing
def POST_authorize(self, authorize, client, redirect_uri, scope, state, duration, response_type): """Endpoint for OAuth2 authorization.""" self._check_employee_grants(client, scope) if response_type == "token" and client.is_confidential(): # Prevent "confidential" clients from distributing tokens # in a non-confidential manner c.errors.add((errors.OAUTH2_INVALID_CLIENT, "client_id")) if response_type == "token" and duration != "temporary": # implicit grant -> No refresh tokens allowed c.errors.add((errors.INVALID_OPTION, "duration")) self._check_redirect_uri(client, redirect_uri) if c.errors: return self._error_response(state, redirect_uri, as_fragment=(response_type == "token")) if response_type == "code": code = OAuth2AuthorizationCode._new(client._id, redirect_uri, c.user._id36, scope, duration == "permanent") resp = {"code": code._id, "state": state} final_redirect = _update_redirect_uri(redirect_uri, resp) elif response_type == "token": token = OAuth2AccessToken._new(client._id, c.user._id36, scope) token_data = OAuth2AccessController._make_token_dict(token) token_data["state"] = state final_redirect = _update_redirect_uri(redirect_uri, token_data, as_fragment=True) # If this is the first time the user is logging in with an official # mobile app, gild them if (g.live_config.get('mobile_gild_first_login') and not c.user.has_used_mobile_app and client._id in g.mobile_auth_gild_clients): buyer = Account.system_user() admintools.adjust_gold_expiration( c.user, days=g.mobile_auth_gild_time) create_gift_gold( buyer._id, c.user._id, g.mobile_auth_gild_time, datetime.now(g.tz), signed=True, note='first_mobile_auth') subject = 'Let there be gold! %s just sent you reddit gold!' % ( buyer.name) message = "Thank you for using the reddit mobile app! For your "\ "participation, you've been gifted %s of reddit gold." % ( g.mobile_auth_gild_message) message += '\n\n' + strings.gold_benefits_msg send_system_message(c.user, subject, message, add_to_sent=False) c.user.has_used_mobile_app = True c.user._commit() return self.redirect(final_redirect, code=302)
def send_gift(buyer, recipient, months, days, signed, giftmessage, comment_id): admintools.engolden(recipient, days) if comment_id: comment = Thing._by_fullname(comment_id, data=True) comment._gild(buyer) else: comment = None if signed: sender = buyer.name md_sender = "[%s](/user/%s)" % (sender, sender) else: sender = _("An anonymous redditor") md_sender = _("An anonymous redditor") create_gift_gold(buyer._id, recipient._id, days, c.start_time, signed) if months == 1: amount = "a month" else: amount = "%d months" % months if not comment: subject = _( 'Let there be gold! %s just sent you reddit gold!') % sender message = strings.youve_got_gold % dict(sender=md_sender, amount=amount) if giftmessage and giftmessage.strip(): message += "\n\n" + strings.giftgold_note + giftmessage + '\n\n----' else: subject = _('Your comment has been gilded.') message = strings.youve_got_comment_gold % dict( url=comment.make_permalink_slow(), ) message += '\n\n' + strings.gold_benefits_msg message += '\n\n' + strings.lounge_msg try: send_system_message(recipient, subject, message) except MessageError: g.log.error('send_gift: could not send system message') g.log.info("%s gifted %s to %s" % (buyer.name, amount, recipient.name)) return comment
def send_gift(buyer, recipient, months, days, signed, giftmessage, comment_id): admintools.engolden(recipient, days) if comment_id: comment = Thing._by_fullname(comment_id, data=True) comment._gild(buyer) else: comment = None if signed: sender = buyer.name md_sender = "[%s](/user/%s)" % (sender, sender) else: sender = _("An anonymous redditor") md_sender = _("An anonymous redditor") create_gift_gold (buyer._id, recipient._id, days, c.start_time, signed) if months == 1: amount = "a month" else: amount = "%d months" % months if not comment: subject = _('Let there be gold! %s just sent you reddit gold!') % sender message = strings.youve_got_gold % dict(sender=md_sender, amount=amount) if giftmessage and giftmessage.strip(): message += "\n\n" + strings.giftgold_note + giftmessage + '\n\n----' else: subject = _('Your comment has been gilded.') message = strings.youve_got_comment_gold % dict( url=comment.make_permalink_slow(), ) message += '\n\n' + strings.gold_benefits_msg message += '\n\n' + strings.lounge_msg try: send_system_message(recipient, subject, message) except MessageError: g.log.error('send_gift: could not send system message') g.log.info("%s gifted %s to %s" % (buyer.name, amount, recipient.name)) return comment
def send_gift(buyer, recipient, months, days, signed, giftmessage, comment_id): admintools.engolden(recipient, days) if comment_id: comment = Thing._by_fullname(comment_id, data=True) comment._gild(buyer) else: comment = None if signed: sender = buyer.name md_sender = "[%s](/user/%s)" % (sender, sender) else: sender = "someone" md_sender = "An anonymous lightnet user" create_gift_gold(buyer._id, recipient._id, days, c.start_time, signed) if months == 1: amount = "a month" else: amount = "%d months" % months if not comment: message = strings.youve_got_gold % dict(sender=md_sender, amount=amount) if giftmessage and giftmessage.strip(): message += "\n\n" + strings.giftgold_note + giftmessage + "\n\n----" else: message = strings.youve_got_comment_gold % dict(url=comment.make_permalink_slow()) message += "\n\n" + strings.gold_benefits_msg message += "\n\n" + strings.lounge_msg % {"link": "/space/" + g.lounge_reddit} subject = sender + " just sent you reddit gold!" try: send_system_message(recipient, subject, message) except MessageError: g.log.error("send_gift: could not send system message") g.log.info("%s gifted %s to %s" % (buyer.name, amount, recipient.name)) return comment
def send_gift(buyer, recipient, months, days, signed, giftmessage, comment_id): admintools.engolden(recipient, days) if comment_id: comment = Thing._by_fullname(comment_id, data=True) comment._gild(buyer) else: comment = None if signed: sender = buyer.name md_sender = "[%s](/user/%s)" % (sender, sender) else: sender = "someone" md_sender = "An anonymous redditor" create_gift_gold (buyer._id, recipient._id, days, c.start_time, signed) if months == 1: amount = "a month" else: amount = "%d months" % months if not comment: message = strings.youve_got_gold % dict(sender=md_sender, amount=amount) if giftmessage and giftmessage.strip(): message += "\n\n" + strings.giftgold_note + giftmessage else: message = strings.youve_got_comment_gold % dict( url=comment.make_permalink_slow(), ) subject = sender + " just sent you reddit gold!" send_system_message(recipient, subject, message) g.log.info("%s gifted %s to %s" % (buyer.name, amount, recipient.name)) return comment
def POST_authorize(self, authorize, client, redirect_uri, scope, state, duration, response_type): """Endpoint for OAuth2 authorization.""" self._check_employee_grants(client, scope) self._check_redirect_uri(client, redirect_uri) self._check_response_type_and_scope(response_type, scope) self._check_client_type_and_duration(response_type, client, duration) if c.errors: return self._error_response(state, redirect_uri, as_fragment=(response_type == "token")) if response_type == "code": code = OAuth2AuthorizationCode._new(client._id, redirect_uri, c.user._id36, scope, duration == "permanent") resp = {"code": code._id, "state": state} final_redirect = _update_redirect_uri(redirect_uri, resp) g.stats.simple_event('oauth2.POST_authorize.authorization_code_create') elif response_type == "token": device_id = get_device_id(client) token = OAuth2AccessToken._new( client_id=client._id, user_id=c.user._id36, scope=scope, device_id=device_id, ) resp = OAuth2AccessController._make_new_token_response(token) resp["state"] = state final_redirect = _update_redirect_uri(redirect_uri, resp, as_fragment=True) g.stats.simple_event('oauth2.POST_authorize.access_token_create') # If this is the first time the user is logging in with an official # mobile app, gild them if (g.live_config.get('mobile_gild_first_login') and not c.user.has_used_mobile_app and client._id in g.mobile_auth_gild_clients): buyer = Account.system_user() admintools.adjust_gold_expiration( c.user, days=g.mobile_auth_gild_time) create_gift_gold( buyer._id, c.user._id, g.mobile_auth_gild_time, datetime.now(g.tz), signed=True, note='first_mobile_auth') subject = 'Let there be gold! Reddit just sent you Reddit gold!' message = ( "Thank you for using the Reddit mobile app! As a thank you " "for logging in during launch week, you've been gifted %s of " "Reddit Gold.\n\n" "Reddit Gold is Reddit's premium membership program, which " "grants you: \n" "An ads-free experience in Reddit's mobile apps, and\n" "Extra site features on desktop\n\n" "Discuss and get help on the features and perks at " "r/goldbenefits." ) % g.mobile_auth_gild_message message += '\n\n' + strings.gold_benefits_msg send_system_message(c.user, subject, message, add_to_sent=False) c.user.has_used_mobile_app = True c.user._commit() return self.redirect(final_redirect, code=302)