Пример #1
0
    def create_users(cls):
        root = model.User(email_addr=cls.root_addr,
                          name=cls.root_name,
                          passwd_hash=cls.root_password,
                          fullname=cls.fullname,
                          api_key=cls.root_api_key)
        root.set_password(cls.root_password)

        user = model.User(email_addr=cls.email_addr,
                          name=cls.name,
                          passwd_hash=cls.password,
                          fullname=cls.fullname,
                          api_key=cls.api_key)

        user.set_password(cls.password)

        user2 = model.User(email_addr=cls.email_addr2,
                           name=cls.name2,
                           passwd_hash=cls.password + "2",
                           fullname=cls.fullname2,
                           api_key=cls.api_key_2)

        user2.set_password(cls.password)

        return root, user, user2
Пример #2
0
    def create(cls):
        user = model.User(
                email_addr = cls.email_addr, 
                name = cls.name, 
                fullname = cls.fullname, 
                api_key = cls.api_key)

        user2 = model.User(
                email_addr = cls.email_addr2, 
                name = cls.name2, 
                fullname = cls.fullname2, 
                api_key=cls.api_key_2)

        info = {
            'total': 150,
            'long_description': 'hello world'
            }

        app = model.App(
                name = u'My New App',
                short_name = cls.app_name,
                description = u'description',
                hidden = 0,
                info = info
            )

        app.owner = user
        task_info = {
            'question': 'My random question',
            'url': 'my url'
            }
        task_run_info = {
            'answer': u'annakarenina'
            }

        model.Session.add_all([user, user2, app])

        # Create the task and taskruns for the first app
        for i in range (0,10):
            task = model.Task(app_id = 1, state = '0', info = task_info)
            task.app = app
            # Taskruns will be assigned randomly to a signed user or an anonymous one
            if random.randint(0,1) == 1:
                task_run = model.TaskRun(
                        app_id = 1, 
                        task_id = 1, 
                        user_id = 1, 
                        info = task_run_info)
                task_run.user = user
            else:
                task_run = model.TaskRun(
                        app_id = 1, 
                        task_id = 1, 
                        user_ip = '127.0.0.1', 
                        info = task_run_info)
            task_run.task = task
            model.Session.add_all([task, task_run])
        model.Session.commit()
        model.Session.remove()
Пример #3
0
    def create_users(cls):
        user = model.User(email_addr=cls.email_addr,
                          name=cls.name,
                          passwd_hash=cls.password,
                          fullname=cls.fullname,
                          api_key=cls.api_key)

        user2 = model.User(email_addr=cls.email_addr2,
                           name=cls.name2,
                           passwd_hash=cls.password + "2",
                           fullname=cls.fullname2,
                           api_key=cls.api_key_2)

        return user, user2
Пример #4
0
def update_profile():
    form = UpdateProfileForm(obj=current_user)
    form.set_locales(current_app.config['LOCALES'])
    form.populate_obj(current_user)
    if request.method == 'GET':
        title_msg = "Update your profile: %s" % current_user.fullname
        return render_template('account/update.html',
                               title=title_msg,
                               form=form)
    else:
        form = UpdateProfileForm(request.form)
        form.set_locales(current_app.config['LOCALES'])
        if form.validate():
            new_profile = model.User(id=form.id.data,
                                     fullname=form.fullname.data,
                                     name=form.name.data,
                                     email_addr=form.email_addr.data,
                                     locale=form.locale.data,
                                     ckan_api=form.ckan_api.data)
            db.session.query(model.User)\
              .filter(model.User.id == current_user.id)\
              .first()
            db.session.merge(new_profile)
            db.session.commit()
            flash(gettext('Your profile has been updated!'), 'success')
            return redirect(url_for('.profile'))
        else:
            flash(gettext('Please correct the errors'), 'error')
            title_msg = 'Update your profile: %s' % current_user.fullname
            return render_template('/account/update.html',
                                   form=form,
                                   title=title_msg)
