Пример #1
0
def facebook_posts(user_id):
    """ 获取 Facebook posts

    API: https://developers.facebook.com/docs/graph-api/reference/v3.2/user/feed
    """
    user = load_user(user_id)

    if not facebook.authorized:
        return redirect(url_for('facebook.login'))

    last_post = models.FacebookPost.query.filter_by(user=user).order_by(
        models.FacebookPost.created_at.desc()).first()

    if last_post:
        last_post_time = pendulum.instance(last_post.created_at).timestamp()
        resp = facebook.get('v3.2/me/feed?since={}'.format(last_post_time))
    else:
        resp = facebook.get('v3.2/me/feed')

    if not resp.ok:
        app.logger.error(resp.json())
        return jsonify(resp.json())

    posts = resp.json()['data']

    for post in posts:
        created_at = pendulum.parse(post['created_time'])

        try:
            fb = db.session.query(
                models.FacebookPost).filter_by(post_id=post['id']).one()

        except NoResultFound:
            fb = models.FacebookPost(post_id=post['id'],
                                     created_at=created_at,
                                     detail=json.dumps(post),
                                     api_url=resp.url,
                                     user=user)
            db.session.add(fb)
            db.session.commit()
            if json.loads(fb.detail).get('message'):
                result = azure(fb.id, json.loads(fb.detail)['message'])
                for row in result['documents']:
                    print('======== create sentiment ')
                    sentiment = models.Sentiment(score=row['score'],
                                                 language='en')
                    db.session.add(sentiment)
                    db.session.commit()
                fb.sentiment = sentiment
                fb.sentiment_id = sentiment.id
                db.session.add(fb)
                db.session.commit()

    return jsonify({"msg": "success"})
Пример #2
0
def main():
    try:    
        print "*" * 80
        resp = facebook.get('/me?fields=email')
        credentials_dict = resp.json()
        email = str(credentials_dict[unicode('email')])
        id = int(credentials_dict[unicode('id')])    
        print email    
        print id    
        try:
            new_user = User(id, '*****@*****.**')
            db.session.add(new_user)
            db.session.commit()
            return render_template('main_page_not_previously_registered.html',
                                    user=email,
                                    user_id=id,
                                    navbar=NAVBAR)
                        
        except IntegrityError:
            db.session.rollback()          
            return render_template('main_page_logged_in.html',
                                    user=email,
                                    user_id=id,
                                    navbar=NAVBAR)
    except KeyError:
        return render_template('main_page_not_logged_in.html')
Пример #3
0
def facebook_login():
    if not facebook.authorized:
        return redirect(url_for('facebook.login'))
    response = facebook.get('/me')
    #assert resp.ok, resp.text
    print(response.json())
    return "You are @{login} on facebook".format(login=response.json()['name'])
Пример #4
0
 def callback(self):
     resp = facebook.get('me?fields=id,first_name,email').json()
     try:
         return resp['id'], resp['first_name'], resp['email']
     except KeyError:
         flash(resp)
         return None, None, None
Пример #5
0
def facebook_login():
    if current_user.is_authenticated and facebook.authorized:
        return redirect(url_for('profile'))
    if (not facebook.authorized) and (not current_user.is_authenticated):
        return redirect(url_for('facebook.login'))
    try:
        account_info = facebook.get('me?fields=id,first_name,email')
        if account_info.ok:
            with open("errorlog.log", "a+") as cricket:
                cricket.write(str(account_info) + "\n")
        if account_info.ok:
            account_info_json = account_info.json()
            email = account_info_json["email"]
            f_name = account_info_json["first_name"]
            #login_method = "google"
            user = User.query.filter_by(email=email).first()
            if user is None:
                user = User(email=email, f_name=f_name)
                db.session.add(user)
                db.session.commit()
            login_user(user)
            current_user.login_method = "facebook"
            flash("Signed in with Facebook")
            return redirect(url_for('profile'))
    except (InvalidGrantError, TokenExpiredError) as e:
        return redirect(url_for('facebook.login'))
    return redirect(url_for('profile'))
Пример #6
0
 def callback(self):
     resp = facebook.get('me?fields=id,first_name,email').json()
     try:
         return resp['id'], resp['first_name'], resp['email']
     except KeyError:
         flash(resp)
         return None, None, None
