Example #1
0
def remote_authorize(*args, **kwargs):
    """Login via JSON from another application.

    :param string email: Email associated with user account
    :param string password: Password assocaited with user account

    :return bool
    """
    form_class = _security.login_form

    error_message = 'No credentials provided'

    if request.json:
        form = form_class(MultiDict(request.json))
    else:
        abort(403, error_message)

    if form.validate_on_submit():
        login_user(form.user, remember=form.remember.data)
        after_this_request(_commit)

        current_user = form.user
    else:
        abort(403, error_message)

    if not hasattr(current_user, 'id'):
        abort(403, error_message)

    return True
Example #2
0
def register(login_failed=False, **kwargs):
    if current_user.is_authenticated():
        return redirect(request.referrer or '/')

    form = RegisterForm()

    ds = get_extension('security', app=current_app).datastore
    if form.validate_on_submit():
        user = ds.create_user(
            fullname=form.fullname.data,
            email=form.email.data,
            password=form.password.data)
        ds.commit()

        login_user(user)
        ds.commit()
        flash('Account created successfully', 'info')
        return index(show_modal='profile')

    if form.errors:
        show_modal = 'signup'
    else:
        show_modal = None

    return index(register_form=form, show_modal=show_modal)
Example #3
0
def login():
    if request.method == "GET":
        if current_user.is_authenticated:
            return redirect(url_for('main.feed'))
        else:
            return render_template('mod_auth/log_in.html')
    elif request.method == "POST":
        email = request.form['email']
        password = request.form['password']

        user_input = user_mongo_utils.get_user(email=email)
        if user_input is None:
            error = 'Please write both username and password', 'error'
            return render_template('mod_auth/log_in.html', error=error)
        elif user_input != None:
            password_check = bcrypt.check_password_hash(
                user_input.password, password)
            email_check = True if user_input.email == email else False
            if not email_check:
                error = 'Wrong email'
                return render_template('mod_auth/log_in.html', error=error)
            elif not password_check:
                error = 'Wrong password'
                return render_template('mod_auth/log_in.html', error=error)
            elif password_check and email_check:
                login_user(user_input)
                # Tell Flask-Principal the identity changed
                identity_changed.send(current_app._get_current_object(),
                                      identity=Identity(current_user.id))
                return redirect(url_for('main.feed'))
Example #4
0
 def post(self):
     args = self.reqparse.parse_args()
     user = User.authenticate(args)
     if user:
         login_user(user)
         return dict(user=user.name()), 200
     return 'Invalid username or password', 400
Example #5
0
def new_dhbox():
    users_and_passes = []
    admins_and_passes = []
    form = request.form
    data = {key: request.form.getlist(key)[0] for key in request.form.keys()}
    for key in data:
        users_dict = key
    users_dict = ast.literal_eval(users_dict)
    users = users_dict['users']
    for user in users:
        if 'name' in user:
            if 'email' in user:  # Then is DH Box admin
                name_check = User.query.filter(User.name == user['name']).first()
                email_check = User.query.filter(User.name == user['email']).first()
                if name_check or email_check:
                    print "Username taken. Already has a DH Box."
                    return str('failure')
                admin_user = user['name']
                admin_email = user['email']
                admin_pass = user['pass']
                admin_user_object = user_datastore.create_user(email=admin_email, name=admin_user, password=admin_pass)
                db.session.commit()
                login_user(admin_user_object)
                the_new_dhbox = DockerBackend.setup_new_dhbox(admin_user, admin_pass, admin_email)
    return str('Successfully created a new DH Box.')
Example #6
0
def demo():
    username = '******' + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10))
    demo_user_object = user_datastore.create_user(email=username + '@demo.com', name=username, password='******')
    db.session.commit()
    login_user(demo_user_object)
    new_dhbox = DockerBackend.demo_dhbox(username)
    return redirect('/dhbox/' + username, 301)
Example #7
0
def login():

    #form = LoginForm()
    rm = resources.model
    form = UserLogin()
    # g.last_login = ''
    if form.validate_on_submit():

        login_user(form.user, remember=False)
        flash("Logged is successfully.")
        if session['referer'] != '':
            if session["referer"] == '/':
                label_user = db.session.query(rm.Label).filter_by(user_id=current_user.id).first()
                if label_user:
                    return redirect('/')
                else:
                    return redirect('/get_label')
            else:
                return redirect(session['referer'])
        else:
            return redirect('/get_label')
    else:
        if request.form.getlist('btn_register'):
            return redirect('/register')
        if request.form.getlist('btn_return'):
            return redirect('/return_label')

    return render_template('register_label.html', form=form)
def load_or_creator_user(token):
    '''根据token载入或创建用户
    '''
    import datetime
    user = User.query.filter_by(uid = int(token.uid)).first()
    if user is None:
        print 'user is not created'
        # create user
        user_info = client.users.show.get(uid = token.uid)
        user = User(token.uid, json.dumps(user_info), json.dumps(token))
        user.active = True
        user.create_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        user.last_login_time = user.create_time
        db.session.add(user)
        db.session.commit()
        login_user(user)
    else:
        print 'user has been created'
        # load user
        user.token = json.dumps(token)
        user_info = client.users.show.get(uid = token.uid)
        user.info = json.dumps(user_info)
        user.active = True
        user.last_login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        db.session.commit()
        login_user(user)
