Esempio n. 1
0
def signup():
    next_url = util.get_next_url()
    form = None
    if config.CONFIG_DB.has_email_authentication:
        form = form_with_recaptcha(SignUpForm())
        save_request_params()
        if form.validate_on_submit():
            user_db = model.User.get_by('email', form.email.data)
            if user_db:
                form.email.errors.append('This email is already taken.')

            if not form.errors:
                user_db = create_user_db(
                    None,
                    util.create_name_from_email(form.email.data),
                    form.email.data,
                    form.email.data,
                )
                user_db.put()
                task.activate_user_notification(user_db)
                cache.bump_auth_attempt()
                return flask.redirect(flask.url_for('welcome'))

    if form and form.errors:
        cache.bump_auth_attempt()

    title = 'Sign up' if config.CONFIG_DB.has_email_authentication else 'Sign in'
    return flask.render_template('auth/auth.html',
                                 title=title,
                                 html_class='auth',
                                 next_url=next_url,
                                 form=form,
                                 **urls_for_oauth(next_url))
Esempio n. 2
0
def user_forgot(token=None):
  if not config.CONFIG_DB.has_email_authentication:
    flask.abort(418)

  form = auth.form_with_recaptcha(UserForgotForm(obj=auth.current_user_db()))
  if form.validate_on_submit():
    cache.bump_auth_attempt()
    email = form.email.data
    user_dbs, cursors = util.get_dbs(
        model.User.query(), email=email, active=True, limit=2,
      )
    count = len(user_dbs)
    if count == 1:
      task.reset_password_notification(user_dbs[0])
      return flask.redirect(flask.url_for('welcome'))
    elif count == 0:
      form.email.errors.append('This email was not found')
    elif count == 2:
      task.email_conflict_notification(email)
      form.email.errors.append(
          '''We are sorry but it looks like there is a conflict with your
          account. Our support team is already informed and we will get back to
          you as soon as possible.'''
        )

  if form.errors:
    cache.bump_auth_attempt()

  return flask.render_template(
      'user/user_forgot.html',
      title=_('Forgot Password?'),
      html_class='user-forgot',
      form=form,
    )
Esempio n. 3
0
def signin():
    next_url = util.get_next_url()
    form = None
    if config.CONFIG_DB.has_email_authentication:
        form = form_with_recaptcha(SignInForm())
        save_request_params()
        if form.validate_on_submit():
            result = get_user_db_from_email(form.email.data,
                                            form.password.data)
            if result:
                cache.reset_auth_attempt()
                return signin_user_db(result)
            if result is None:
                form.email.errors.append('Email or Password do not match')
            if result is False:
                return flask.redirect(flask.url_for('welcome'))
        if not form.errors:
            form.next_url.data = next_url

    if form and form.errors:
        cache.bump_auth_attempt()

    return flask.render_template(
        'auth/auth.html',
        title='Sign in',
        html_class='auth',
        next_url=next_url,
        form=form,
        form_type='signin'
        if config.CONFIG_DB.has_email_authentication else '',
        **urls_for_oauth(next_url))
Esempio n. 4
0
def signup():
  next_url = util.get_next_url()
  form = None
  if config.CONFIG_DB.has_email_authentication:
    form = form_with_recaptcha(SignUpForm())
    save_request_params()
    if form.validate_on_submit():
      user_db = model.User.get_by('email', form.email.data)
      if user_db:
        form.email.errors.append('This email is already taken.')

      if not form.errors:
        user_db = create_user_db(
          None,
          util.create_name_from_email(form.email.data),
          form.email.data,
          form.email.data,
        )
        user_db.put()
        task.activate_user_notification(user_db)
        cache.bump_auth_attempt()
        return flask.redirect(flask.url_for('welcome'))

  if form and form.errors:
    cache.bump_auth_attempt()

  title = 'Sign up' if config.CONFIG_DB.has_email_authentication else 'Sign in'
  return flask.render_template(
    'auth/auth.html',
    title=title,
    html_class='auth',
    next_url=next_url,
    form=form,
    **urls_for_oauth(next_url)
  )