Пример #7
0
def login_facebook():
    if not facebook.authorized:
        return redirect(url_for("facebook.login"))
    resp = facebook.get("me?fields=id,name,email,first_name,short_name")
    if resp.ok:
        name = resp.json()["name"]
        email = resp.json()["email"]
        username = resp.json()["short_name"]
        oauth_id = resp.json()["id"]
        
        # Create cursor
        cur = mysql.connection.cursor()
        # Get user by email
        result = cur.execute("SELECT * FROM users WHERE email =%s AND oauth_id=%s", [email,oauth_id])
        if result>0:
            print "THIS WORKSSSSSSSSSSSSSSSS"
            # data = cur.fetchone()
            session['logged_in'] = True
            session['username'] = username
            # Close connection
            cur.close()
            flash('You are now logged in via Facebook','success')
            return redirect(url_for('dashboard'))
        else:
            # Execute Query
            cur.execute("INSERT INTO users(name, email, username, oauth_id) VALUES(%s, %s, %s, %s)", (name, email, username, oauth_id))
            # Commit to DB
            mysql.connection.commit()
            # Close connection
            cur.close()

            session['logged_in'] = True
            session['username'] = username
            flash('Successfully registered via Facebook','success')
            return redirect(url_for('dashboard'))
Пример #8
0
def logged_in(blueprint, token):
    from .models import User
    if blueprint.name == "facebook":
        resp = facebook.get("/me?fields=name,first_name,email")
        email = resp.json()["email"]
        f_name = resp.json()["first_name"]
        account_type = "facebook"
    elif blueprint.name == "github":
        user_info = github.get("/user")
        user_email = github.get("/user/emails")
        email = user_email.json()[0]["email"]
        f_name = user_info.json()["name"]
        account_type = "github"
    elif blueprint.name == "gitlab":
        resp = gitlab.get("user")
        email = resp.json()["email"]
        f_name = resp.json()["name"].split()[0]
        account_type = "gitlab"
    user = User.query.filter_by(email=email).first()
    if not user:
        user = User(email=email, f_name=f_name)
        user.account_type = account_type
        try:
            db.session.add(user)
            db.session.commit()
        except Exception as err:
            db.session.rollback()
            print(err)
    login_user(user)
    g.user = user
    flash(_("You have been logged in."), category="success")
Пример #9
0
    def get_username():
        try:
            current_app.logger.info('auth.get_username')
            oauth = OAuthSignIn.get_provider('facebook')
            social_id, username, email = oauth.callback()
            current_app.logger.info(
                'from callback id: %s username: %s email: %s', social_id,
                username, email)

            resp = facebook.get('/me?fields=id,name,email,picture')

            def dump(obj):
                'dump object attributes'
                for attr in dir(obj):
                    current_app.logger.info('obj.%s = %r' %
                                            (attr, getattr(obj, attr)))

            dump(resp)

            if resp.status_code != 200:
                logout_user()
                return 'Unauthorized', 401
            return jsonify({'username': username})
        except Exception as ex:
            current_app.logger.info(
                'failed to get username for current user %s', ex)
            raise ex
Пример #10
0
def getUserNameOfGithub():
    if facebook.authorized:
        resp = facebook.get("/me?fields=gender,birthday")
        id = resp.json()["id"]
        return resp.json()["birthday"]
    else:
        return "<h1> you are not logged in</h1>"
Пример #11
0
def login():
    if not facebook.authorized:
        return redirect(url_for("facebook.login"))
    resp = facebook.get("account/settings.json")
    assert resp.ok
    return "You are @{screen_name} on facebook".format(
        screen_name=resp.json()["screen_name"])
Пример #12
0
def facebook_login():
    if not facebook.authorized:
        return redirect(url_for('facebook.login'))

    resp = facebook.get("/oauth2/v2/userinfo")
    assert resp.ok, resp.text

    return '<h1>Your Facebook email is @{}</h1>'.format(resp.json()['email'])
Пример #13
0
def oauth_facebook():
    if not facebook.authorized:
        return redirect(url_for("facebook.login"))
    resp = facebook.get("/me")
    assert resp.ok, resp.text
    session['username'] = resp.json()["name"]
    session['oauth_source'] = 'facebook'
    return redirect("/commentary/list/")
def index():
    if not facebook.authorized:
        print("Try to OAuth login :"******"facebook.login"))
    print("Authorized already")
    resp = facebook.get("/me")
    assert resp.ok, resp.text
    #return "You are {name} on Facebook, more detail{detail}".format(name=resp.json()["name"], detail=resp.json())
    return render_template('h1.html')
Пример #15
0
def me():
    if not facebook.authorized:
        return abort(404)

    me = facebook.get('/me').json()
    user = find_or_create_user(me['id'], me['name'])
    login(user)

    return jsonify(_strid(user))