Example #9
0
def register(provider_id=None):
	if current_user.is_authenticated():
		return redirect(request.referrer or '/')

	if provider_id:
		provider = get_provider_or_404(provider_id)
		connection_values = session.pop('failed_login_connection', None)
	else:
		provider = None
		connection_values = None

	app.logger.debug("Attemption to register with connection_values: %s" % repr(connection_values))

	if connection_values is not None:
		ds = app.security.datastore
		fake_email = connection_values['provider_user_id'] + "*****@*****.**"
		user = ds.create_user(email=fake_email, password="******")

		ds.commit()
		
		connection_values['user_id'] = user.id
		connect_handler(connection_values, provider)

		login_user(user)
		ds.commit()
		flash('Account created successfully', 'info')
		return redirect(url_for('index'))

	return abort(404)
Example #10
0
def admin_view_as():
    user_id = request.args.get('user_id')
    u = User.query.filter_by(id=user_id).first()
    if u:
        logout_user()
        login_user(u)
    return redirect(url_for('client.home'))
Example #11
0
def check_if_user_exists(data, *args, **kwargs):
    if current_user.is_authenticated():
        data["user_id"] = current_user.id
        return
    user_name = data.get('user_name')
    user_email = data.get('user_email')
    user_legacy_email = None
    if 'user_legacy_email' in data:
        user_legacy_email = data.get('user_legacy_email')
        del data['user_legacy_email']

    if not user_name:
        raise ProcessingException(description=ExceptionMessages.MISSING_PARAM.format(param='user_name'), code=401)

    if not user_email:
        raise ProcessingException(description=ExceptionMessages.MISSING_PARAM.format(param='user_email'), code=401)

    user, is_new = models.User.get_or_create_by_email(email=user_email, role_name=Constants.REVIEWER_ROLE,
                                                      user_legacy_email=user_legacy_email, name=user_name)
    if not is_new:
        # TODO maybe display a passwd field if user is not new?
        raise ProcessingException(description=ExceptionMessages.USER_EXISTS % user_email, code=401)

    db.session.add(user)
    db.session.commit()
    login_user(user)

    if 'user_name' in data:
        del data['user_name']
    del data['user_email']
    data['user_id'] = user.id
Example #12
0
 def login(self):
     parser = self.get_parser()
     parser.add_argument('phone', type=str, required=True, location='json')
     parser.add_argument('password',
                         type=StringParam.check,
                         required=True,
                         location='json',
                         min=6,
                         max=20)
     phone, password = self.get_params('phone', 'password')
     password = hashlib.md5(password).hexdigest().upper()
     user = user_datastore.find_user(phone=phone)
     if not user or user.password != password or not (user.has_role(
             RoleType.admin) or user.has_role(RoleType.student)):
         self.bad_request(errorcode.INVALID_USER)
     login_user(user, True)
     user.last_login_time = datetime.now()
     user.save()
     role_name = RoleType.admin if len(
         user.roles) > 1 else user.roles[0].name
     return {
         'id': user.id,
         'role': role_name,
         'chinese_name': user.chinese_name,
         'english_name': user.english_name
     }
Example #13
0
def twitter_authenticated():
    pincode = request.args.get('oauth_verifier')
    consumer = oauth.Consumer(key=consumer_key, secret=consumer_secret)
    token = oauth.Token(session['request_token']['oauth_token'],
                        session['request_token']['oauth_token_secret'])
    client = oauth.Client(consumer, token)
    body = urllib.urlencode({'oauth_callback': callback_uri, 'oauth_verifier': pincode })
    resp, content = client.request(access_token_url, "POST", body=body)
    if resp['status'] != '200':
        raise Exception("Invalid response from Twitter."+ resp['status'])

    """
    This is what you'll get back from Twitter. Note that it includes the
    user's user_id and screen_name.
    {
        'oauth_token_secret': 'IcJXPiJh8be3BjDWW50uCY31chyhsMHEhqJVsphC3M',
        'user_id': '120889797', 
        'oauth_token': '120889797-H5zNnM3qE0iFoTTpNEHIz3noL9FKzXiOxwtnyVOD',
        'screen_name': 'heyismysiteup'
    }
    """
    access_token = dict(cgi.parse_qsl(content))   
    user = User.query.filter_by(username=access_token['screen_name']).first()
    if user is None:
        role = Role.query.filter(Role.name=="User").first()
        user = user_datastore.create_user(username=access_token['screen_name'], email="email", password="******")
        user_datastore.add_role_to_user(user, role)
        user.oauth_token = access_token['oauth_token']
        user.oauth_secret = access_token['oauth_token_secret']
        user.social = "twitter"
        db.session.commit()
    login_user(user)
    return redirect(url_for('blog.index'))  
Example #14
0
def login():
    if request.method == 'GET':
        next = request.values.get('next', '/')
        return render_template('security/login.html',
                               next=next)
    elif request.method == 'POST':
        u = User(email=request.values.get('email'))
        security.login_user(u)
Example #15
0
    def _authenticate(self, data_dict):
        user = _security.datastore.find_user(email=data_dict["email"])

        if verify_password(data_dict["password"], user.password):
            login_user(user)
        else:
            raise t.DataError({"email": "Can't find anyone with this credentials"})

        return data_dict
Example #16
0
 def post(self):
     parser = request.get_json()
     email = parser.get('email')
     password = parser.get('password')
     if email is None or password is None:
         abort(400)  # missing arguments
     user = user_datastore.create_user(email=email,password=utils.encrypt_password(password))
     login_user(user, remember = True)
     return 201
