Пример #1
0
def auth_callback():
    # Put together params for token request
    code = flask.request.args['code']
    context = flask.request.args['context']
    scope = flask.request.args['scope']
    store_hash = context.split('/')[1]
    redirect = app.config['APP_URL'] + flask.url_for('auth_callback')

    # Fetch a permanent oauth token. This will throw an exception on error,
    # which will get caught by our error handler above.
    client = BigcommerceApi(client_id=client_id(), store_hash=store_hash)
    token = client.oauth_fetch_token(client_secret(), code, context, scope,
                                     redirect)
    bc_user_id = token['user']['id']
    email = token['user']['email']
    access_token = token['access_token']

    # Create or update store
    store = Store.query.filter_by(store_hash=store_hash).first()
    if store is None:
        store = Store(store_hash, access_token, scope)
        db.session.add(store)
        db.session.commit()
    else:
        store.access_token = access_token
        store.scope = scope
        db.session.add(store)
        db.session.commit()
        # If the app was installed before, make sure the old admin user is no longer marked as the admin
        oldadminuser = StoreUser.query.filter_by(store_id=store.id,
                                                 admin=True).first()
        if oldadminuser:
            oldadminuser.admin = False
            db.session.add(oldadminuser)

    # Create or update global BC user
    user = User.query.filter_by(bc_id=bc_user_id).first()
    if user is None:
        user = User(bc_user_id, email)
        db.session.add(user)
    elif user.email != email:
        user.email = email
        db.session.add(user)

    # Create or update store user
    storeuser = StoreUser.query.filter_by(user_id=user.id,
                                          store_id=store.id).first()
    if not storeuser:
        storeuser = StoreUser(store, user, admin=True)
    else:
        storeuser.admin = True
    db.session.add(storeuser)
    db.session.commit()

    # Log user in and redirect to app home
    flask.session['storeuserid'] = storeuser.id
    return flask.redirect(app.config['APP_URL'])
def auth_callback():
    # Put together params for token request
    code = flask.request.args['code']
    context = flask.request.args['context']
    scope = flask.request.args['scope']
    store_hash = context.split('/')[1]
    redirect = app.config['APP_URL'] + flask.url_for('auth_callback')

    # Fetch a permanent oauth token. This will throw an exception on error,
    # which will get caught by our error handler above.
    client = BigcommerceApi(client_id=client_id(), store_hash=store_hash)
    token = client.oauth_fetch_token(client_secret(), code, context, scope, redirect)
    bc_user_id = token['user']['id']
    email = token['user']['email']
    access_token = token['access_token']

    # Create or update store
    store = Store.query.filter_by(store_hash=store_hash).first()
    if store is None:
        store = Store(store_hash, access_token, scope)
        db.session.add(store)
        db.session.commit()
    else:
        store.access_token = access_token
        store.scope = scope
        db.session.add(store)
        db.session.commit()
        # If the app was installed before, make sure the old admin user is no longer marked as the admin
        oldadminuser = StoreUser.query.filter_by(store_id=store.id, admin=True).first()
        if oldadminuser:
            oldadminuser.admin = False
            db.session.add(oldadminuser)

    # Create or update global BC user
    user = User.query.filter_by(bc_id=bc_user_id).first()
    if user is None:
        user = User(bc_user_id, email)
        db.session.add(user)
    elif user.email != email:
        user.email = email
        db.session.add(user)

    # Create or update store user
    storeuser = StoreUser.query.filter_by(user_id=user.id, store_id=store.id).first()
    if not storeuser:
        storeuser = StoreUser(store, user, admin=True)
    else:
        storeuser.admin = True
    db.session.add(storeuser)
    db.session.commit()

    # Log user in and redirect to app home
    flask.session['storeuserid'] = storeuser.id
    return flask.redirect(app.config['APP_URL'])