Пример #16
0
def facebook_login():
    if not facebook.authorized:
        return redirect(url_for('facebook.login'))
    resp = facebook.get('/oauth2/v2/userinfo')
    assert resp.ok, resp.text

    username = resp.json()['email']
    if not users.find_one({"username": username}):
        users.insert_one({"username": username, "words": []})
    return make_json_response({"username": username}, 200)
Пример #17
0
def facebook_auth(facebook_blueprint, token):
    """ Facebook 登录 """
    if not token:
        return False

    resp = facebook.get('me')

    if not resp.ok:
        return jsonify(resp.json())

    fb_name = resp.json()['name']
    fb_id = resp.json()['id']

    # Find this OAuth token in the database, or create it
    query = models.OAuth.query.filter_by(
        provider=facebook_blueprint.name,
        provider_user_id=fb_id,
    )

    try:
        # 查找用户授权
        oauth = query.one()
    except NoResultFound:
        # 创建 OAuth
        oauth = models.OAuth(
            provider=facebook_blueprint.name,
            provider_user_id=fb_id,
        )

    if oauth.user:
        login_user(oauth.user)
        # flash("Successfully signed in with Facebook.")

    else:
        # Create a new local user account for this user
        user = models.User(username=fb_name)
        # Associate the new local user account with the OAuth token
        oauth.user = user
        # Save and commit our database models
        db.session.add_all([user, oauth])
        db.session.commit()
        # Log in the new local user account
        login_user(oauth.user)
        # flash("Successfully signed in with Facebook.")

    # 更新 token
    actions.update_oauth_token(oauth, token)

    # 更新获取 posts
    print('=== get user posts')
    facebook_posts(oauth.user.id)

    return redirect('/#/index?name={}&id={}'.format(oauth.user.username,
                                                    oauth.user.id))
Пример #18
0
def facebook_login():
    if not facebook.authorized:
        return redirect(url_for('facebook.login'))
    account_info = facebook.get('public_profile.json')

    if account_info.ok:
        account_info_json = account_info.json()
        return '<h1> Your Facebook name is @{}</h1>'.format(
            account_info_json['name'])

    return '<h1>Request failed!</h1>'
Пример #19
0
def facebook_login():
    if not facebook.authorized:
        return redirect(url_for("facebook.login"))
    resp = facebook.get("/me?fields=name,email")
    user = User.query.filter_by(username=resp.json()["email"]).first()
    if not user:
        user = User(resp.json()["email"], '')
        db.session.add(user)
        db.session.commit()
    login_user(user)
    flash("Login in as name=%s using Facebook login" % (resp.json()['name']), 'success')
    return redirect(request.args.get('next', url_for('auth.routine')))
Пример #20
0
def connect_facebook():
    page_referrer = request.referrer
    if not facebook.authorized:
        return redirect(url_for("facebook.login"))
    resp = facebook.get("/me?fields=id,name,email,picture")
    assert resp.ok
    current_profile = UserProfile(
        name="{val}".format(val=resp.json()['name']),
        oauth_provider='facebook',
        picture_url="{val}".format(val=resp.json()['picture']['data']['url']))
    session['current_profile'] = current_profile.to_json()
    return redirect(page_referrer)
Пример #21
0
def test_context_local(make_app):
    responses.add(responses.GET, "https://google.com")

    # set up two apps with two different set of auth tokens
    app1 = make_app(
        "foo1",
        "bar1",
        redirect_to="url1",
        storage=MemoryStorage({"access_token": "app1"}),
    )
    app2 = make_app(
        "foo2",
        "bar2",
        redirect_to="url2",
        storage=MemoryStorage({"access_token": "app2"}),
    )

    # outside of a request context, referencing functions on the `facebook` object
    # will raise an exception
    with pytest.raises(RuntimeError):
        facebook.get("https://google.com")

    # inside of a request context, `facebook` should be a proxy to the correct
    # blueprint session
    with app1.test_request_context("/"):
        app1.preprocess_request()
        facebook.get("https://google.com")
        request = responses.calls[0].request
        assert request.headers["Authorization"] == "Bearer app1"

    with app2.test_request_context("/"):
        app2.preprocess_request()
        facebook.get("https://google.com")
        request = responses.calls[1].request
        assert request.headers["Authorization"] == "Bearer app2"