Example #17
0
def login():
    form = LoginForm()
    if form.validate_on_submit():
        username = request.form['username']
        password = request.form['password']
        session['user_id'] = form.user.id
        user = User.objects.filter(username=username, password=password).get()
        login_user(user, remember=False)
        return redirect(url_for('/user'))
    return render_template('security/login_user.html', login=form)
Example #18
0
    def _authenticate(self, data_dict):
        user = security.datastore.find_user(email=data_dict['email'])

        if verify_password(data_dict.get('password'), user.password):
            login_user(user)
        else:
            raise t.DataError(
                {'email': "Can't find anyone with this credentials"})

        return data_dict
Example #19
0
    def login_view(self):
        # handle user login
        form = LoginForm(request.form)
        if helpers.validate_form_on_submit(form):
            if form.validate():
                login_user(form.user)

        if current_user.is_authenticated():
            return redirect(url_for('.index'))
        return redirect(url_for_security('login', next=url_for('.index')))
Example #20
0
    def _authenticate(self, data_dict):
        user = security.datastore.find_user(email=data_dict['email'])

        if verify_password(data_dict.get('password'), user.password):
            login_user(user)
        else:
            raise t.DataError({
                'email': "Can't find anyone with this credentials"
            })

        return data_dict
Example #21
0
def wechat_bind():
    user = GitlabAccount.authorize(
        request.values["state"],
        request.values["code"]
    )

    logout_user()
    login_user(user)
    db.session.commit()

    return redirect(url_for("index"))
 def post(self):
     args = reqparse.RequestParser() \
         .add_argument('username', type=str, location='json', required=True, help="用户名不能为空") \
         .add_argument("password", type=str, location='json', required=True, help="密码不能为空") \
         .parse_args()
     user = User.authenticate(args['username'], args['password'])
     if user:
         login_user(user=user)
         return {"message": "登录成功", "token": user.get_auth_token()}, 200
     else:
         return {"message": "用户名或密码错误"}, 401
def login():
    form = LoginForm()
    print request.args
    if form.validate_on_submit():
        # login and validate the user...
        login_user(form.user, remember=form.remember.data)
        flash("Bienvenido!")
        return redirect(form.next.data)
    next_s = request.args.get("next")
    if request.method == "POST":
        flash(u"Contraseña o Usuario incorrecto. Intente nuevamente.")
    return render_template("login.html", form=form, next=next_s)
Example #24
0
def demo():
    username = '******' + ''.join(
        random.choice(string.ascii_uppercase + string.digits)
        for _ in range(10))
    demo_user_object = user_datastore.create_user(email=username + '@demo.com',
                                                  name=username,
                                                  password='******',
                                                  dhbox_duration=3600)
    db.session.commit()
    login_user(demo_user_object)
    DockerBackend.demo_dhbox(username)
    return redirect('/dhbox/' + username, 301)
Example #25
0
def login():

    form_class = _security.login_form
    form = form_class()

    if form.validate_on_submit():
        login_user(form.user, remember=form.remember.data)
        after_this_request(_commit)

        if not request.json:
            return redirect(get_post_login_redirect(form.next.data))

    return render_html('content/login.html', login_user_form=form)
Example #26
0
def user_login():
        form = LoginForm()
        next = request.args.get('next')
        if form.validate_on_submit():
            flash('Successfully logged in as %s' % form.user.username)
            session['user_id'] = form.user.id
            user = User.query.get(form.user.id)
            login_user(user)
            if next != "None":
                return redirect(next)
            else:
                return redirect(url_for('blog.index'))
        return render_template('login.html', form=form)
Example #27
0
def login():

    form_class = _security.login_form
    form = form_class()

    if form.validate_on_submit():
        login_user(form.user, remember=form.remember.data)
        after_this_request(_commit)

        if not request.json:
            return redirect(get_post_login_redirect(form.next.data))

    return render_html('content/login.html', login_user_form=form)
Example #28
0
def on_login_failed(sender, provider, oauth_response):
    connection_values = get_connection_values_from_oauth_response(
        provider, oauth_response)
    connection_values['display_name'] = connection_values['display_name'][
        'givenName'] + " " + connection_values['display_name']['familyName']
    connection_values['full_name'] = connection_values['display_name']
    session['google_id'] = connection_values['provider_user_id']
    user = user_datastore.create_user(google_id=session['google_id'])
    user_datastore.commit()
    connection_values['user_id'] = user.id
    connect_handler(connection_values, provider)
    login_user(user)
    db.session.commit()
    return render_template('index.html')