Esempio n. 5
0
def signin():
  next_url = util.get_next_url()
  form = None
  if config.CONFIG_DB.has_email_authentication:
    form = form_with_recaptcha(SignInForm())
    save_request_params()
    if form.validate_on_submit():
      result = get_user_db_from_email(form.email.data, form.password.data)
      if result:
        cache.reset_auth_attempt()
        return signin_user_db(result)
      if result is None:
        form.email.errors.append('Email or Password do not match')
      if result is False:
        return flask.redirect(flask.url_for('welcome'))
    if not form.errors:
      form.next_url.data = next_url

  if form and form.errors:
    cache.bump_auth_attempt()

  return flask.render_template(
    'auth/auth.html',
    title='Sign in',
    html_class='auth',
    next_url=next_url,
    form=form,
    form_type='signin' if config.CONFIG_DB.has_email_authentication else '',
    **urls_for_oauth(next_url)
  )
Esempio n. 6
0
def user_forgot(token=None):
    if not config.CONFIG_DB.has_email_authentication:
        flask.abort(418)

    form = auth.form_with_recaptcha(UserForgotForm(obj=auth.current_user_db()))
    if form.validate_on_submit():
        cache.bump_auth_attempt()
        email = form.email.data
        user_dbs, _ = util.get_dbs(
            model.User.query(),
            email=email,
            active=True,
            limit=2,
        )
        count = len(user_dbs)
        if count == 1:
            task.reset_password_notification(user_dbs[0])
            return flask.redirect(flask.url_for('welcome'))
        elif count == 0:
            form.email.errors.append(u'Имэйл хаяг олдсонгүй')
        elif count == 2:
            task.email_conflict_notification(email)
            form.email.errors.append(
                u'''Уучлаарай таны дансанд давхардал үүссэн байна. Бид нэн даруй хариуцсан
                ажилтанд мэдэгдсэн болно. Тусламжийн ажилтан тантай аль болох хурдан
                холбогдох болно.''')

    if form.errors:
        cache.bump_auth_attempt()

    return flask.render_template(
        'user/user_forgot.html',
        title=u'Нууц үгээ мартсан уу?',
        html_class='user-forgot',
        form=form,
    )
Esempio n. 7
0
def auth():
  auth_type = 'open'
  if config.CONFIG_DB.has_email_authentication:
    auth_type = 'signin'
    if flask.url_for('signup') in flask.request.path:
      auth_type = 'signup'

  next_url = util.get_next_url()

  bitbucket_signin_url = url_for_signin('bitbucket', next_url)
  dropbox_signin_url = url_for_signin('dropbox', next_url)
  facebook_signin_url = url_for_signin('facebook', next_url)
  facebook_signin_url = url_for_signin('facebook', next_url)
  github_signin_url = url_for_signin('github', next_url)
  google_signin_url = url_for_signin('google', next_url)
  instgram_signin_url = url_for_signin('instagram', next_url)
  linkedin_signin_url = url_for_signin('linkedin', next_url)
  microsoft_signin_url = url_for_signin('microsoft', next_url)
  reddit_signin_url = url_for_signin('reddit', next_url)
  stackoverflow_signin_url = url_for_signin('stackoverflow', next_url)
  twitter_signin_url = url_for_signin('twitter', next_url)
  vk_signin_url = url_for_signin('vk', next_url)
  yahoo_signin_url = url_for_signin('yahoo', next_url)

  form = None
  hide_recaptcha = cache.get_auth_attempt() < config.RECAPTCHA_LIMIT

  # --------------
  # Sign in stuff
  # --------------
  if auth_type == 'signin':
    form = SignInForm()
    if hide_recaptcha or not config.CONFIG_DB.has_recaptcha:
      del form.recaptcha
    save_request_params()
    if form.validate_on_submit():
      result = retrieve_user_from_email(form.email.data, form.password.data)
      if result:
        cache.reset_auth_attempt()
        return signin_user_db(result)
      if result is None:
        form.email.errors.append('Email or Password do not match')
      if result is False:
        return flask.redirect(flask.url_for('welcome'))
    if not form.errors:
      form.next_url.data = next_url

  # --------------
  # Sign up stuff
  # --------------
  if auth_type == 'signup':
    form = SignUpForm()
    if hide_recaptcha or not config.CONFIG_DB.has_recaptcha:
      del form.recaptcha
    save_request_params()
    if form.validate_on_submit():
      user_db = model.User.get_by('email', form.email.data)
      if user_db:
        form.email.errors.append('This email is already taken.')

      if not form.errors:
        user_db = create_user_db(
            None,
            util.create_name_from_email(form.email.data),
            form.email.data,
            form.email.data,
          )
        user_db.put()
        task.activate_user_notification(user_db)
        cache.bump_auth_attempt()
        return flask.redirect(flask.url_for('welcome'))

  if form and form.errors:
    cache.bump_auth_attempt()

  return flask.render_template(
      'auth/auth.html',
      title='Sign up' if auth_type == 'signup' else 'Sign in',
      html_class='auth %s' % auth_type,
      bitbucket_signin_url=bitbucket_signin_url,
      dropbox_signin_url=dropbox_signin_url,
      facebook_signin_url=facebook_signin_url,
      github_signin_url=github_signin_url,
      google_signin_url=google_signin_url,
      instagram_signin_url=instgram_signin_url,
      linkedin_signin_url=linkedin_signin_url,
      microsoft_signin_url=microsoft_signin_url,
      reddit_signin_url=reddit_signin_url,
      stackoverflow_signin_url=stackoverflow_signin_url,
      twitter_signin_url=twitter_signin_url,
      vk_signin_url=vk_signin_url,
      yahoo_signin_url=yahoo_signin_url,
      next_url=next_url,
      form=form,
      auth_type=auth_type,
    )