Пример #22
0
def test_context_local(make_app):
    responses.add(responses.GET, "https://google.com")

    # set up two apps with two different set of auth tokens
    app1 = make_app(
        "foo1",
        "bar1",
        redirect_to="url1",
        storage=MemoryStorage({"access_token": "app1"}),
    )
    app2 = make_app(
        "foo2",
        "bar2",
        redirect_to="url2",
        storage=MemoryStorage({"access_token": "app2"}),
    )

    # outside of a request context, referencing functions on the `facebook` object
    # will raise an exception
    with pytest.raises(RuntimeError):
        facebook.get("https://google.com")

    # inside of a request context, `facebook` should be a proxy to the correct
    # blueprint session
    with app1.test_request_context("/"):
        app1.preprocess_request()
        facebook.get("https://google.com")
        request = responses.calls[0].request
        assert request.headers["Authorization"] == "Bearer app1"

    with app2.test_request_context("/"):
        app2.preprocess_request()
        facebook.get("https://google.com")
        request = responses.calls[1].request
        assert request.headers["Authorization"] == "Bearer app2"
Пример #23
0
def handleSession():
    authed = False
    if ("userEmail" in session and "userAvatar" in session
            and "userName" in session):
        authed = True
        userEmail = session["userEmail"]
    elif ("userEmail" in session or "userAvatar" in session
          or "userName" in session):
        session.clear()
    if twitter.authorized and not authed:
        resp = twitter.get("account/verify_credentials.json",
                           params={"include_email": "true"})
        if resp.ok:
            authed = True
            resp_json = resp.json()
            userName = resp_json["screen_name"]
            userEmail = resp_json["email"]
            userAvatar = resp_json["profile_image_url"]
    elif facebook.authorized and not authed:
        resp = facebook.get("/me?fields=id,name,email,picture,birthday")
        if resp.ok and resp.text:
            authed = True
            resp_json = resp.json()
            userName = resp_json["name"]
            userEmail = ""
            if "email" in resp_json:
                userEmail = resp_json["email"]
            userAvatar = resp_json["picture"]["data"]["url"]
    elif github.authorized and not authed:
        resp = github.get('/user')
        if resp.ok:
            authed = True
            resp_json = resp.json()
            userName = resp_json["login"]
            userEmail = resp_json["email"]
            userAvatar = resp_json["avatar_url"]
    if authed and userEmail:
        res = dbComms.userCheck(db, userEmail)
        if res == False:
            dbComms.userCreate(db, userName, userEmail, userAvatar)
        if "userName" not in session or "userEmail" not in session:
            user = dbComms.userGetByEmail(db, userEmail)
            session["userName"] = user.username
            session["userEmail"] = userEmail
            session["userAvatar"] = user.avatarUrl
            session["creationDate"] = user.creationDate
    if "warning" in session:
        session["warningMsg"] = session["warning"]
        session["warning"] = warnings.noWarning()
    else:
        session["warningMsg"] = warnings.noWarning()
        session["warning"] = warnings.noWarning()
def logged_in(blueprint, token):
    from .models import User
    if blueprint.name == 'twitter':
        username = session.get('twitter_oauth_token').get('screen_name')
    elif blueprint.name == 'facebook':
        resp = facebook.get("/me")
        username = resp.json()['name']
    user = User.objects(username=username)[0]
    if not user:
        user = User()
        user.username = username
        user.save()
    login_user(user)
    flash("You have been logged in.", category="success")
def logged_in(blueprint, token):
    from .models import db, User
    if blueprint.name == 'twitter':
        username = session.get('twitter_oauth_token').get('screen_name')
    elif blueprint.name == 'facebook':
        resp = facebook.get("/me")
        username = resp.json()['name']
    user = User.query.filter_by(username=username).first()
    if not user:
        user = User()
        user.username = username
        db.session.add(user)
        db.session.commit()
    login_user(user)
    flash("You have been logged in.", category="success")
Пример #26
0
def facebook_login():
    if not facebook.authorized:
        return redirect(url_for('facebook.login'))

    account_info = facebook.get('/me')
    if account_info.ok:
        print("access_token: ", facebook.access_token)
        me = account_info.json()
        session['logged_in'] = True
        session['facebook_token'] = facebook.access_token
        session['user'] = me['name']
        session['user_id'] = me['id']
        return redirect(url_for('main'))

    return redirect(url_for('login'))
Пример #27
0
def fblogin():
    if not facebook.authorized:
        return redirect(url_for("facebook.login"))
    resp = facebook.get("/me")
    assert resp.ok, resp.text
    name = resp.json()["name"]
    username=name
    print(resp.json())
    fbid = resp.json()["id"]
    if lg.checkUsers(name):
        print("logged in")
    else: 
        lg.insertUser(name,"- ","-",fbid)

    return redirect(url_for('home'))