Пример #5
0
def update_profile():
    form = UpdateProfileForm(obj=current_user)
    form.populate_obj(current_user)
    if request.method == 'GET':
        return render_template('account/update.html',
                title="Update your profile: %s" % current_user.fullname,
                form=form)
    else:
        form = UpdateProfileForm(request.form)
        if form.validate():
            new_profile = model.User(
                    id=form.id.data,
                    fullname=form.fullname.data,
                    name=form.name.data,
                    email_addr=form.email_addr.data
                    )
            db.session.query(model.User)\
                    .filter(model.User.id == current_user.id)\
                    .first()
            db.session.merge(new_profile)
            db.session.commit()
            flash('Your profile has been updated!', 'success')
            return redirect(url_for('.profile'))
        else:
            flash('Please correct the errors', 'error')
            return render_template('/account/update.html', form=form,
                                    title='Update your profile: %s' %
                                            current_user.fullname)
Пример #6
0
def manage_user(access_token, user_data, next_url):
    """Manage the user after signin"""
    user = db.session.query(model.User)\
             .filter_by(facebook_user_id=user_data['id']).first()

    if user is None:
        facebook_token = dict(oauth_token=access_token)
        info = dict(facebook_token=facebook_token)
        user = db.session.query(model.User)\
                 .filter_by(name=user_data['username']).first()
        # NOTE: Sometimes users at Facebook validate their accounts without
        # registering an e-mail (see this http://stackoverflow.com/a/17809808)
        email = None
        if user_data.get('email'):
            email = db.session.query(model.User)\
                      .filter_by(email_addr=user_data['email']).first()

        if user is None and email is None:
            if not user_data.get('email'):
                user_data['email'] = "None"
            user = model.User(fullname=user_data['name'],
                              name=user_data['username'],
                              email_addr=user_data['email'],
                              facebook_user_id=user_data['id'],
                              info=info)
            db.session.add(user)
            db.session.commit()
            return user
        else:
            return None
    else:
        return user
Пример #7
0
def manage_user(access_token, user_data, next_url):
    """Manage the user after signin"""
    # Twitter API does not provide a way
    # to get the e-mail so we will ask for it
    # only the first time
    user = db.session.query(model.User)\
             .filter_by(twitter_user_id=user_data['user_id'])\
             .first()

    if user is not None:
        return user

    twitter_token = dict(oauth_token=access_token['oauth_token'],
                         oauth_token_secret=access_token['oauth_token_secret'])
    info = dict(twitter_token=twitter_token)
    user = db.session.query(model.User)\
        .filter_by(name=user_data['screen_name'])\
        .first()

    if user is not None:
        return None

    user = model.User(fullname=user_data['screen_name'],
                      name=user_data['screen_name'],
                      email_addr=user_data['screen_name'],
                      twitter_user_id=user_data['user_id'],
                      info=info)
    db.session.add(user)
    db.session.commit()
    return user
Пример #8
0
def manage_user(access_token, user_data, next_url):
    """Manage the user after signin"""
    user = db.session.query(model.User)\
             .filter_by(facebook_user_id=user_data['id']).first()

    if user is None:
        facebook_token = dict(oauth_token=access_token)
        info = dict(facebook_token=facebook_token)
        user = db.session.query(model.User)\
                 .filter_by(name=user_data['username']).first()
        email = db.session.query(model.User)\
                  .filter_by(email_addr=user_data['email']).first()

        if user is None and email is None:
            user = model.User(fullname=user_data['name'],
                              name=user_data['username'],
                              email_addr=user_data['email'],
                              facebook_user_id=user_data['id'],
                              info=info)
            db.session.add(user)
            db.session.commit()
            return user
        else:
            return None
    else:
        return user
