def _get_or_create_account(self, full_name, email): try: account = self._find_account_for(full_name, email) except NotFound: retry = 2 # First retry will by name2 name = self._username_from_name(full_name) username = name while True: # Create a new account try: account = register(username, generate_password(), email) account.ob_account_name = full_name account._commit() except AccountExists: # This username is taken, generate another, but first limit the retries if retry > MAX_RETRIES: raise StandardError("Unable to create account for '%s' after %d attempts" % (full_name, retry - 1)) else: # update cache with the successful account self.username_mapping[(full_name, email)] = account break username = "******" % (name, retry) retry += 1 return account
def _get_or_create_account(self, full_name, email): try: account = self._find_account_for(full_name, email) except NotFound: retry = 2 # First retry will by name2 name = self._username_from_name(full_name) username = name while True: # Create a new account try: account = register(username, generate_password(), email) account.ob_account_name = full_name account._commit() except AccountExists: # This username is taken, generate another, but first limit the retries if retry > MAX_RETRIES: raise StandardError( "Unable to create account for '%s' after %d attempts" % (full_name, retry - 1)) else: # update cache with the successful account self.username_mapping[(full_name, email)] = account break username = "******" % (name, retry) retry += 1 return account
def create_account(full_name): name = full_name.replace(' ', '_') retry = 2 # First retry will by name2 username = name while True: # Create a new account try: if dryrun: try: account = Account._by_name(username) if account: raise AccountExists except NotFound: account = FakeAccount() account.name = username else: account = register(username, generate_password(), None) account.ob_account_name = full_name account._commit() except AccountExists: # This username is taken, generate another, but first limit the retries if retry > MAX_RETRIES: raise StandardError("Unable to create account for '%s' after %d attempts" % (full_name, retry - 1)) else: return account username = "******" % (name, retry) retry += 1
def GET_refresh_token(self, *args, **kwargs): # pylint: disable=unused-argument """Generate a refresh token given a username""" username = request.GET['username'] try: account = Account._by_name(username) except NotFound: account = register(username, uuid4().hex, '127.0.0.1') # subscribe the user now because reddit does not have consistency across # its APIs on what it considers the user to be subscribed to if not account.has_subscribed: Subreddit.subscribe_defaults(account) account.has_subscribed = True account._commit() client_id = g.secrets['generate_refresh_token_client_id'] client = OAuth2Client.get_token(client_id) scope = OAuth2Scope(OAuth2Scope.FULL_ACCESS) user_id = account._id36 refresh_token = OAuth2RefreshToken._new( client_id=client._id, user_id=user_id, scope=scope, ) access_token = OAuth2AccessToken._new( client_id=client._id, user_id=user_id, scope=scope, device_id='device', ) return json.dumps(OAuth2AccessController._make_new_token_response(access_token, refresh_token))
def populate(start=0, num_users=16384): from r2.models.account import Account, register, AccountExists from reddit_robin.matchmaker import add_to_waitinglist for i in xrange(start, num_users): name = "test%s" % i try: a = register(name, "123456", registration_ip="127.0.0.1") except AccountExists: a = Account._by_name(name) print "added %s" % a add_to_waitinglist(a)
# Initialise a newly-created db with required tables, users, # categories and tags. from r2.lib.db.thing import NotFound from r2.models.account import Account, AccountExists, register from r2.models.link import Tag, TagExists from r2.models.subreddit import Subreddit try: register("admin", "swordfish", "", False) except AccountExists: pass admin = Account._by_name("admin") admin.email_validated = True admin._commit() try: Subreddit._by_name("lesswrong") except NotFound: Subreddit._create_and_subscribe( "lesswrong", admin, {"title": "Less Wrong", "type": "restricted", "default_listing": "blessed"} ) try: Subreddit._by_name("discussion") except NotFound: s = Subreddit._create_and_subscribe( "discussion", admin, {"title": "Less Wrong Discussion", "type": "public", "default_listing": "new"} ) s.header = "/static/logo-discussion.png" s.stylesheet = "/static/discussion.css"
def handle_register( controller, form, responder, name, email, password, rem=None, newsletter_subscribe=False, sponsor=False, signature=None, **kwargs ): def _event(error): g.events.login_event( 'register_attempt', error_msg=error, user_name=request.urlvars.get('url_user'), email=request.POST.get('email'), remember_me=rem, newsletter=newsletter_subscribe, signature=signature, request=request, context=c) if signature and not signature.is_valid(): _event(error="SIGNATURE") abort(403) if responder.has_errors('user', errors.USERNAME_TOO_SHORT): _event(error='USERNAME_TOO_SHORT') elif responder.has_errors('user', errors.USERNAME_INVALID_CHARACTERS): _event(error='USERNAME_INVALID_CHARACTERS') elif responder.has_errors('user', errors.USERNAME_TAKEN_DEL): _event(error='USERNAME_TAKEN_DEL') elif responder.has_errors('user', errors.USERNAME_TAKEN): _event(error='USERNAME_TAKEN') elif responder.has_errors('email', errors.BAD_EMAIL): _event(error='BAD_EMAIL') elif responder.has_errors('passwd', errors.SHORT_PASSWORD): _event(error='SHORT_PASSWORD') elif responder.has_errors('passwd', errors.BAD_PASSWORD): # BAD_PASSWORD is set when SHORT_PASSWORD is set _event(error='BAD_PASSWORD') elif responder.has_errors('passwd2', errors.BAD_PASSWORD_MATCH): _event(error='BAD_PASSWORD_MATCH') elif responder.has_errors('ratelimit', errors.RATELIMIT): _event(error='RATELIMIT') elif (not g.disable_captcha and responder.has_errors('captcha', errors.BAD_CAPTCHA)): _event(error='BAD_CAPTCHA') elif newsletter_subscribe and not email: c.errors.add(errors.NEWSLETTER_NO_EMAIL, field="email") form.has_errors("email", errors.NEWSLETTER_NO_EMAIL) _event(error='NEWSLETTER_NO_EMAIL') elif sponsor and not email: c.errors.add(errors.SPONSOR_NO_EMAIL, field="email") form.has_errors("email", errors.SPONSOR_NO_EMAIL) _event(error='SPONSOR_NO_EMAIL') else: try: user = register(name, password, request.ip) except AccountExists: c.errors.add(errors.USERNAME_TAKEN, field="user") form.has_errors("user", errors.USERNAME_TAKEN) _event(error='USERNAME_TAKEN') return VRatelimit.ratelimit(rate_ip=True, prefix="rate_register_") # anything else we know (email, languages)? if email: user.set_email(email) emailer.verify_email(user) user.pref_lang = c.lang user._commit() amqp.add_item('new_account', user._fullname) hooks.get_hook("account.registered").call(user=user) reject = hooks.get_hook("account.spotcheck").call(account=user) if any(reject): _event(error='ACCOUNT_SPOTCHECK') return if newsletter_subscribe and email: try: newsletter.add_subscriber(email, source="register") except newsletter.NewsletterError as e: g.log.warning("Failed to subscribe: %r" % e) controller._login(responder, user, rem) _event(error=None)
# Initialise a newly-created db with required tables, users, # categories and tags. from r2.lib.db.thing import NotFound from r2.models.account import Account, AccountExists, register from r2.models.link import Tag, TagExists from r2.models.subreddit import Subreddit try: register('admin', 'swordfish', '', False) except AccountExists: pass admin = Account._by_name('admin') admin.email_validated = True admin._commit() try: Subreddit._by_name('main') except NotFound: Subreddit._create_and_subscribe( 'main', admin, { 'title': 'Effective Altruism Forum', 'type': 'restricted', 'default_listing': 'new' }) try: Subreddit._by_name('admin') except NotFound: Subreddit._create_and_subscribe('admin', admin, { 'title': 'Admin',
def handle_register(controller, form, responder, name, email, password, rem=None, newsletter_subscribe=False, sponsor=False, signature=None, **kwargs): def _event(error): g.events.login_event('register_attempt', error_msg=error, user_name=request.urlvars.get('url_user'), email=request.POST.get('email'), remember_me=rem, newsletter=newsletter_subscribe, signature=signature, request=request, context=c) if signature and not signature.is_valid(): _event(error="SIGNATURE") abort(403) if responder.has_errors('user', errors.USERNAME_TOO_SHORT): _event(error='USERNAME_TOO_SHORT') elif responder.has_errors('user', errors.USERNAME_INVALID_CHARACTERS): _event(error='USERNAME_INVALID_CHARACTERS') elif responder.has_errors('user', errors.USERNAME_TAKEN_DEL): _event(error='USERNAME_TAKEN_DEL') elif responder.has_errors('user', errors.USERNAME_TAKEN): _event(error='USERNAME_TAKEN') elif responder.has_errors('email', errors.BAD_EMAIL): _event(error='BAD_EMAIL') elif responder.has_errors('passwd', errors.SHORT_PASSWORD): _event(error='SHORT_PASSWORD') elif responder.has_errors('passwd', errors.BAD_PASSWORD): # BAD_PASSWORD is set when SHORT_PASSWORD is set _event(error='BAD_PASSWORD') elif responder.has_errors('passwd2', errors.BAD_PASSWORD_MATCH): _event(error='BAD_PASSWORD_MATCH') elif responder.has_errors('ratelimit', errors.RATELIMIT): _event(error='RATELIMIT') elif (not g.disable_captcha and responder.has_errors('captcha', errors.BAD_CAPTCHA)): _event(error='BAD_CAPTCHA') #Blockpath may require email elif not email and g.config.get('verifyemailrequired', ()): c.errors.add(errors.NO_EMAIL, field="email") form.has_errors("email", errors.NO_EMAIL) _event( error='NO_EMAIL') #might already be set by ValidEmail validator?? elif newsletter_subscribe and not email: c.errors.add(errors.NEWSLETTER_NO_EMAIL, field="email") form.has_errors("email", errors.NEWSLETTER_NO_EMAIL) _event(error='NEWSLETTER_NO_EMAIL') elif sponsor and not email: c.errors.add(errors.SPONSOR_NO_EMAIL, field="email") form.has_errors("email", errors.SPONSOR_NO_EMAIL) _event(error='SPONSOR_NO_EMAIL') else: try: user = register(name, password, request.ip) except AccountExists: c.errors.add(errors.USERNAME_TAKEN, field="user") form.has_errors("user", errors.USERNAME_TAKEN) _event(error='USERNAME_TAKEN') return VRatelimit.ratelimit(rate_ip=True, prefix="rate_register_", seconds=86400) # anything else we know (email, languages)? if email: user.set_email(email) emailer.verify_email(user) user.pref_lang = c.lang user._commit() amqp.add_item('new_account', user._fullname) hooks.get_hook("account.registered").call(user=user) reject = hooks.get_hook("account.spotcheck").call(account=user) if any(reject): _event(error='ACCOUNT_SPOTCHECK') return if newsletter_subscribe and email: try: newsletter.add_subscriber(email, source="register") except newsletter.NewsletterError as e: g.log.warning("Failed to subscribe: %r" % e) controller._login(responder, user, rem) _event(error=None)
# Initialise a newly-created db with required tables, users, # categories and tags. from r2.lib.db.thing import NotFound from r2.models.account import Account, AccountExists, register from r2.models.link import Tag, TagExists from r2.models.subreddit import Subreddit try: register('admin', 'swordfish', '') except AccountExists: pass admin = Account._by_name('admin') admin.email_validated = True admin._commit() try: Subreddit._by_name('admin') except NotFound: Subreddit._create_and_subscribe('admin', admin, { 'title': 'Admin', 'type': 'restricted', 'default_listing': 'new' }) try: Subreddit._by_name('main') except NotFound: Subreddit._create_and_subscribe('main', admin, { 'title': 'EA Forum', 'type': 'restricted', 'default_listing': 'new' })
# Initialise a newly-created db with required tables, users, # categories and tags. from r2.lib.db.thing import NotFound from r2.models.account import Account, AccountExists, register from r2.models.link import Tag, TagExists from r2.models.subreddit import Subreddit try: register('admin', 'swordfish', '') except AccountExists: pass admin = Account._by_name('admin') admin.email_validated = True admin._commit() try: Subreddit._by_name('lesswrong') except NotFound: Subreddit._create_and_subscribe('lesswrong', admin, { 'title': 'Less Wrong', 'type': 'restricted', 'default_listing': 'blessed' }) try: Subreddit._by_name('discussion') except NotFound: s = Subreddit._create_and_subscribe( 'discussion', admin, { 'title': 'Less Wrong Discussion',
def handle_register( controller, form, responder, name, email, password, rem=None, newsletter_subscribe=False, sponsor=False, signature=None, **kwargs ): # check captcha before register (if any) since its answer might # change once c.user is set. captcha_shown = not signature and need_provider_captcha("register") def _event(error, captcha_shown=captcha_shown): g.events.login_event( 'register_attempt', error_msg=error, user_name=request.urlvars.get('url_user'), email=request.POST.get('email'), remember_me=rem, newsletter=newsletter_subscribe, captcha_shown=captcha_shown, signature=signature, request=request, context=c) if signature and not signature.is_valid(): _event(error="SIGNATURE") abort(403) if responder.has_errors('user', errors.USERNAME_TOO_SHORT): _event(error='USERNAME_TOO_SHORT') elif responder.has_errors('user', errors.USERNAME_INVALID_CHARACTERS): _event(error='USERNAME_INVALID_CHARACTERS') elif responder.has_errors('user', errors.USERNAME_TAKEN_DEL): _event(error='USERNAME_TAKEN_DEL') elif responder.has_errors('user', errors.USERNAME_TAKEN): _event(error='USERNAME_TAKEN') elif responder.has_errors('email', errors.BAD_EMAIL): _event(error='BAD_EMAIL') elif responder.has_errors('passwd', errors.SHORT_PASSWORD): _event(error='SHORT_PASSWORD') elif responder.has_errors('passwd', errors.BAD_PASSWORD): # BAD_PASSWORD is set when SHORT_PASSWORD is set _event(error='BAD_PASSWORD') elif responder.has_errors('passwd2', errors.BAD_PASSWORD_MATCH): _event(error='BAD_PASSWORD_MATCH') elif responder.has_errors('ratelimit', errors.RATELIMIT): _event(error='RATELIMIT') elif newsletter_subscribe and not email: c.errors.add(errors.NEWSLETTER_NO_EMAIL, field="email") form.has_errors("email", errors.NEWSLETTER_NO_EMAIL) _event(error='NEWSLETTER_NO_EMAIL') elif sponsor and not email: c.errors.add(errors.SPONSOR_NO_EMAIL, field="email") form.has_errors("email", errors.SPONSOR_NO_EMAIL) _event(error='SPONSOR_NO_EMAIL') # last but not least, we have to check the captcha elif (not signature and not g.disable_captcha and not valid_provider_captcha(responder, "register")): _event(error='BAD_CAPTCHA') else: try: user = register(name, password, request.ip) except AccountExists: c.errors.add(errors.USERNAME_TAKEN, field="user") form.has_errors("user", errors.USERNAME_TAKEN) _event(error='USERNAME_TAKEN') return VRatelimit.ratelimit(rate_ip=True, prefix="rate_register_") # anything else we know (email, languages)? if email: user.set_email(email) emailer.verify_email(user) user.pref_lang = c.lang if (is_api("html") and feature.is_enabled("new_user_onboarding", user=user)): user.has_been_onboarded = False user._commit() amqp.add_item('new_account', user._fullname) hooks.get_hook("account.registered").call(user=user) reject = hooks.get_hook("account.spotcheck").call(account=user) if any(reject): _event(error='ACCOUNT_SPOTCHECK') return if newsletter_subscribe and email: try: newsletter.add_subscriber(email, source="register") except newsletter.NewsletterError as e: g.log.warning("Failed to subscribe: %r" % e) controller._login(responder, user, rem) _event(error=None)