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) 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'))
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)