Пример #9
0
def manage_user(access_token, user_data, next_url):
    """Manage the user after signin"""
    # We have to store the oauth_token in the session to get the USER fields

    user = db.session.query(model.User)\
             .filter_by(google_user_id=user_data['id'])\
             .first()

    # user never signed on
    if user is None:
        google_token = dict(oauth_token=access_token)
        info = dict(google_token=google_token)
        user = db.session.query(model.User)\
                 .filter_by(fullname=user_data['name'])\
                 .first()

        email = db.session.query(model.User)\
                  .filter_by(email_addr=user_data['email'])\
                  .first()

        if user is None and email is None:
            user = model.User(fullname=user_data['name'],
                              name=user_data['name'],
                              email_addr=user_data['email'],
                              google_user_id=user_data['id'],
                              info=info)
            db.session.add(user)
            db.session.commit()
            return user
        else:
            return None
    else:
        return user
Пример #10
0
def fixtures():
    '''Create some fixtures!'''
    user = model.User(name=u'tester',
                      email_addr=u'*****@*****.**',
                      api_key='tester')
    user.set_password(u'tester')
    db.session.add(user)
    db.session.commit()
Пример #11
0
def oauth_authorized(resp):
    next_url = request.args.get('next') or url_for('home')
    if resp is None:
        flash(u'You denied the request to sign in.', 'error')
        flash(
            u'Reason: ' + request.args['error_reason'] + ' ' +
            request.arts['error_description'], 'error')
        return redirect(next_url)

    # We have to store the oauth_token in the session to get the USER fields
    session['oauth_token'] = (resp['access_token'], '')
    me = facebook.oauth.get('/me')

    user = db.session.query(model.User)\
           .filter_by(facebook_user_id=me.data['id']).first()

    # user never signed on
    first_login = False
    if user is None:
        first_login = True
        facebook_token = dict(oauth_token=resp['access_token'])
        info = dict(facebook_token=facebook_token)
        user = db.session.query(model.User)\
                .filter_by(name=me.data['username']).first()
        email = db.session.query(model.User)\
                .filter_by(email_addr=me.data['email']).first()

        if user is None and email is None:
            user = model.User(fullname=me.data['name'],
                              name=me.data['username'],
                              email_addr=me.data['email'],
                              facebook_user_id=me.data['id'],
                              info=info)
            db.session.add(user)
            db.session.commit()
        else:
            flash(
                u'Sorry, there is already an account with the same user name'
                'or email.', 'error')
            flash(u'You can create a new account and sign in', 'info')
            return redirect(url_for('account.register'))

    login_user(user, remember=True)
    flash("Welcome back %s" % user.fullname, 'success')
    request_email = False
    if (user.email_addr == "None"):
        request_email = True

    if request_email:
        if first_login:
            flash("This is your first login, please add a valid e-mail")
        else:
            flash("Please update your e-mail address in your profile page")
        return redirect(url_for('account.update_profile'))

    return redirect(next_url)
Пример #12
0
def fixtures():
    '''Create some fixtures!'''
    dburi = web.app.config['SQLALCHEMY_DATABASE_URI']
    engine = model.create_engine(dburi)
    model.set_engine(engine)
    user = model.User(name=u'tester',
                      email_addr=u'*****@*****.**',
                      api_key='tester')
    user.set_password(u'tester')
    model.Session.add(user)
    model.Session.commit()