Example #29
0
def fb_authorized():
    # check to make sure the user authorized the request
    if not 'code' in request.args:
        flash('You did not authorize the request')
        return redirect(url_for('auth.login'))

    # make a request for the access token credentials using code
    redirect_uri = url_for('auth.fb_authorized', _external=True)
    data = {
        'code': request.args['code'],
        'grant_type': 'authorization_code',
        'redirect_uri': redirect_uri
    }
    # authorize_url = facebook.get_authorize_url(request_token)
    session = facebook.get_auth_session(data=data)
    # session = OAuth2Session(facebook.client_id, facebook.client_secret, access_token=data['code'])
    # the "me" response
    me = session.get(
        '/me?locale=en_US&fields=first_name,last_name,email,about,picture'
    ).json()
    first_name = me['first_name']
    last_name = me['last_name']

    password = ''.join(random.choice('abcdefghij') for _ in range(10))
    id = me['id']
    user_json = {
        "facebook_id": id,
        "name": first_name,
        "lastname": last_name,
        "email": '',
        "username": first_name + last_name + '-' + str(ObjectId()),
        "password": bcrypt.generate_password_hash(password, rounds=12),
        "active": True,
        "user_slug": slugify(first_name + ' ' + last_name),
        "roles": [user_mongo_utils.get_role_id('individual')],
        "organization": []
    }
    user = user_mongo_utils.get_user_by_facebook_id(id)
    if user == None:
        # Regiser user
        user_mongo_utils.add_user(user_json)
        user = user_mongo_utils.get_user_by_facebook_id(id)
        #  login user
        login_user(user)
    else:
        login_user(user)

    return redirect(url_for('profile.profile_settings',
                            username=user.username))
Example #30
0
    def register_new_user(**kwargs):
        from survaider.security.controller import user_datastore

        reg_dat = get_connection_values_from_oauth_response(kwargs['provider'], kwargs['oauth_response'])

        user = user_datastore.create_user(email = reg_dat['email'], password = str(uuid.uuid4()))
        user.metadata['full_name'] = reg_dat['full_name'] if 'full_name' in reg_dat else reg_dat['display_name'] if 'display_name' in reg_dat else None

        user.save()

        reg_dat['user_id'] = str(user)
        connect_handler(reg_dat, kwargs['provider'])
        login_user(user)

        return True
Example #31
0
def login_user_if_possible(data, *args, **kwargs):
    if "user_email" in data and "user_password" in data:
        email = data["user_email"]
        password = data["user_password"]
        user = models.User.query.filter_by(email=email).first()
        if not user:
            raise ProcessingException(description='unauthorized', code=401)
        if not verify_password(password, user.password):
            raise ProcessingException(description='unauthorized', code=401)
        login_user(user)
        del data["user_password"]
        if 'user_name' in data:
            del data['user_name']
        del data['user_email']
        data["user_id"] = user.id
Example #32
0
 def post(self):
     parser = request.get_json()
     if parser is None:
         abort(400)
     email = parser.get('email')
     password = parser.get('password')
     if email is None or password is None:
         abort(400)
     if user_datastore.find_user(email=email) is None:
         abort(403)
     user = user_datastore.find_user(email=email)
     if user.verify_password(password) is False:
         abort(403)
     login_user(user, remember = True)
     return jsonify({"message": "Login as %s" % current_user.email})
Example #33
0
    def post(self):
        data = get_data()
        if data is not None:
            form = self.form_class(MultiDict(data))
        else:
            form = self.form_class()

        if form.validate_on_submit():
            login_user(form.user, remember=form.remember.data)
            after_this_request(_commit)

            # This returns the response and the status code.  See function.
            return authentication_response(form)

        return form.as_json(), 400
Example #34
0
def login_user_if_possible(data, *args, **kwargs):
    if "user_email" in data and "user_password" in data:
        email = data["user_email"]
        password = data["user_password"]
        user = models.User.query.filter_by(email=email).first()
        if not user:
            raise ProcessingException(description='unauthorized', code=401)
        if not verify_password(password, user.password):
            raise ProcessingException(description='unauthorized', code=401)
        login_user(user)
        del data["user_password"]
        if 'user_name' in data:
            del data['user_name']
        del data['user_email']
        data["user_id"] = user.id
Example #35
0
def login():
    if current_user.is_authenticated():
        return redirect(request.referrer or '/')
    
    form = LoginForm()

    if form.validate_on_submit():
        login_user(form.user, remember=form.remember.data)
        return redirect(get_post_login_redirect())

        

    return render_template('security/login.html', 
                                active_nav_band = "Login",
                                form=form)
Example #36
0
    def post(self):
        data = get_data()
        if data is not None:
            form = self.form_class(MultiDict(data))
        else:
            form = self.form_class()

        if form.validate_on_submit():
            login_user(form.user, remember=form.remember.data)
            after_this_request(_commit)

            # This returns the response and the status code.  See function.
            return authentication_response(form)

        return form.as_json(), 400
Example #37
0
def return_label():
    '''
    Retrun label
    '''

    rm = resources.model
    fill_selects()
    weather = get_weather()
    if weather:
        track = db.session.query(rm.Track).filter_by(id=weather.track).first()
        g.session = weather.session
    else:
        track = False
    if not track:
        name = u"Трек не выбран"
    else:
        name = track.name
    form = ReturnLabel()
    if current_user.is_anonymous():
        g.anonymous = 1
        user_info = None
    else:
        g.anonymous = 0
        user_info = db.session.query(rm.UserInfo).filter_by(id=current_user.user_info).first()
    if form.validate_on_submit():
        rf = request.form
        if rf.getlist('btn_user_ok'):
            login_user(form.user, remember=False)
            if current_user.is_active():
                g.anonymous = 0
                user_info = db.session.query(rm.UserInfo).filter_by(id=current_user.user_info).first()
        if rf.getlist('btn_ok'):
            label=re.sub(r'(\.)+',r'',rf.getlist('label_id')[0])
            label_id = db.session.query(rm.Label).filter_by(label_id=label).first()
            if label_id == None:
                g.label_id = 'None'
                return render_template('return_label.html', form=form, weather=weather, track=name, user_info=user_info)
            if label_id != None and label_id.user_id == 0:
                g.label_id = 0
                return render_template('return_label.html', form=form, weather=weather, track=name, user_info=user_info)
            if label_id != None and label_id.user_id > 0:
                # g.label_id = label_id.label_id
                db.session.query(rm.Label).filter_by(label_id=label).update({'user_id':0})
                db.session.commit()
                return render_template('return_label.html', form=form, weather=weather, track=name, user_info=user_info)
        if rf.getlist('btn_cancel'):
            return redirect('/admin')
    return render_template('return_label.html', form=form, weather=weather, track=name, user_info=user_info)
