def ga_save_properties(user, org): tokens = session.pop('tokens') redirect_uri = session.get('redirect_uri') # PARSE HACKY FORM req_data = request_data() properties = [] for k, v in req_data.items(): prop = {'property': k.split('||')[0], 'profile': v} properties.append(prop) tokens['properties'] = properties ga_token = Auth.query\ .filter_by(name='google-analytics', org_id=org.id)\ .first() if not ga_token: # create settings object ga_token = Auth(org_id=org.id, name='google-analytics', value=tokens) else: ga_token.value = tokens db.session.add(ga_token) db.session.commit() # redirect to app if redirect_uri: uri = url.add_query_params(redirect_uri, auth_success='true') return redirect(uri) return jsonify(ga_token)
def fb_callback(): org_id = session.pop('org_id') redirect_uri = session.pop('redirect_uri') # check to make sure the user authorized the request if not 'code' in request.args: if not redirect_uri: raise AuthError('You did not authorize the request to facebook.') uri = url.add_query_params(redirect_uri, auth_success='false') return redirect(uri) # make a request for the access token credentials using code authorize_uri = url_for('auth_facebook.fb_callback', _external=True) data = dict(code=request.args['code'], redirect_uri=authorize_uri) # get a temporary access token temp_access_token = fb_oauth.get_access_token(data=data) tokens = fb_extend_oauth_token(temp_access_token) # upsert settings facebook_token = Auth.query\ .filter_by(name='facebook', org_id=org_id)\ .first() if not facebook_token: # create settings object facebook_token = Auth( org_id=org_id, name='facebook', value=tokens) else: facebook_token.value = tokens db.session.add(facebook_token) db.session.commit() if redirect_uri: uri = url.add_query_params(redirect_uri, auth_success='true') return redirect(uri) return jsonify(facebook_token)
def ga_save_properties(user, org): tokens = session.pop('tokens') redirect_uri = session.get('redirect_uri') # PARSE HACKY FORM req_data = request_data() properties = [] for k, v in req_data.items(): prop = { 'property': k.split('||')[0], 'profile': v } properties.append(prop) tokens['properties'] = properties ga_token = Auth.query\ .filter_by(name='google-analytics', org_id=org.id)\ .first() if not ga_token: # create settings object ga_token = Auth( org_id=org.id, name='google-analytics', value=tokens) else: ga_token.value = tokens db.session.add(ga_token) db.session.commit() # redirect to app if redirect_uri: uri = url.add_query_params(redirect_uri, auth_success='true') return redirect(uri) return jsonify(ga_token)
def twt_callback(): # get redirect uri redirect_uri = session.pop('redirect_uri') if 'twitter_oauth' not in session: if redirect_uri: uri = url.add_query_params(redirect_uri, auth_success='false') return redirect(uri) raise RequestError( 'An unkonwn error occurred during the twitter authentication process.') # get the request tokens from the session request_token, request_token_secret = session.pop('twitter_oauth') org_id = session.pop('org_id') # check to make sure the user authorized the request if not 'oauth_token' in request.args: if redirect_uri: uri = url.add_query_params(redirect_uri, auth_success='false') return redirect(uri) raise RequestError( 'An unkonwn error occurred during the twitter authentication process.') # get stable authentication tokens creds = { 'request_token': request_token, 'request_token_secret': request_token_secret } params = {'oauth_verifier': request.args['oauth_verifier']} oauth_token, oauth_token_secret = twt_oauth.get_access_token( params=params, **creds) # store stable access tokens tokens = { 'oauth_token': oauth_token, 'oauth_token_secret': oauth_token_secret } # upsert settings twt_token = Auth.query\ .filter_by(name='twitter', org_id=org_id)\ .first() if not twt_token: # create settings object twt_token = Auth( org_id=org_id, name='twitter', value=tokens) else: twt_token.value = tokens db.session.add(twt_token) db.session.commit() # redirect to app if redirect_uri: uri = url.add_query_params(redirect_uri, auth_success='true') return redirect(uri) return jsonify(twt_token)
def ga_callback(): # get session vars apikey = session.get('apikey') org_id = session.get('org_id') redirect_uri = session.get('redirect_uri') # get tokens tokens = ga_oauth.step2_exchange(request.args['code']).serialize() # if we got didn't get refresh token, # it means the user is already authenticated # instead of just throwing an error, we'll revoke these # tokens if we have them and continue with the auth process. # a helper to prevent unnecessary db transactions if 'refresh_token' not in tokens or not tokens['refresh_token']: # get current auth ga_token = Auth.query\ .filter_by(name='google-analytics', org_id=org_id)\ .first() # if it doesn't exist, something has gone wrong, most likely on our # end. if not ga_token: if not redirect_uri: raise RequestError( "It seems as if you've authenticated with google-analytics already, but we don't have a record of it. Try manually revoking your permissions at https://security.google.com/settings/security/permissions and re-authenticating." ) uri = url.add_query_params(redirect_uri, auth_success='false') return redirect(uri) # if it does exist proceed with simulation of a normal auth flow and assume # we're simply updating a organization's property settings. tokens = ga_token.value tokens.update({ 'client_id': settings.GOOGLE_ANALYTICS_CLIENT_ID, 'client_secret': settings.GOOGLE_ANALYTICS_CLIENT_SECRET, }) tokens.pop('properties', None) # get properties try: properties = ga_properties(tokens) except HTTPError as e: raise RequestError(e.message) # now we can pop the client id + secret. tokens.pop('client_secret') tokens.pop('client_id') # get the postback url. postback_url = url_for('auth_google_analytics.ga_save_properties', org=org_id, apikey=apikey) session['tokens'] = tokens # render customization form return render_template('ga_properties.html', properties=properties, postback_url=postback_url)
def twt_callback(): # get redirect uri redirect_uri = session.pop('redirect_uri') if 'twitter_oauth' not in session: if redirect_uri: uri = url.add_query_params(redirect_uri, auth_success='false') return redirect(uri) raise RequestError( 'An unkonwn error occurred during the twitter authentication process.' ) # get the request tokens from the session request_token, request_token_secret = session.pop('twitter_oauth') org_id = session.pop('org_id') # check to make sure the user authorized the request if not 'oauth_token' in request.args: if redirect_uri: uri = url.add_query_params(redirect_uri, auth_success='false') return redirect(uri) raise RequestError( 'An unkonwn error occurred during the twitter authentication process.' ) # get stable authentication tokens creds = { 'request_token': request_token, 'request_token_secret': request_token_secret } params = {'oauth_verifier': request.args['oauth_verifier']} oauth_token, oauth_token_secret = twt_oauth.get_access_token(params=params, **creds) # store stable access tokens tokens = { 'oauth_token': oauth_token, 'oauth_token_secret': oauth_token_secret } # upsert settings twt_token = Auth.query\ .filter_by(name='twitter', org_id=org_id)\ .first() if not twt_token: # create settings object twt_token = Auth(org_id=org_id, name='twitter', value=tokens) else: twt_token.value = tokens db.session.add(twt_token) db.session.commit() # redirect to app if redirect_uri: uri = url.add_query_params(redirect_uri, auth_success='true') return redirect(uri) return jsonify(twt_token)
def ga_callback(): # get session vars apikey = session.get('apikey') org_id = session.get('org_id') redirect_uri = session.get('redirect_uri') # get tokens tokens = ga_oauth.step2_exchange(request.args['code']).serialize() # if we got didn't get refresh token, # it means the user is already authenticated # instead of just throwing an error, we'll revoke these # tokens if we have them and continue with the auth process. # a helper to prevent unnecessary db transactions if 'refresh_token' not in tokens or not tokens['refresh_token']: # get current auth ga_token = Auth.query\ .filter_by(name='google-analytics', org_id=org_id)\ .first() # if it doesn't exist, something has gone wrong, most likely on our # end. if not ga_token: if not redirect_uri: raise RequestError( "It seems as if you've authenticated with google-analytics already, but we don't have a record of it. Try manually revoking your permissions at https://security.google.com/settings/security/permissions and re-authenticating.") uri = url.add_query_params(redirect_uri, auth_success='false') return redirect(uri) # if it does exist proceed with simulation of a normal auth flow and assume # we're simply updating a organization's property settings. tokens = ga_token.value tokens.update({ 'client_id': settings.GOOGLE_ANALYTICS_CLIENT_ID, 'client_secret': settings.GOOGLE_ANALYTICS_CLIENT_SECRET, }) tokens.pop('properties', None) # get properties try: properties = ga_properties(tokens) except HTTPError as e: raise RequestError(e.message) # now we can pop the client id + secret. tokens.pop('client_secret') tokens.pop('client_id') # get the postback url. postback_url = url_for( 'auth_google_analytics.ga_save_properties', org=org_id, apikey=apikey) session['tokens'] = tokens # render customization form return render_template( 'ga_properties.html', properties=properties, postback_url=postback_url)