Example #1
0
class FacebookCLient(object):

    def __init__(self, session):
        self._session = session
        self._session.config.get_or_set('b_fb_mail_check', True)
        self._session.config.get_or_set('b_fb_status_download', False)
        self._session.config.get_or_set('b_fb_status_write', False)
        self._session.config.get_or_set('b_fb_picture_download', False)
        self._client = Pyfb(API_KEY)
        self.active = False

    def request_permitions(self):
        conn_url = self._client.get_auth_url(REDIRECT_URL)
        self._session.social_request(conn_url)

    def set_token(self, token, active):
        '''Sets the authentication token'''
        self.active = active
        if self.active and not token is None:
            self._client.set_access_token(token)
            self.active = True

    def _get_personal_nick(self):
        nick = ""
        if self.active:
            try:
                me = self._client.get_myself()
                nick = me.name
            except PyfbException, ex:
                log.warn("couldn't get nick " + str(ex))

        return nick
Example #2
0
class FacebookCLient(object):

    def __init__(self, session, token):
        self._session = session
        self._session.config.get_or_set('b_fb_mail_check', True)
        self._session.config.get_or_set('b_fb_status_download', False)
        self._session.config.get_or_set('b_fb_status_write', False)
        self._session.config.get_or_set('b_fb_picture_download', False)
        self._client = Pyfb(API_KEY)
        self.active = False
        self.active_social_request = False
        self._nick = None
        self._avatar_cache = None
        self._avatar_path = None
        # only ask for access token if we didn't have one
        if token is None:
            self.request_permitions()
        else:
            #reuse old token
            self.set_token(token, True)

    def request_permitions(self):
        '''ask user to grant access to facebook APIs'''
        if self.active_social_request:
            #avoid multiple requests
            return
        conn_url = self._client.get_auth_url(REDIRECT_URL)
        self.active_social_request = True
        self._session.social_request(conn_url)

    def set_token(self, token, active):
        '''Set the authentication token'''
        self.active = active
        if self.active and not token is None:
            self._client.set_access_token(token)
            self.active = True
        self.active_social_request = False

    def _get_personal_nick(self):
        '''get the person name as nick'''
        if self.active and self._nick is None:
            try:
                params = {}
                params["fields"] = "name"
                me = self._client.get_myself()
                self._nick = me.name
            except OAuthException:
                self.request_permitions()
            except PyfbException, ex:
                log.warn("couldn't get nick " + str(ex))

        return self._nick
Example #3
0
 def __init__(self, session, token):
     self._session = session
     self.get_app_data()
     self._client = Pyfb(self.api_key)
     self.active = False
     self.active_social_request = False
     self._nick = None
     self._avatar_cache = None
     self._avatar_path = None
     # only ask for access token if we didn't have one
     if token is None:
         self.request_permitions()
     else:
         #reuse old token
         self.set_token(token, True)
Example #4
0
 def __init__(self, session):
     self._session = session
     self._session.config.get_or_set('b_fb_mail_check', True)
     self._session.config.get_or_set('b_fb_status_download', False)
     self._session.config.get_or_set('b_fb_status_write', False)
     self._session.config.get_or_set('b_fb_picture_download', False)
     self._client = Pyfb(API_KEY)
     self.active = False
Example #5
0
 def __init__(self, session, token):
     self._session = session
     self._session.config.get_or_set('b_fb_mail_check', True)
     self._session.config.get_or_set('b_fb_status_download', False)
     self._session.config.get_or_set('b_fb_status_write', False)
     self._session.config.get_or_set('b_fb_picture_download', False)
     self.get_app_data()
     self._client = Pyfb(self.api_key)
     self.active = False
     self.active_social_request = False
     self._nick = None
     self._avatar_cache = None
     self._avatar_path = None
     # only ask for access token if we didn't have one
     if token is None:
         self.request_permitions()
     else:
         #reuse old token
         self.set_token(token, True)
Example #6
0
 def __init__(self, session, token):
     self._session = session
     self.get_app_data()
     self._client = Pyfb(self.api_key)
     self.active = False
     self.active_social_request = False
     self._nick = None
     self._avatar_cache = None
     self._avatar_path = None
     # only ask for access token if we didn't have one
     if token is None:
         self.request_permitions()
     else:
         #reuse old token
         self.set_token(token, True)