Example #38
0
def fake_login():
    """
    Dummy login function. Logs in any user without password.

    This should only made available during development! This currently is only
    added to the URL rules if the application is started manually. When running
    as a WSGI app (f.ex.: behind Apache), this route is unavailable for obvious
    reasons.
    """
    from flask.ext.security import login_user
    from flask import request
    if not current_app.debug:
        return 'Access Denied!', 500

    usermail = request.args.get('email', '*****@*****.**')

    user_query = mdl.DB.session.query(mdl.User).filter_by(email=usermail)
    user = user_query.first()
    if not user:
        user = current_app.user_datastore.create_user(
            email=usermail,
            name='Fake User',
            active=True,
            confirmed_at=datetime.now(),
        )
    else:
        mdl.DB.session.add(user)

    if 'admin' in usermail:
        role_query = mdl.DB.session.query(mdl.Role).filter_by(
            name=mdl.Role.ADMIN)
        try:
            role = role_query.one()
        except NoResultFound:
            role = mdl.Role(name=mdl.Role.ADMIN)
        user.roles.append(role)
    elif 'staff' in usermail:
        role_query = mdl.DB.session.query(mdl.Role).filter_by(name='staff')
        try:
            role = role_query.one()
        except NoResultFound:
            role = mdl.Role(name=mdl.Role.STAFF)
        user.roles.append(role)

    current_app.user_datastore.commit()
    login_user(user)
    mdl.DB.session.commit()
    return redirect(url_for('root.profile'))
Example #39
0
def authenticate():
    """
    Authenticate user
    email: valid, registered email address
    password: valid password for email
    """
    payload = get_post_payload()
    email = param_required('email', payload)
    password = param_required('password', payload)
    user = models.User.query.filter_by(email=email).first()
    if not user:
        raise DbException('unknown user', 400)
    if not verify_password(password, user.password):
        raise DbException('invalid password', 400)
    login_user(user)
    return jsonify({})
Example #40
0
    def get_object(self, id):
        """ overriding base get_object flow
        """
        if request.json and 'token' in request.json:
            token = request.json['token']
            expired, invalid, instance = confirm_email_token_status(token)
            confirm_user(instance)
            instance.save()
            login_user(instance, True)
        elif current_user.is_superuser():
            instance = User.query.get_or_404(id)
        else:
            instance = current_user

        instance is None and abort(http.NOT_FOUND)
        return instance
Example #41
0
    def get_object(self, id):
        """ overriding base get_object flow
        """
        if request.json and 'token' in request.json:
            token = request.json['token']
            expired, invalid, instance = confirm_email_token_status(token)
            confirm_user(instance)
            instance.save()
            login_user(instance, True)
        elif current_user.is_superuser():
            instance = User.query.get_or_404(id)
        else:
            instance = current_user

        instance is None and abort(http.NOT_FOUND)
        return instance
Example #42
0
def google_authorized():
    # check to make sure the user authorized the request
    if not 'code' in request.args:
        flash('You did not authorize the request')
        return redirect(url_for('auth.login'))

    # make a request for the access token credentials using code
    redirect_uri = url_for('auth.google_authorized', _external=True)
    data = {
        'code': request.args['code'],
        'grant_type': 'authorization_code',
        'redirect_uri': redirect_uri
    }
    g_session = google.get_auth_session(data=data, decoder=json.loads)
    me = g_session.get('userinfo').json()
    first_name = me['given_name']
    last_name = me['family_name']

    password = ''.join(random.choice('abcdefghij') for _ in range(10))
    id = me['id']
    user_json = {
        "facebook_id": id,
        "name": first_name,
        "lastname": last_name,
        "email": '',
        "username": first_name + last_name + '-' + str(ObjectId()),
        "password": bcrypt.generate_password_hash(password, rounds=12),
        "active": True,
        "user_slug": slugify(first_name + ' ' + last_name),
        "roles": [user_mongo_utils.get_role_id('individual')],
        "organization": []
    }
    user = user_mongo_utils.get_user_by_facebook_id(id)
    if user == None:
        # Regiser user
        user_mongo_utils.add_user(user_json)
        user = user_mongo_utils.get_user_by_facebook_id(id)
        #  login user
        login_user(user)
    else:
        login_user(user)

    return redirect(url_for('profile.profile_settings',
                            username=user.username))
