Exemplo n.º 1
0
def associate_facebook_account(user, facebook_access_token, request=None):
    try:
        fb_user = FacebookUser.get_or_create_from_access_token(facebook_access_token, request=request)
    except GraphAPIError as e:
        papertrail.debug(u'GraphAPIError inside associate_facebook_account: {} (user: {}, token: {})'.format(e.message, user.username, facebook_access_token))

        raise ServiceError(_("There appears to be an issue communicating with Facebook. Please try again."))

    try:
        existing_fb_user = user.facebookuser

        if existing_fb_user.fb_uid == fb_user.fb_uid:
            return

        existing_fb_user.user = None
        existing_fb_user.save()
    except FacebookUser.DoesNotExist:
        pass

    fb_user.user = user
    fb_user.save()

    @bgwork.defer
    def notify_friends():
        fb_user.notify_friends_of_signup(facebook_access_token)
        fb_user.respond_to_apprequest_invites(facebook_access_token)
Exemplo n.º 2
0
    def call(self, endpoint, params, method='GET'):
        try:
            session = self.twitter.get_session((self.access_token, self.access_token_secret))
            r = session.request(method, TWITTER_API_URL + endpoint, params=params)
            json = r.json()

            # https://dev.twitter.com/docs/rate-limiting/1.1
            if 'errors' in json:
                errors = json['errors']
                status_code = r.status_code

                if status_code == 429 and 88 in [e['code'] for e in errors]:
                    raise TwitterRateLimitError()

            if r.status_code == 401:
                papertrail.debug(u'InvalidTwitterAccessToken error for endpoint {} with JSON response: {}'.format(endpoint, json.__repr__().replace('\n', ' ')))

                raise InvalidTwitterAccessToken()

            r.raise_for_status()

            return json
        except requests.exceptions.HTTPError as e:
            try:
                json = e.response.json()

                if _contains_error(json, 187):
                    raise TwitterDuplicateStatusError()
                elif _contains_error(json, 64):
                    raise TwitterAccountSuspendedError()

                raise TwitterError()
            except ValueError:
                raise TwitterError()
Exemplo n.º 3
0
def associate_facebook_account(user, facebook_access_token, request=None):
    try:
        fb_user = FacebookUser.get_or_create_from_access_token(
            facebook_access_token, request=request)
    except GraphAPIError as e:
        papertrail.debug(
            u'GraphAPIError inside associate_facebook_account: {} (user: {}, token: {})'
            .format(e.message, user.username, facebook_access_token))

        raise ServiceError(
            _("There appears to be an issue communicating with Facebook. Please try again."
              ))

    try:
        existing_fb_user = user.facebookuser

        if existing_fb_user.fb_uid == fb_user.fb_uid:
            return

        existing_fb_user.user = None
        existing_fb_user.save()
    except FacebookUser.DoesNotExist:
        pass

    fb_user.user = user
    fb_user.save()

    @bgwork.defer
    def notify_friends():
        fb_user.notify_friends_of_signup(facebook_access_token)
        fb_user.respond_to_apprequest_invites(facebook_access_token)
Exemplo n.º 4
0
    def call(self, endpoint, params, method='GET'):
        try:
            session = self.twitter.get_session(
                (self.access_token, self.access_token_secret))
            r = session.request(method,
                                TWITTER_API_URL + endpoint,
                                params=params)
            json = r.json()

            # https://dev.twitter.com/docs/rate-limiting/1.1
            if 'errors' in json:
                errors = json['errors']
                status_code = r.status_code

                if status_code == 429 and 88 in [e['code'] for e in errors]:
                    raise TwitterRateLimitError()

            if r.status_code == 401:
                papertrail.debug(
                    u'InvalidTwitterAccessToken error for endpoint {} with JSON response: {}'
                    .format(endpoint,
                            json.__repr__().replace('\n', ' ')))

                raise InvalidTwitterAccessToken()

            r.raise_for_status()

            return json
        except requests.exceptions.HTTPError as e:
            try:
                json = e.response.json()

                if _contains_error(json, 187):
                    raise TwitterDuplicateStatusError()
                elif _contains_error(json, 64):
                    raise TwitterAccountSuspendedError()

                raise TwitterError()
            except ValueError:
                raise TwitterError()