Пример #3
0
def auth_callback():
    # Put together params for token request
    code = flask.request.args['code']
    context = flask.request.args['context']
    scope = flask.request.args['scope']
    store_hash = context.split('/')[1]
    redirect = app.config['APP_URL'] + flask.url_for('auth_callback')

    # Fetch a permanent oauth token. This will throw an exception on error,
    # which will get caught by our error handler above.
    client = BigcommerceApi(client_id=client_id(), store_hash=store_hash)
    token = client.oauth_fetch_token(client_secret(), code, context, scope,
                                     redirect)
    bc_user_id = token['user']['id']
    email = token['user']['email']
    access_token = token['access_token']

    # Create or update store
    store = Store.query.filter_by(store_hash=store_hash).first()
    if store is None:
        store = Store(store_hash, access_token)
    else:
        store.access_token = access_token

    db.session.add(store)
    db.session.commit()

    # Create or update user
    user = User.query.filter_by(bc_id=bc_user_id).first()
    if user is None:
        user = User(bc_user_id, email, store, True)
    else:
        user.email = email
        user.store = store
        user.admin = True

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

    # Log user in and redirect to app home
    flask.session['userid'] = user.id
    return flask.redirect(flask.url_for('index'))
Пример #4
0
def auth_callback():
    # Put together params for token request
    code = flask.request.args['code']
    context = flask.request.args['context']
    scope = flask.request.args['scope']
    store_hash = context.split('/')[1]
    redirect = app.config['APP_URL'] + flask.url_for('auth_callback')

    # Fetch a permanent oauth token. This will throw an exception on error,
    # which will get caught by our error handler above.
    client = BigcommerceApi(client_id=client_id(), store_hash=store_hash)
    token = client.oauth_fetch_token(client_secret(), code, context, scope, redirect)
    bc_user_id = token['user']['id']
    email = token['user']['email']
    access_token = token['access_token']

    # Create or update store
    store = Store.query.filter_by(store_hash=store_hash).first()
    if store is None:
        store = Store(store_hash, access_token)
    else:
        store.access_token = access_token

    db.session.add(store)
    db.session.commit()

    # Create or update user
    user = User.query.filter_by(bc_id=bc_user_id).first()
    if user is None:
        user = User(bc_user_id, email, store, True)
    else:
        user.email = email
        user.store = store
        user.admin = True

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

    # Log user in and redirect to app home
    flask.session['userid'] = user.id
    return flask.redirect(flask.url_for('index'))
Пример #5
0
    def get(self, request):
        code = request.GET['code']
        print("code=====> ", code)
        context = request.GET['context']
        print("context=====> ", context)
        scope = request.GET['scope']
        print("scope=====> ", scope)
        store_hash = context.split('/')[1]
        print("store has=====> ", store_hash)
        redirect = settings.APP_URL + 'bigcommerce/callback'
        print("redirect=====> ", redirect)
        client = BigcommerceApi(client_id=settings.APP_CLIENT_ID,
                                store_hash=store_hash)
        token = client.oauth_fetch_token(settings.APP_CLIENT_SECRET, code,
                                         context, scope, redirect)
        bc_user_id = token['user']['id']
        email = token['user']['email']
        print("email===>", email)
        access_token = token['access_token']
        print("access_tocken====>", access_token)

        store = Store.objects.filter(store_hash=store_hash).first()
        if store is None:
            store = Store.objects.create(
                store_hash=store_hash,
                access_token=access_token,
                scope=scope,
            )
            print("============>>Create new store")
        else:
            Store.objects.update(
                access_token=access_token,
                scope=scope,
            )
            print("============>>Update new store")

        user = User.objects.filter(bc_id=bc_user_id).first()
        if user is None:
            user = User.objects.create(
                bc_id=bc_user_id,
                email=email,
            )
            print("============>>Create new user")
        elif user.email != email:
            User.update(email=email, )
            print("============>>update new user")

        storeuser = StoreUser.objects.filter(
            user_id=user.id,
            store_id=store.id,
        ).first()

        if not storeuser:
            storeuser = StoreUser.objects.create(
                store_id=store,
                user_id=user,
                admin=True,
            )
            print("============>>Create new storeuser")
        else:
            StoreUser.objects.update(admin=True)
            print("============>>Update new storeuser")

        print("====>Auth redirect APP_URL", settings.APP_URL)
        return HttpResponseRedirect(settings.APP_URL)