Пример #13
0
def oauth_authorized(resp):
    """Called after authorization. After this function finished handling,
    the OAuth information is removed from the session again. When this
    happened, the tokengetter from above is used to retrieve the oauth
    token and secret.
    
    Because the remote application could have re-authorized the application
    it is necessary to update the values in the database.
    
    If the application redirected back after denying, the response passed
    to the function will be `None`. Otherwise a dictionary with the values
    the application submitted. Note that Twitter itself does not really
    redirect back unless the user clicks on the application name.
    """
    next_url = request.args.get('next') or url_for('home')
    if resp is None:
        flash(u'You denied the request to sign in.', 'error')
        return redirect(next_url)

    user = model.Session.query(
        model.User).filter_by(twitter_user_id=resp['user_id']).first()

    # user never signed on
    # Twitter API does not provide a way to get the e-mail so we will ask for it
    # only the first time
    request_email = False
    first_login = False
    if user is None:
        request_email = True
        first_login = True
        twitter_token = dict(oauth_token=resp['oauth_token'],
                             oauth_token_secret=resp['oauth_token_secret'])
        info = dict(twitter_token=twitter_token)
        user = model.User(fullname=resp['screen_name'],
                          name=resp['screen_name'],
                          email_addr='None',
                          twitter_user_id=resp['user_id'],
                          info=info)
        model.Session.add(user)
        model.Session.commit()

    login_user(user, remember=True)
    flash("Welcome back %s" % user.fullname, 'success')
    if (user.email_addr == "None"): request_email = True

    if request_email:
        if first_login:
            flash("This is your first login, please add a valid e-mail")
        else:
            flash("Please update your e-mail address in your profile page")
        return redirect(url_for('account.update_profile'))

    return redirect(next_url)
Пример #14
0
def register():
    # TODO: re-enable csrf
    form = RegisterForm(request.form, csrf_enabled=False)
    if request.method == 'POST' and form.validate():
        account = model.User(fullname=form.fullname.data,
                             name=form.username.data,
                             email_addr=form.email_addr.data)
        account.set_password(form.password.data)
        model.Session.add(account)
        model.Session.commit()
        login_user(account, remember=True)
        flash('Thanks for signing-up', 'success')
        return redirect(url_for('home'))
    if request.method == 'POST' and not form.validate():
        flash('Please correct the errors', 'error')
    return render_template('account/register.html',
                           title="Register",
                           form=form)
Пример #15
0
def manage_user(access_token, user_data, next_url):
    """Manage the user after signin"""
    # We have to store the oauth_token in the session to get the USER fields

    user = db.session.query(model.User)\
             .filter_by(google_user_id=user_data['id'])\
             .first()

    # user never signed on
    if user is None:
        google_token = dict(oauth_token=access_token)
        info = dict(google_token=google_token)
        user = db.session.query(model.User)\
                 .filter_by(name=user_data['name'].encode('ascii', 'ignore')
                                                  .lower().replace(" ", ""))\
                 .first()

        email = db.session.query(model.User)\
                  .filter_by(email_addr=user_data['email'])\
                  .first()

        if ((user is None) and (email is None)):
            user = model.User(fullname=user_data['name'],
                              name=user_data['name'].encode(
                                  'ascii', 'ignore').lower().replace(" ", ""),
                              email_addr=user_data['email'],
                              google_user_id=user_data['id'],
                              info=info)
            db.session.add(user)
            db.session.commit()
            return user
        else:
            return None
    else:
        # Update the name to fit with new paradigm to avoid UTF8 problems
        if type(user.name) == unicode or ' ' in user.name:
            user.name = user.name.encode('ascii',
                                         'ignore').lower().replace(" ", "")
            db.session.add(user)
            db.session.commit()
        return user
Пример #16
0
def register():
    """
    Register method for creating a PyBossa account.

    Returns a Jinja2 template

    """
    # TODO: re-enable csrf
    form = RegisterForm(request.form)
    if request.method == 'POST' and form.validate():
        account = model.User(fullname=form.fullname.data,
                             name=form.username.data,
                             email_addr=form.email_addr.data)
        account.set_password(form.password.data)
        account.locale = get_locale()
        db.session.add(account)
        db.session.commit()
        login_user(account, remember=True)
        flash(gettext('Thanks for signing-up'), 'success')
        return redirect(url_for('home'))
    if request.method == 'POST' and not form.validate():
        flash(gettext('Please correct the errors'), 'error')
    return render_template('account/register.html',
                           title=gettext("Register"), form=form)