Example #7
0
 def __init__(self, session, token):
     self._session = session
     self._session.config.get_or_set('b_fb_mail_check', True)
     self._session.config.get_or_set('b_fb_status_download', False)
     self._session.config.get_or_set('b_fb_status_write', False)
     self._session.config.get_or_set('b_fb_picture_download', False)
     self._client = Pyfb(API_KEY)
     self.active = False
     self._nick = None
     self._avatar_cache = None
     self._avatar_path = None
     if token is None:
         self.request_permitions()
     else:
         #reuse old token
         self.set_token(token, True)
Example #8
0
def facebook_login_success(request):
    code = request.GET.get('code')
    facebook = Pyfb(settings.FACEBOOK_APP_ID)
    facebook.set_permissions("")
    facebook.get_access_token(settings.FACEBOOK_SECRET_KEY, code,
                              redirect_uri=settings.FACEBOOK_REDIRECT_URL)
    me = facebook.get_myself()
    authenticator = FacebookBackend()
    user = authenticator.authenticate(me)
    login(request, user)
    return HttpResponseRedirect('/')
Example #9
0
class FacebookCLient(object):

    def __init__(self, session, token):
        self._session = session
        self.get_app_data()
        self._client = Pyfb(self.api_key)
        self.active = False
        self.active_social_request = False
        self._nick = None
        self._avatar_cache = None
        self._avatar_path = None
        # only ask for access token if we didn't have one
        if token is None:
            self.request_permitions()
        else:
            #reuse old token
            self.set_token(token, True)

    def get_app_data(self):
        f = urllib.urlopen("https://github.com/emesene/emesene/raw/master/emesene/e3/xmpp/facebook.json")
        s = f.read()
        f.close()
        appdata = json.loads(s)
        self.api_key = appdata["api_key"]
        self.redirect_url = appdata["redirect_url"]

    def request_permitions(self):
        '''ask user to grant access to facebook APIs'''
        if self.active_social_request:
            #avoid multiple requests
            return
        conn_url = self._client.get_auth_url(self.redirect_url)
        self.active_social_request = True
        self._session.social_request(conn_url)

    def set_token(self, token, active):
        '''Set the authentication token'''
        self.active = active
        if self.active and not token is None:
            self._client.set_access_token(token)
            self.active = True
        self.active_social_request = False

    def _get_personal_nick(self):
        '''get the person name as nick'''
        if self.active and self._nick is None:
            try:
                params = {}
                params["fields"] = "name"
                me = self._client.get_myself(params)
                self._nick = me.name
            except OAuthException:
                self.request_permitions()
            except (PyfbException, IOError) as ex:
                log.warn("couldn't get nick " + str(ex))

        return self._nick

    nick = property(fget=_get_personal_nick, fset=None)

    def _set_personal_message(self, message):
        '''publish a message into your wall'''
        if self.active and len(message)!= 0:
            try:
                self._client.publish(message, "me")
            except OAuthException:
                self.request_permitions()
            except (PyfbException, IOError) as ex:
                log.warn("couldn't publish message " + str(ex))

    def _get_personal_message(self):
        '''gets last message published into your wall'''
        message = ""
        if self.active:
            try:
                params = {}
                params["limit"] = 1
                params["fields"] = "message"
                messages = self._client.get_statuses("me", params)
                if len(messages) > 0:
                    message = messages[0].message
            except OAuthException:
                self.request_permitions()
            except (PyfbException, IOError) as ex:
                log.warn("couldn't get message " + str(ex))
        return message

    message = property(fget=_get_personal_message, fset=_set_personal_message)

    def get_unread_mail_count(self):
        '''get current unread mail count'''
        unread_count = 0
        if self.active:
            try:
                qry = self._client.fql_query("SELECT unread_count FROM mailbox_folder WHERE folder_id = 0 and viewer_id = me()")
                unread_count = qry[0].unread_count
            except OAuthException:
                self.request_permitions()
            except (PyfbException, IOError) as ex:
                log.warn("couldn't get unread messages count " + str(ex))

        return unread_count

    def get_new_mail_info(self):
        '''return a tuple with sendername,message_body corresponding to the lastest unread message'''
        try:
            query_thread = self._client.fql_query("SELECT thread_id FROM thread WHERE folder_id = 0 and unread = 1")
            orclause = "WHERE "
            for thread in query_thread:
                orclause = "%s thread_id = %s OR " % (orclause, thread.thread_id)
            #strip last 'OR '
            orclause = orclause[0:len(orclause)-3]
            orclause = "%s ORDER BY created_time DESC" % orclause
            query_message = self._client.fql_query("SELECT body, author_id FROM message %s" % orclause)
            query_user = self._client.fql_query("SELECT name FROM user WHERE uid =  %s" % query_message[0].author_id)
            return (query_user[0].name, query_message[0].body)
        except OAuthException:
            self.request_permitions()
        except PyfbException, IOError:
            #we don't have any unread msg
            return None