Esempio n. 8
0
def auth():
    auth_type = 'open'
    if config.CONFIG_DB.has_email_authentication:
        auth_type = 'signin'
        if flask.url_for('signup') in flask.request.path:
            auth_type = 'signup'

    next_url = util.get_next_url()

    bitbucket_signin_url = url_for_signin('bitbucket', next_url)
    dropbox_signin_url = url_for_signin('dropbox', next_url)
    facebook_signin_url = url_for_signin('facebook', next_url)
    facebook_signin_url = url_for_signin('facebook', next_url)
    github_signin_url = url_for_signin('github', next_url)
    google_signin_url = url_for_signin('google', next_url)
    instgram_signin_url = url_for_signin('instagram', next_url)
    linkedin_signin_url = url_for_signin('linkedin', next_url)
    microsoft_signin_url = url_for_signin('microsoft', next_url)
    reddit_signin_url = url_for_signin('reddit', next_url)
    stackoverflow_signin_url = url_for_signin('stackoverflow', next_url)
    twitter_signin_url = url_for_signin('twitter', next_url)
    vk_signin_url = url_for_signin('vk', next_url)
    yahoo_signin_url = url_for_signin('yahoo', next_url)

    form = None
    hide_recaptcha = cache.get_auth_attempt() < config.RECAPTCHA_LIMIT

    # --------------
    # Sign in stuff
    # --------------
    if auth_type == 'signin':
        form = SignInForm()
        if hide_recaptcha or not config.CONFIG_DB.has_recaptcha:
            del form.recaptcha
        save_request_params()
        if form.validate_on_submit():
            result = retrieve_user_from_email(form.email.data,
                                              form.password.data)
            if result:
                cache.reset_auth_attempt()
                return signin_user_db(result)
            if result is None:
                form.email.errors.append('Email or Password do not match')
            if result is False:
                return flask.redirect(flask.url_for('welcome'))
        if not form.errors:
            form.next_url.data = next_url

    # --------------
    # Sign up stuff
    # --------------
    if auth_type == 'signup':
        form = SignUpForm()
        if hide_recaptcha or not config.CONFIG_DB.has_recaptcha:
            del form.recaptcha
        save_request_params()
        if form.validate_on_submit():
            user_db = model.User.get_by('email', form.email.data)
            if user_db:
                form.email.errors.append('This email is already taken.')

            if not form.errors:
                user_db = create_user_db(
                    None,
                    util.create_name_from_email(form.email.data),
                    form.email.data,
                    form.email.data,
                )
                user_db.put()
                task.activate_user_notification(user_db)
                cache.bump_auth_attempt()
                return flask.redirect(flask.url_for('welcome'))

    if form and form.errors:
        cache.bump_auth_attempt()

    return flask.render_template(
        'auth/auth.html',
        title='Sign up' if auth_type == 'signup' else 'Sign in',
        html_class='auth %s' % auth_type,
        bitbucket_signin_url=bitbucket_signin_url,
        dropbox_signin_url=dropbox_signin_url,
        facebook_signin_url=facebook_signin_url,
        github_signin_url=github_signin_url,
        google_signin_url=google_signin_url,
        instagram_signin_url=instgram_signin_url,
        linkedin_signin_url=linkedin_signin_url,
        microsoft_signin_url=microsoft_signin_url,
        reddit_signin_url=reddit_signin_url,
        stackoverflow_signin_url=stackoverflow_signin_url,
        twitter_signin_url=twitter_signin_url,
        vk_signin_url=vk_signin_url,
        yahoo_signin_url=yahoo_signin_url,
        next_url=next_url,
        form=form,
        auth_type=auth_type,
    )