Пример #28
0
    def facebook_logged_in(bp, token):
        if not token:
            flash('Fail to login with facebook')
            return False

        resp = facebook.get('/me?fields=email,name,picture')
        if not resp.ok:
            flash('Fail to get user profile form facebook', category="error")
            return False

        # example response
        '''
        {
            'email': '*****@*****.**',

            'picture': {'data': {'height': 50,
                        'is_silhouette': False,
                        'url': 'https://image_url',
                        'width': 50}},
            'id': '128371982371892'
        }
        '''

        user_info = resp.json()
        picture = None
        try:
            picture = user_info.get('picture').get('data').get('url')
        except:
            pass

        try:
            ok = _save_and_login_user(user_id=user_info.get('id'),
                                      user_name=user_info.get('name'),
                                      email=user_info.get('email'),
                                      picture=picture,
                                      token=token,
                                      provider_name=fb_blueprint.name)
            if ok:
                flash("Successfully signed in with Facebook.")

        except Exception as e:
            current_app.logger.error(
                "[Flask Dance: facebook] cannot save and login user %s" %
                str(e))
            db.session.rollback()

        # prevent flask-dance trigger twice
        return False
Пример #29
0
def facebook_login():
    if not facebook.authorized:
        return redirect(url_for('facebook.login'))
    account_info = facebook.get('/me?fields=id,email,name')

    if account_info.ok:
        account_info_json = account_info.json()
        user = UserModel()
        user.email = account_info_json['email']
        user.save()

        ser_data = user_schema.dump(user).data
        token = Auth.generate_token(ser_data.get('id'))
        return custom_response({'jwt_token': token}, 200)

    return custom_response('Resigter facebook failed', 500)
Пример #30
0
    def callback(provider):
        current_app.logger.info('callback/provider')
        if not current_user.is_anonymous:
            return redirect('/')
        oauth = OAuthSignIn.get_provider(provider)
        social_id, username, email = oauth.callback()
        if social_id is None:
            flash('Authentication failed.')
            return redirect('/')

        resp = facebook.get('/me?fields=id,name,email,picture')

        def dump(obj):
            for attr in dir(obj):
                current_app.logger.info('obj.%s = %r' %
                                        (attr, getattr(obj, attr)))

        dump(resp)
        current_app.logger.info(social_id)
        current_app.logger.info(username)
        current_app.logger.info(email)

        if not is_in_whitelist(email):
            raise NotAuthorizedException(username)

        user = None

        database = current_app.cache.get('db')
        users = database.get_user(social_id)
        if users is not None and len(users) != 0:
            user = users[0]

        if not user:
            current_app.logger.info(
                'create the user and insert it into the database.')
            current_app.logger.info('profile: username:%s\nsocial_id:%s\n',
                                    username, social_id)

            user = AppUser(social_id, username)

            current_app.logger.info('updating cache with user')
            database.insert_user(user)
            current_app.cache.set('db', database)

        login_user(AppUser(social_id, username), True)
        return redirect('/')
Пример #31
0
def login_facebook():
    if not facebook.authorized:
        return redirect(url_for('facebook.login'))
    response = facebook.get('/me?fields=name,email, id')
    user = User.query.filter_by(email=response.json()['email']).first()
    if not user:
        user = User(email=response.json()['email'],
                    username=response.json()['email'].split('@')[0],
                    social='facebook$' + response.json()['id'])
        db.session.add(user)
        db.session.commit()
        redirect(url_for('home'))
        flash(
            f"AWesome. You have logged in as {response.json()['email'].split('@')[0]}",
            'success')
    login_user(user)
    flash(f'Welcome back, {user.username}.')
    return redirect(url_for('home'))
Пример #32
0
def _get_user_info():
    """Gets user's info from facebook, then query db to extract various fields."""
    # get facebook account info

    json = facebook.get("/me").json()
    user_id = json['id']
    name = json['name']
    fb_info = user_id + "|" + name

    # some logging
    date_now = time.strftime("%Y-%m-%d")
    time_now = time.strftime("%Y-%m-%d_%H%M%S")
    print(f"[*] {time_now} -",
          fb_info,
          "logged",
          file=open(f"logs/{date_now}.log", "a"))
    print(f"[*] {time_now} -", fb_info, "logged")
    user = Database.get_user_by_fb_info(fb_info)
    return user
Пример #33
0
def facebook_login():
    """
        App is in development mode
        use test user credentials
        email: [email protected]
        password: admin@123
    """
    if not facebook.authorized:
        return redirect(url_for('facebook.login'))
    account_info = facebook.get('me?fields=id,name,email')
    #    print(account_info)
    if account_info.ok:
        account_info_json = account_info.json()
        user = {}
        user['email'] = account_info_json['email']
        user['firstName'] = account_info_json['name'].split()[0]
        user['lastName'] = account_info_json['name'].split()[1]
        return third_party_user_handler(user['email'], user['firstName'],
                                        user['lastName'], 'facebook')