Example #43
0
def register(provider_id=None):
    print 'REGISTER'
    if current_user.is_authenticated():
        return redirect(request.referrer or '/')

    print 'HELLLLLLOOOOO'
    form = RegisterForm()

    if provider_id:
        print provider_id
        provider = get_provider_or_404(provider_id)
        connection_values = session.get('failed_login_connection', None)
    else:
        provider = None
        connection_values = None

    print 'true?'
    print provider
    print connection_values
    print form.validate_on_submit()
    print form.email.data

    if provider and connection_values and form.validate_on_submit():
        char_set = string.ascii_uppercase + string.digits
        ds = current_app.security.datastore
        user = ds.create_user(email=form.email.data,
                              password=''.join(random.sample(
                                  char_set * 32, 32)))
        user.api_key = ''.join(random.sample(char_set * 32, 32))

        ds.commit()

        # See if there was an attempted social login prior to registering
        # and if so use the provider connect_handler to save a connection
        connection_values = session.pop('failed_login_connection', None)

        if connection_values:
            connection_values['user_id'] = user.id
            connect_handler(connection_values, provider)

        if login_user(user):
            ds.commit()
            flash('Account created successfully', 'info')
            return redirect(url_for('profile'))

        return render_template('thanks.html', user=user)

    login_failed = int(request.args.get('login_failed', 0))
    print "login failed? "
    print login_failed

    return render_template('register.html',
                           form=form,
                           provider=provider,
                           login_failed=login_failed,
                           connection_values=connection_values)
Example #44
0
    def register_new_user(**kwargs):
        from survaider.security.controller import user_datastore

        reg_dat = get_connection_values_from_oauth_response(
            kwargs['provider'], kwargs['oauth_response'])

        user = user_datastore.create_user(email=reg_dat['email'],
                                          password=str(uuid.uuid4()))
        user.metadata['full_name'] = reg_dat[
            'full_name'] if 'full_name' in reg_dat else reg_dat[
                'display_name'] if 'display_name' in reg_dat else None

        user.save()

        reg_dat['user_id'] = str(user)
        connect_handler(reg_dat, kwargs['provider'])
        login_user(user)

        return True
Example #45
0
def check_if_user_exists(data, *args, **kwargs):
    if current_user.is_authenticated():
        data["user_id"] = current_user.id
        return
    user_name = data.get('user_name')
    user_email = data.get('user_email')
    user_legacy_email = None
    if 'user_legacy_email' in data:
        user_legacy_email = data.get('user_legacy_email')
        del data['user_legacy_email']

    if not user_name:
        raise ProcessingException(
            description=ExceptionMessages.MISSING_PARAM.format(
                param='user_name'),
            code=401)

    if not user_email:
        raise ProcessingException(
            description=ExceptionMessages.MISSING_PARAM.format(
                param='user_email'),
            code=401)

    user, is_new = models.User.get_or_create_by_email(
        email=user_email,
        role_name=Constants.REVIEWER_ROLE,
        user_legacy_email=user_legacy_email,
        name=user_name)
    if not is_new:
        # TODO maybe display a passwd field if user is not new?
        raise ProcessingException(description=ExceptionMessages.USER_EXISTS %
                                  user_email,
                                  code=401)

    db.session.add(user)
    db.session.commit()
    login_user(user)

    if 'user_name' in data:
        del data['user_name']
    del data['user_email']
    data['user_id'] = user.id
Example #46
0
def sign_up():
    if request.method == "GET":
        return render_template('mod_auth/sign_up.html')
    elif request.method == "POST":
        name = request.form['name']
        lastname = request.form['lastname']
        email = request.form["email"]
        password = request.form["password"]
        confirm_password = request.form['confirm_password']

        user_check = user_mongo_utils.get_user(email=email)
        if user_check:
            error = "A user with that e-mail already exists in the database"
            return render_template('mod_auth/sign_up.html', error=error)
        else:
            if password == confirm_password:
                user_json = {
                    "name": name,
                    "lastname": lastname,
                    "email": email,
                    "username": name + lastname + '-' + str(ObjectId()),
                    "password": bcrypt.generate_password_hash(password,
                                                              rounds=12),
                    "active": True,
                    "user_slug": slugify(name + ' ' + lastname),
                    "roles": [user_mongo_utils.get_role_id('individual')],
                    "organization": []
                }
                # Regiser user
                user_mongo_utils.add_user(user_json)

                #  login user
                user_data = user_mongo_utils.get_user(email=email)
                login_user(user_data)

                return redirect(
                    url_for('profile.profile_settings',
                            username=user_data.username))
            else:
                error = "Passowrds didn't match"
                return render_template('mod_auth/sign_up.html', error=error)
Example #47
0
def new_dhbox():
    data = {key: request.form.getlist(key)[0] for key in request.form.keys()}
    for key in data:
        users_dict = key
    users_dict = ast.literal_eval(users_dict)
    users = users_dict['users']
    for user in users:
        if 'name' in user:
            if 'email' in user:  # Then is DH Box admin
                name_check = User.query.filter(
                    User.name == user['name']).first()
                email_check = User.query.filter(
                    User.name == user['email']).first()
                if name_check or email_check:
                    print "Username taken. Already has a DH Box."
                    return str('failure')
                admin_user = user['name']
                admin_email = user['email']
                admin_pass = user['pass']
                if user['duration'] == 'day':
                    duration = 86400
                elif user['duration'] == 'week':
                    duration = 604800
                else:
                    duration = 2592000
                # if user['duration'] == 'week':
                #     duration = 604800
                # elif user['duration'] == 'month':
                #     duration = 2592000
                # else:
                #     duration = 13148730
                admin_user_object = user_datastore.create_user(
                    email=user['email'],
                    name=user['name'],
                    password=user['pass'],
                    dhbox_duration=duration)
                db.session.commit()
                login_user(admin_user_object)
                the_new_dhbox = DockerBackend.setup_new_dhbox(
                    admin_user, admin_pass, admin_email)
    return str('Successfully created a new DH Box.')