Example #10
0
class FacebookCLient(object):

    def __init__(self, session, token):
        self._session = session
        self._session.config.get_or_set('b_fb_mail_check', True)
        self._session.config.get_or_set('b_fb_status_download', False)
        self._session.config.get_or_set('b_fb_status_write', False)
        self._session.config.get_or_set('b_fb_picture_download', False)
        self.get_app_data()
        self._client = Pyfb(self.api_key)
        self.active = False
        self.active_social_request = False
        self._nick = None
        self._avatar_cache = None
        self._avatar_path = None
        # only ask for access token if we didn't have one
        if token is None:
            self.request_permitions()
        else:
            #reuse old token
            self.set_token(token, True)

    def get_app_data(self):
        f = urllib.urlopen("https://github.com/emesene/emesene/raw/master/emesene/e3/xmpp/facebook.json")
        s = f.read()
        f.close()
        appdata = json.loads(s)
        self.api_key = appdata["api_key"]
        self.redirect_url = appdata["redirect_url"]

    def request_permitions(self):
        '''ask user to grant access to facebook APIs'''
        if self.active_social_request:
            #avoid multiple requests
            return
        conn_url = self._client.get_auth_url(self.redirect_url)
        self.active_social_request = True
        self._session.social_request(conn_url)

    def set_token(self, token, active):
        '''Set the authentication token'''
        self.active = active
        if self.active and not token is None:
            self._client.set_access_token(token)
            self.active = True
        self.active_social_request = False

    def _get_personal_nick(self):
        '''get the person name as nick'''
        if self.active and self._nick is None:
            try:
                params = {}
                params["fields"] = "name"
                me = self._client.get_myself(params)
                self._nick = me.name
            except OAuthException:
                self.request_permitions()
            except (PyfbException, IOError) as ex:
                log.warn("couldn't get nick " + str(ex))

        return self._nick

    nick = property(fget=_get_personal_nick, fset=None)

    def _set_personal_message(self, message):
        '''publish a message into your wall'''
        if self.active and len(message)!= 0:
            try:
                self._client.publish(message, "me")
            except OAuthException:
                self.request_permitions()
            except (PyfbException, IOError) as ex:
                log.warn("couldn't publish message " + str(ex))

    def _get_personal_message(self):
        '''gets last message published into your wall'''
        message = ""
        if self.active:
            try:
                params = {}
                params["limit"] = 1
                params["fields"] = "message"
                messages = self._client.get_statuses("me", params)
                if len(messages) > 0:
                    message = messages[0].message
            except OAuthException:
                self.request_permitions()
            except (PyfbException, IOError) as ex:
                log.warn("couldn't get message " + str(ex))
        return message

    message = property(fget=_get_personal_message, fset=_set_personal_message)

    def get_unread_mail_count(self):
        '''get current unread mail count'''
        unread_count = 0
        if self.active:
            try:
                qry = self._client.fql_query("SELECT unread_count FROM mailbox_folder WHERE folder_id = 0 and viewer_id = me()")
                unread_count = qry[0].unread_count
            except OAuthException:
                self.request_permitions()
            except (PyfbException, IOError) as ex:
                log.warn("couldn't get unread messages count " + str(ex))

        return unread_count

    def get_new_mail_info(self):
        '''return a tuple with sendername,message_body corresponding to the lastest unread message'''
        try:
            query_thread = self._client.fql_query("SELECT thread_id FROM thread WHERE folder_id = 0 and unread = 1")
            orclause = "WHERE "
            for thread in query_thread:
                orclause = "%s thread_id = %s OR " % (orclause, thread.thread_id)
            #strip last 'OR '
            orclause = orclause[0:len(orclause)-3]
            orclause = "%s ORDER BY created_time DESC" % orclause
            query_message = self._client.fql_query("SELECT body, author_id FROM message %s" % orclause)
            query_user = self._client.fql_query("SELECT name FROM user WHERE uid =  %s" % query_message[0].author_id)
            return (query_user[0].name, query_message[0].body)
        except OAuthException:
            self.request_permitions()
        except PyfbException, IOError:
            #we don't have any unread msg
            return None
Example #11
0
def facebook_login(request):
    facebook = Pyfb(settings.FACEBOOK_APP_ID)
    facebook.set_permissions("")
    return HttpResponseRedirect(facebook.get_auth_code_url(redirect_uri=settings.FACEBOOK_REDIRECT_URL))