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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 7
0
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)