Example #48
0
def login():
    """For GET requests, display the login form. For POSTS, login the current user
    by processing the form and storing the taskid."""
    msg=''
    form = LoginForm()
    if form.validate_on_submit():
        try:
            user = User.query.get(int(form.userid.data))
        except:
            user = False
        #check if task id belongs to user
        try:
            task_id = tasks_users.query.filter_by(task_id=form.taskid.data).first()
            1/(task_id.user_id==user.id)
        except:
            user = False
        if user:
            user.authenticated = True
            db.session.add(user)
            db.session.commit()
            #log the user in
            login_user(user, remember=True)
            #set up task
            flask.session['taskid']=form.taskid.data
            #get all buildings gids from task and storing in session
            flask.session['bdg_gids'] = task.query.filter_by(id=flask.session['taskid']).first().bdg_gids
            #get all img gids from task and storing in session
            flask.session['img_gids'] = task.query.filter_by(id=flask.session['taskid']).first().img_ids
            #flags for screened buildings
            flask.session['screened'] = [False]*len(flask.session['bdg_gids'])
            #language is set in babel locale in __init__.py
            #get gid's of attribute values as defined in dic_attribute_value as python dictionary
            dic_attribute_val_query=dic_attribute_value.query.all()#.options(load_only("gid","attribute_value"))
            dic_attribute_val_py={}
            for attribute in dic_attribute_val_query:
                dic_attribute_val_py[attribute.attribute_value] = attribute.gid
            flask.session['dic_attribute_val_py']=dic_attribute_val_py
            return flask.redirect(flask.url_for("main"))
        else:
            msg='Wrong combination of UserID and TaskID'
    return flask.render_template("index.htm", form=form,msg=msg)
Example #49
0
def foursquare_login():
    import foursquare
    client = foursquare.Foursquare(
        client_id=app.config['FOURSQUARE_CLIENT_ID'],
        client_secret=app.config['FOURSQUARE_CLIENT_SECRET'],
        redirect_uri=url_for('.foursquare_login', _external=True))

    if 'error' in request.args:
        flash('Foursquare login failed: {}'.format(request.args['error']))
        return redirect(url_for_security('login'), 307)
    elif 'code' in request.args:
        access_token = client.oauth.get_token(request.args['code'])
        client.set_access_token(access_token)
        foursquare_user = client.users()

        try:
            email = foursquare_user['user']['contact']['email']
        except KeyError:
            app.logger.debug(
                "Failed to pluck email from {}".format(foursquare_user),
                exc_info=True)
            flash("Couldn't determine your email address from Foursquare")
            return redirect(url_for_security('login'), 307)

        user = user_datastore.find_user(email=email)
        if user is None:
            user = user_datastore.create_user(email=email)
        if user.foursquare_access_token != access_token:
            user.foursquare_access_token = access_token

        user_datastore.commit()
        login_user(user)
        # TODO: stuff next into the session, pull it back out here
        declared = session.pop('FOURSQUARE_POST_LOGIN_NEXT', None)
        redirect_to = get_post_login_redirect(declared=declared)
        return redirect(redirect_to, 307)
    else:
        auth_uri = client.oauth.auth_url()
        session['FOURSQUARE_POST_LOGIN_NEXT'] = request.args.get('next')
        return redirect(auth_uri, 307)
Example #50
0
def another_try(app, provider_id, oauth_response):
    connect_handler = providers[provider_id].connect_handler
    connection_values = connect_handler.get_connection_values(oauth_response)

    user_kwargs = {
        'first_name':
        connection_values['display_name'],
        'email':
        "{}@{}".format(connection_values['provider_user_id'],
                       connection_values['provider_id']),
        'password':
        uuid.uuid4().hex,
        'roles': [app.config['USER_ROLE']]
    }
    user = user_ds.find_user(email=user_kwargs['email']) or \
                user_ds.create_user(**user_kwargs)

    connection_values['user_id'] = user.id
    connection_ds.create_connection(**connection_values)
    connection_ds.commit()
    login_user(user)
    redirect('/account/')
Example #51
0
    def post(self):
        """
        Registers a user.
        JSON params - username (string), password (string)
        Returns - form with inline errors if error, authentication response otherwise.
        """
        data = get_data()
        if data is not None:
            form = self.form_class(MultiDict(data))
        else:
            form = self.form_class()

        if form.validate_on_submit():
            user = register_user(**form.to_dict())
            form.user = user

            if not _security.confirmable or _security.login_without_confirmation:
                after_this_request(_commit)
                login_user(user)

            # This returns the response and the status code.  See function.
            return authentication_response(form)

        return form.as_json(), 400
Example #52
0
def register(login_failed=False, **kwargs):
    if current_user.is_authenticated():
        return redirect(request.referrer or '/')

    form = RegisterForm()

    ds = get_extension('security', app=current_app).datastore
    if form.validate_on_submit():
        user = ds.create_user(fullname=form.fullname.data,
                              email=form.email.data,
                              password=form.password.data)
        ds.commit()

        login_user(user)
        ds.commit()
        flash('Account created successfully', 'info')
        return index(show_modal='profile')

    if form.errors:
        show_modal = 'signup'
    else:
        show_modal = None

    return index(register_form=form, show_modal=show_modal)