def facebook_share_pre_post(request, facebook_access_token):
    if not facebook_access_token:
        raise ServiceError(
            "Can't share to your timeline if you haven't signed into Facebook yet."
        )

    facebook_share = True

    try:
        associate_facebook_account(request.user,
                                   facebook_access_token,
                                   request=request)
    except ServiceError:
        papertrail.debug(
            u'associate_facebook_account failed inside facebook_share_pre_post: (user: {}, token: {}), raising InvalidFacebookAccessToken'
            .format(request.user.username, facebook_access_token))
        facebook_share = False
        Metrics.facebook_error_during_publish.record(request)

    if request.app_version != '1.0.1':
        try:
            permissions = GraphAPI(facebook_access_token).get_object(
                'me/permissions')['data'][0]
        except GraphAPIError as e:
            papertrail.debug(
                u'me/permissions failed inside facebook_share_pre_post: {} (user: {}, token: {}), raising InvalidFacebookAccessToken'
                .format(e.message, request.user.username,
                        facebook_access_token))
            raise InvalidFacebookAccessToken(
                "Invalid Facebook access token, please re-auth with Facebook.")
        except IOError as e:
            papertrail.debug(
                u'me/permissions failed inside facebook_share_pre_post with IOError: {} (user: {}), disabling facebook_share'
                .format(e.message, request.user.username))
            facebook_share = False
        else:
            if permissions.get('installed') != 1 or permissions.get(
                    'publish_actions') != 1:
                papertrail.debug(
                    u'me/permissions failed inside facebook_share_pre_post because insufficient permissions (user: {}), disabling facebook_share'
                    .format(request.user.username))
                facebook_share = False
                Metrics.facebook_insufficient_permissions_during_publish.record(
                    request)

    return facebook_share
def facebook_share_pre_post(request, facebook_access_token):
    if not facebook_access_token:
        raise ServiceError("Can't share to your timeline if you haven't signed into Facebook yet.")

    facebook_share = True

    try:
        associate_facebook_account(request.user, facebook_access_token, request=request)
    except ServiceError:
        papertrail.debug(
            u"associate_facebook_account failed inside facebook_share_pre_post: (user: {}, token: {}), raising InvalidFacebookAccessToken".format(
                request.user.username, facebook_access_token
            )
        )
        facebook_share = False
        Metrics.facebook_error_during_publish.record(request)

    if request.app_version != "1.0.1":
        try:
            permissions = GraphAPI(facebook_access_token).get_object("me/permissions")["data"][0]
        except GraphAPIError as e:
            papertrail.debug(
                u"me/permissions failed inside facebook_share_pre_post: {} (user: {}, token: {}), raising InvalidFacebookAccessToken".format(
                    e.message, request.user.username, facebook_access_token
                )
            )
            raise InvalidFacebookAccessToken("Invalid Facebook access token, please re-auth with Facebook.")
        except IOError as e:
            papertrail.debug(
                u"me/permissions failed inside facebook_share_pre_post with IOError: {} (user: {}), disabling facebook_share".format(
                    e.message, request.user.username
                )
            )
            facebook_share = False
        else:
            if permissions.get("installed") != 1 or permissions.get("publish_actions") != 1:
                papertrail.debug(
                    u"me/permissions failed inside facebook_share_pre_post because insufficient permissions (user: {}), disabling facebook_share".format(
                        request.user.username
                    )
                )
                facebook_share = False
                Metrics.facebook_insufficient_permissions_during_publish.record(request)

    return facebook_share