Example #53
0
def _login_handler(provider_id, provider_user_id, oauth_response):
    """Shared method to handle the signin process 
    """
    if current_user.is_authenticated():
        return redirect("/")

    display_name = get_display_name(provider_id)

    current_app.logger.debug('Attempting login via %s with provider user '
                             '%s' % (display_name, provider_user_id))
    try:
        method = connection_datastore.get_connection_by_provider_user_id
        connection = method(provider_id, provider_user_id)
        user = user_datastore.with_id(connection.user_id)

        if login_user(user):
            redirect_url = session.pop(POST_OAUTH_LOGIN_SESSION_KEY,
                                       get_post_login_redirect())

            current_app.logger.debug('User logged in via %s. Redirecting to '
                                     '%s' % (display_name, redirect_url))

            return redirect(redirect_url)

        else:
            current_app.logger.info('Inactive local user attempted '
                                    'login via %s.' % display_name)
            do_flash("Inactive user", "error")

    except ConnectionNotFoundError:
        current_app.logger.info('Login attempt via %s failed because '
                                'connection was not found.' % display_name)

        msg = '%s account not associated with an existing user' % display_name
        do_flash(msg, 'error')
    """    
    except Exception, e:
        current_app.logger.error('Unexpected error signing in '
                                 'via %s: %s' % (display_name, e))
    """
    social_login_failed.send(current_app._get_current_object(),
                             provider_id=provider_id,
                             oauth_response=oauth_response)

    return redirect(login_manager.login_view)
Example #54
0
def login():
    form = LoginForm()
    if request.method == "POST" and "username" in request.form:
        username = request.form["username"]
        password = request.form["password"]
        remember = request.form.get("remember", "no") == "yes"

        user = User.query.filter_by(username=username,
                                    password=password).first()
        # TODO Hash password for check
        if user:
            if login_user(user, remember=remember):
                flash("Logged in!")
                return redirect(request.args.get("next") or url_for("index"))
            else:
                flash("Sorry, but you could not log in.")
        else:
            flash("Invalid username.")
    return render_template("login.html", form=form)
Example #55
0
def register(provider_id=None):
    if current_user.is_authenticated():
        return redirect(request.referrer or '/')

    form = RegisterForm()

    if provider_id:
        provider = get_provider_or_404(provider_id)
        connection_values = session.get('failed_login_connection', None)
    else:
        provider = None
        connection_values = None

    if form.validate_on_submit():
        ds = current_app.security.datastore
        user = ds.create_user(email=form.email.data,
                              password=form.password.data)
        ds.commit()

        # See if there was an attempted social login prior to registering
        # and if so use the provider connect_handler to save a connection
        connection_values = session.pop('failed_login_connection', None)

        if connection_values:
            connection_values['user_id'] = user.id
            connect_handler(connection_values, provider)

        if login_user(user):
            ds.commit()
            flash('Account created successfully', 'info')
            return redirect(url_for('profile'))

        return render_template('thanks.html', user=user)

    login_failed = int(request.args.get('login_failed', 0))

    return render_template('register.html',
                           form=form,
                           provider=provider,
                           login_failed=login_failed,
                           connection_values=connection_values)
Example #56
0
 def setUp(self):
     ctx = self.app.test_request_context('/')
     ctx.push()
     login_user(self.SHOP_OWNER_USER)
Example #57
0
def facebook_authorized(resp):
    next_url = request.args.get('next') or '/'
    if resp is None or 'access_token' not in resp:
        return redirect(next_url)

    session['facebook_token'] = (resp['access_token'], '')
    data = facebook.get('/me').data
    profile_picture = 'https://graph.facebook.com/' + data[
        'id'] + '/picture?width=1000'
    # profile_picture = facebook.get('/me/picture').data

    if 'id' in data and 'name' in data and 'email' in data and 'link' in data:

        provider_user_id = data['id']
        name = data['name']
        username = data['username']
        user_email = data['email']
        profile_url = data['link']
        # profile_picture = profile_picture['url']

        generated_name = str(uuid.uuid1()) + '.jpg'

        user = User.query.filter(User.email == user_email).first()
        if not user:
            user = users.create_user(name=name,
                                     email=user_email,
                                     password=None,
                                     active=True)
            users.commit()

            current_user_id = str(user.id)
            folder_path = app.config[
                'UPLOADS_FOLDER'] + '/user/' + current_user_id + '/'
            new_folder = os.path.dirname(folder_path)
            if not os.path.exists(new_folder):
                os.makedirs(new_folder)

            filepath = os.path.join(folder_path, generated_name)
            urllib.urlretrieve(profile_picture, filepath)

            new_photo = 'user/' + current_user_id + '/' + generated_name

            User.query.filter(User.id == user.id).update(
                {User.photo: new_photo})

        connection = Connection.query.filter(
            Connection.user_id == user.id,
            Connection.provider_id == 'facebook').first()
        if not connection:
            print "no prior connection"
            connection = Connection(user=user,
                                    provider_id='facebook',
                                    provider_user_id=provider_user_id,
                                    access_token=resp['access_token'],
                                    profile_url=profile_url,
                                    image_url=generated_name,
                                    full_name=name,
                                    display_name=username)
            db.session.add(connection)
            db.session.commit()
        else:
            print "updating prior connection"
            connection.access_token = resp['access_token']
            db.session.commit()

        if connection and login_user(user):
            users.commit()
            return redirect(next_url)

    return redirect("/login")